Hilfe! Mein komplett automatisierter Lights From Darks Separator V3001.01 ist kaputt! :(
Richtlinien
Aufgabe
Schreiben Sie ein Programm, das eine Eingabe eines Arrays (oder einer Liste in einigen Sprachen) mit einer beliebigen Anzahl von Zeichenfolgen vornimmt, die entweder den Buchstaben L oder den Buchstaben D (für Hell oder Dunkel) enthalten, und geben Sie ein Array aus, das zwei Arrays enthält, eines mit allen L's und einem mit allen D's.
Regeln
- Es ist Codegolf, also gewinnt die kürzeste Antwort in Bytes
- Die Eingabe enthält immer nur Großbuchstaben
- Es muss die gleiche Anzahl von Ls in der Ausgabe wie in der Eingabe geben, dasselbe gilt für die Ds
- Die Eingabe kann nur ein Element (oder sogar null Elemente) enthalten.
- Wenn eines oder beide der Ausgabearrays keine Elemente enthalten, geben Sie eine leere Liste aus (in einigen Sprachen bedeutet dies möglicherweise, dass Sie eine Zeichenfolge ausgeben müssen).
- Das erste Array muss immer das Array von L sein
Beispielausgabe:
["L","D","L","D","D"] -> [["L","L"],["D","D","D"]]
["L","L","L"] -> [["L","L","L"],[]]
["D","D"] -> [[],["D","D"]]
[] -> [[],[]]
code-golf
array-manipulation
sorting
Amorris
quelle
quelle
"LDLDD" -> "LL DDD"
oder so?["L","L",["D","D","D"]]
.Antworten:
APL, 8 Bytes
Erläuterung:
⊂
: beiliegende Eingabe~⍨¨
: ohne jeden'DL'
: 'D' und 'L'Beispiele:
quelle
'DL'
aber nicht'LD'
?'LD'∩⍨¨⊂
oder⍞∘∩¨'LD'
vielleicht einfacher zu erklären.Python 3 , 37 Bytes
Probieren Sie es online!
quelle
Haskell , 28 Bytes
Probieren Sie es online!
Wenn die Eingabe eine Liste von Zeichen sein kann, kann die
[]
Umgebungc
entfernt werden.quelle
PHP, 46 Bytes
Vorausgesetzt, gegebene Liste ist:
$arr = ['L','L','D','D','L','D','D','D','D','L'];
foreach($arr as $b){$a[$b][]=$b;};print_r($a);
quelle
$argv
anstelle von verwenden$arr
und erwartet, dass das Skript von der Kommandozeile ausgeführt wird, alsphp -f golf.php L L D D L D D D D L
- aber Sie müssen wieder um $ argv [0] gehen, was der Dateiname istfor(;$b=$argv[++$i];)$a[$b][]=$b;print_r($a);
oder<?foreach($_GET as$b)$a[$b][]=$b;print_r($a);
Mathematica, 27 Bytes
Reine Funktion, die eine Liste von
L
s undD
s (Symbole, keine Zeichen / Strings) als Eingabe verwendet und eine Liste von zwei Listen zurückgibt. Beispielsweise,kehrt zurück
{{L, L, L}, {D, D}}
. Probieren Sie es online!Gather
an sich ist nah an dem, was wir wollen, erfüllt die Spezifikation jedoch in zweierlei Hinsicht nicht: Es werden keine leeren Listen erstellt, wenn die EingabeL
s oderD
s fehlt , und es wird nicht immerL
s nach links sortiert . Das Ersetzen der Eingabe#
durch{L,D}~Join~#
löst beide Probleme gleichzeitig: Es gibt mindestens einL
und mindestens ein ProblemD
, und dasL
s wird zuerst zurückgegeben, seit ein Problem zuerstL
aufgetreten ist.Rest/@
entfernt dann das anfänglicheL
undD
.(Ich habe versucht, eine Lösung mit zu finden
Count
, aber aufgrund von aktuellen Problemen schien sie nicht kürzer zu sein: sie±q_:=#~Table~Count[q,#]&/@{L,D}
beträgt 31 Byte.)quelle
Cases@@@{{#,L},{#,D}}&
22 Bytes?Haskell, 32 Bytes
Nur eine langweilige Bibliotheksfunktion.
Probieren Sie es online!
quelle
Ruby , 26 Bytes
Probieren Sie es online!
quelle
PHP7,
5245 Bytes-7 Bytes dank @ Jörg Hülsermann
Verwenden Sie mit CLI als
php -r a.php L L L D D L D
Das Skript durchläuft die angegebenen Argumente und hängt sie basierend auf ihrem Wert an ein Array an.
quelle
-r
Option anstelle von-f
Entfernen<?php
und Löschen des Leerzeichens nach demas
Common Lisp,
6665 BytesProbieren Sie es online!
Wenn wir anstelle von Zeichenketten Symbole verwenden, ist dies viel kürzer:
Common Lisp,
424140 BytesProbieren Sie es online!
quelle
Schläger , 48 Bytes
Wenden Sie diese anonyme Funktion beispielsweise auf
'(L D L D D L)
quelle
Mathematica,
2218 Bytes4 Bytes gespart vom Genie von CalculatorFeline!
Probieren Sie es online oder in der Wolfram Sandbox aus !
Die Eingabe ist eine Liste der Symbole
L
undD
- nicht Zeichenfolgen, sondern nur die Buchstaben für sich, wie in Greg Martins Antwort . Die Syntax#|L
ist eine Abkürzung fürAlternatives[#,L]
, aber die@@@
Syntax ersetzt den KopfAlternatives
durchCases
, sodass dieser Code äquivalent zu ist{Cases[#,L],Cases[#,D]}&
.quelle
{#,x}
kann#|x
für -4 Bytes sein.@@
und@@@
mit jedem Kopf arbeiten, nicht nurList
. Wenn|
nicht funktioniert, können Sie immer noch in einigen Fällen sparen mit&&
,||
oder**
..
arithmetische Operatoren verwenden.#.L|#.D
Java 8, 105 Bytes
Trinkgelder willkommen.
Neu bei PPCG, muss ich die Byteanzahl berücksichtigenimport java.util.*;import java.util.stream.*;
?Nicht konkurrierend, erstellt es keine leeren Listen mit einer leeren Eingabe. Vielen Dank an Nevay für das Speichern einiger Bytes.
quelle
Stream#of
statt verwendenArrays#stream
, um die Importe aufjava.util.stream.*
und"D"::equals
statt zu reduzierenk->k.equals("D")
. Außerdem erfüllt der Code die Anforderungen nicht, da er keine leere Liste ausgibt, wenn keinL
/D
vorhanden ist (Testfälle 2-4).Prolog (SWI) ,
42, 37 BytesProbieren Sie es online!
Vorausgesetzt, das
W
ist eine Liste der Wäsche,w/3
wird vereinheitlichenL
undD
in Listen von Licht und Schatten jeweils durch Unterteile den Wasch gegen ein Prädikat , das , wenn ein Element gelingt , ist ein Licht.[Edit: Golf -5 dank Fatalize ]
quelle
l('L').
ist 5 Bytes kürzer alsl(X):-X='L'.
Japt ,
131210 BytesTest it (
-Q
Flag nur zu Visualisierungszwecken)Erläuterung
Implizite Eingabe eines Arrays
U
.Generieren Sie das Array
[0,1]
und übergeben Sie jedes ElementX
als aktuelles Element einer Funktion .Filtern,
U
indem auf Gleichheit geprüft wird ...... mit dem Zeichen in String
LD
am IndexX
.quelle
¥
sollte[["L","L","D","D"],[]]
klappen ..." "Nein, da nicht hingehen :)" - ich 2017¥
.Pyth ,
109 BytesTestsuite .
quelle
.g
scheint kürzer zu sein .05AB1E , 8 Bytes
Probieren Sie es online!
quelle
Javascript (ES6), 37 Byte
Dies basiert auf einer (jetzt gelöschten) Javascript (ES6) Antwort.
Ungolfed-Version:
Beispielcode-Snippet:
quelle
C #, 61 Bytes
Voll / Formatierte Version:
quelle
F # , 37 Bytes
Probieren Sie es online!
Nimmt Eingaben als eine Liste von Zeichenfolgen und gibt zwei Listen zurück, die eine mit Elementen, bei denen
fun a -> a="L"
true angegeben ist, und die andere mit Elementen, bei denen false angegeben ist.quelle
Gelee , 10 Bytes
Probieren Sie es online!
In Jelly ist eine Zeichenfolge eine Liste von 1-Zeichen-Python-Zeichenfolgen, z
['a', 'b', 'c']
. Das ist der Grund, warum Sie beispielsweise eine Ausgabe erhalten[[['L'], ['L']], [['D'], ['D'], ['D']]]
, da sich 1-Zeichen-Jelly-Strings gleich verhalten.Funktioniert nicht als volles Programm, daher
ÇŒṘ
das unten stehende.quelle
string->char[]
automatisch?W€€
Teil.Perse , 21 Bytes
Möglicherweise habe ich die Listenpartitionsfunktion speziell für diese Herausforderung implementiert. Nimmt die Eingabe als ein Array von Zeichenfolgen.
quelle
Schale , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
Java 8,
110106 Bytes-4 Bytes dank @Nevay .
Erläuterung:
Probieren Sie es hier aus.
quelle
a->{String[]r={"",""};for(char c:a)r[c/69]+=c;return new char[][]{r[1].toCharArray(),r[0].toCharArray()};}
(-4 Bytes)Oktave, 21 Bytes
Die Eingabe ist ein Array von Zeichen, die Ausgabe ist ein Zellenarray. Recycelt von meiner Antwort hier .
Beispielausführung auf ideone .
quelle
R , 35 Bytes
Probieren Sie es online!
Liest von stdin.
quelle
Julia, 26 Bytes
quelle
Haskell (Lambdabot), 41 Bytes
Probieren Sie es online!
quelle
PowerShell , 27 Byte
Probieren Sie es online!
Bearbeiten: zuvor
$args.where({$_-eq'L'},'sp')
für 28 Bytes. Könnte$args.where({+"0x$_"},'sp')
für 27 sein, wenn nicht für die Regel, dass L zuerst kommen muss.quelle
CJam , 14 Bytes
Eingabe ist eine Liste von Zeichen (String), Ausgabe ist eine Liste von Listen von Zeichen (Liste von Strings).
Probieren Sie es online!
Erläuterung:
quelle
Perl 5 , 70 Bytes
Probieren Sie es online!
quelle