Wsparcie! Mój całkowicie zautomatyzowany system Lights From Darks Separator V3001.01 zepsuł się! :(
Wytyczne
Zadanie
Napisz program, który pobierze tablicę (lub listę w niektórych językach) dowolnej liczby ciągów znaków, które są albo literą L, albo literą D (reprezentującą światła lub ciemności) i wypisze tablicę zawierającą dwie tablice, jedną ze wszystkimi literami L i jednym ze wszystkimi literami D.
Zasady
- To kod golfowy, więc wygrywa najkrótsza odpowiedź w bajtach
- Wkład zawsze będzie zawierał tylko wielkie litery
- Na wyjściu musi być taka sama liczba L, jak na wejściu, to samo dotyczy liter D.
- Dane wejściowe mogą zawierać tylko jeden element (a może nawet zero elementów)
- Jeśli jedna lub obie tablice wyjściowe nie zawierają żadnych elementów, wypisz pustą listę (w niektórych językach może to oznaczać, że musisz wygenerować ciąg)
- Zawsze miej pierwszą tablicę jako tablicę L.
Przykładowe dane wyjściowe:
["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
źródło
źródło
"LDLDD" -> "LL DDD"
czy coś takiego?["L","L",["D","D","D"]]
.Odpowiedzi:
APL, 8 bajtów
Wyjaśnienie:
⊂
: załączone wejście~⍨¨
: bez każdego'DL'
: „D” i „L”Przykłady:
źródło
'DL'
ale nie'LD'
?'LD'∩⍨¨⊂
lub⍞∘∩¨'LD'
może być łatwiejsze do wyjaśnienia.Python 3 , 37 bajtów
Wypróbuj online!
źródło
Haskell , 28 bajtów
Wypróbuj online!
Jeśli wejście może być lista postaci,
[]
wokółc
może być usunięty.źródło
PHP, 46 bajtów
Zakładana podana lista to:
$arr = ['L','L','D','D','L','D','D','D','D','L'];
foreach($arr as $b){$a[$b][]=$b;};print_r($a);
źródło
$argv
zamiast$arr
i oczekiwać, że skrypt będzie uruchamiany z wiersza poleceń, ponieważphp -f golf.php L L D D L D D D D L
- ale znowu musisz przejść do $ argv [0], która jest nazwą plikufor(;$b=$argv[++$i];)$a[$b][]=$b;print_r($a);
lub<?foreach($_GET as$b)$a[$b][]=$b;print_r($a);
Mathematica, 27 bajtów
Czysta funkcja przyjmuje listę
L
s iD
s (symbole, a nie znaki / ciągi) jako dane wejściowe i zwraca listę dwóch list. Na przykład,zwraca
{{L, L, L}, {D, D}}
. Wypróbuj online!Gather
sam w sobie jest blisko tego, co chcemy, ale nie spełnia specyfikację na dwa sposoby: nie produkują pustych list, jeśli wejście brakujeL
s lubD
S, i to nie zawsze porządekL
y na lewo. Wymiana wkład#
z{L,D}~Join~#
rozwiązuje problemy obu naraz, oznacza, że występuje co najmniej jedenL
i co najmniej jedenD
, aL
y zostaną zwrócone pierwsze PonieważL
wystąpił pierwszy.Rest/@
następnie usuwa początkoweL
iD
.(Próbowałem rozwiązania przy użyciu
Count
, ale z powodu problemów z curry, nie wydawało się to być krótsze:±q_:=#~Table~Count[q,#]&/@{L,D}
ma 31 bajtów.)źródło
Cases@@@{{#,L},{#,D}}&
na 22 bajty?Haskell, 32 bajty
Po prostu nudna funkcja biblioteki.
Wypróbuj online!
źródło
Rubinowy , 26 bajtów
Wypróbuj online!
źródło
PHP7,
5245 bajtów-7 bajtów dzięki @ Jörg Hülsermann
Użyj z CLI jako
php -r a.php L L L D D L D
Skrypt przechodzi przez dostarczone argumenty i dołącza je do tablicy na podstawie jej wartości.
źródło
-r
opcją użycia zamiast-f
usuwać<?php
i upuszczać spację poas
Common Lisp,
6665 bajtówWypróbuj online!
Jeśli zamiast ciągów znaków używamy symboli, jest to o wiele krótsze:
Common Lisp,
424140 bajtówWypróbuj online!
źródło
Racket, 48 bytes
Just apply this anonymous function to, e.g.,
'(L D L D D L)
źródło
Mathematica,
2218 bytes4 bytes saved by the genius of CalculatorFeline!
Try it online, or at the Wolfram sandbox!
Input is a list of the symbols
L
andD
— not strings, just the letters on their own, like in Greg Martin's answer. The syntax#|L
is shorthand forAlternatives[#,L]
, but the@@@
syntax replaces the headAlternatives
withCases
, so this code is equivalent to{Cases[#,L],Cases[#,D]}&
.źródło
{#,x}
can be#|x
for -4 bytes.@@
and@@@
work with any head, not justList
. If|
doesn't work, you can still save in some cases with&&
,||
, or**
..
and arithmetic operators.#.L|#.D
Java 8, 105 bytes
Tips welcome.
New to PPCG, do I have to includeimport java.util.*;import java.util.stream.*;
in the byte count?Non-competing, it doesn't create empty lists with an empty input. Thanks to Nevay for saving some bytes.
źródło
Stream#of
instead ofArrays#stream
to reduce the imports tojava.util.stream.*
and"D"::equals
instead ofk->k.equals("D")
. Besides that the code doesn't meet the requirements as it does not output an empty list if noL
/D
is present (test-cases 2-4).Prolog (SWI),
42, 37 bytesTry it online!
Given that
W
is a list of washing,w/3
will unifyL
andD
into lists of Lights and Darks respectively, by partitioning the washing against a predicate which succeeds if an item is a Light.[Edit: golfed -5 thanks to Fatalize]
źródło
l('L').
is 5 bytes shorter thanl(X):-X='L'.
Japt,
131210 bytesTest it (
-Q
flag for visualisation purposes only)Explanation
Implicit input of array
U
.Generate the array
[0,1]
and pass each element through a function, withX
being the current element.Filter
U
by checking for equality......with the character in string
LD
at indexX
.źródło
¥
should work..."[["L","L","D","D"],[]]
"Nope, not going there :)" - me 2017¥
.Pyth,
109 bytesTest suite.
źródło
.g
seems to be shorter.05AB1E, 8 bytes
Try it online!
źródło
Javascript (ES6), 37 bytes
This is based on a (now deleted) Javascript (ES6) answer.
Ungolfed version:
Example code snippet:
źródło
C#, 61 bytes
Full/Formatted Version:
źródło
F#, 37 bytes
Try it online!
Takes input as a list of strings, and returns two lists, the first with elements where
fun a -> a="L"
is true and the other with elements that result in false.źródło
Jelly, 10 bytes
Try it online!
In Jelly a string is a list of 1-char Python strings, e.g.
['a', 'b', 'c']
. That's why you get output such as[[['L'], ['L']], [['D'], ['D'], ['D']]]
, since 1-char Jelly strings behave the same.Doesn't work as a full program, hence the
ÇŒṘ
at the bottom.źródło
string->char[]
automagically?W€€
part.Perse, 21 bytes
I may or may not have implemented the list partition function specifically for this challenge. Takes the input as an array of strings.
źródło
Husk, 7 bytes
Try it online!
Explanation
źródło
Java 8,
110106 bytes-4 bytes thanks to @Nevay.
Explanation:
Try it here.
źródło
a->{String[]r={"",""};for(char c:a)r[c/69]+=c;return new char[][]{r[1].toCharArray(),r[0].toCharArray()};}
(-4 bytes)Octave, 21 bytes
Input is an array of characters, output is a cell array. Recycled from my answer here.
Sample execution on ideone.
źródło
R, 35 bytes
Try it online!
Reads from stdin.
źródło
Julia, 26 bytes
źródło
Haskell (Lambdabot), 41 bytes
Try it online!
źródło
PowerShell, 27 bytes
Try it online!
Edit: previously
$args.where({$_-eq'L'},'sp')
for 28 bytes. Could be$args.where({+"0x$_"},'sp')
for 27 if not for the rule that L's must come first.źródło
CJam, 14 bytes
Input is a list of characters (string), output is a list of lists of characters (list of strings).
Try it online!
Explanation:
źródło
Perl 5, 70 bytes
Try it online!
źródło