Socorro! Minhas luzes completamente automatizadas do Darks Separator V3001.01 quebraram! :(
Diretrizes
Tarefa
Escreva um programa que receba uma entrada de uma matriz (ou uma lista em alguns idiomas) de qualquer quantidade de cadeias que sejam a letra L ou a letra D (representando luzes ou trevas) e produza uma matriz que contenha duas matrizes, uma com todos os L's e um com todos os D's.
Regras
- É código de golfe, então a resposta mais curta em bytes vence
- A entrada sempre conterá maiúsculas
- Deve haver o mesmo número de L's na saída que existe na entrada, o mesmo vale para os D's
- A entrada pode ter apenas um elemento (ou talvez até zero elementos)
- Se uma ou ambas as matrizes de saída não contiverem elementos, produza uma lista vazia (em alguns idiomas, isso pode significar que você precisa gerar uma string)
- Sempre tenha a primeira matriz a matriz de L's
Exemplo de saída:
["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
fonte
fonte
"LDLDD" -> "LL DDD"
ou algo assim?["L","L",["D","D","D"]]
,.Respostas:
APL, 8 bytes
Explicação:
⊂
: entrada fechada~⍨¨
: sem cada'DL'
: 'D' e 'L'Exemplos:
fonte
'DL'
mas não é'LD'
?'LD'∩⍨¨⊂
ou⍞∘∩¨'LD'
pode ser mais fácil de explicar.Python 3 , 37 bytes
Experimente online!
fonte
Haskell , 28 bytes
Experimente online!
Se a entrada puder ser uma lista de caracteres, a área
[]
ao redorc
pode ser removida.fonte
PHP, 46 bytes
Supõe-se que a lista fornecida seja:
$arr = ['L','L','D','D','L','D','D','D','D','L'];
foreach($arr as $b){$a[$b][]=$b;};print_r($a);
fonte
$argv
em vez de$arr
e esperar que o script para ser executado a partir de linha de comando comophp -f golf.php L L D D L D D D D L
- mas, novamente você tem que ir cerca de US $ argv [0], que é o nome do arquivofor(;$b=$argv[++$i];)$a[$b][]=$b;print_r($a);
ou<?foreach($_GET as$b)$a[$b][]=$b;print_r($a);
Mathematica, 27 bytes
Pura função de tomar uma lista de
L
s eD
s (símbolos, e não caracteres / strings) como entrada e retornar uma lista de duas listas. Por exemplo,retorna
{{L, L, L}, {D, D}}
. Experimente online!Gather
por si só, está próximo do que queremos, mas falha em atender às especificações de duas maneiras: não produz listas vazias se a entrada estiver faltandoL
s ouD
s, e nem sempre classificaL
s à esquerda. Substituir a entrada#
por{L,D}~Join~#
resolve dois problemas de uma vez: significa que haverá pelo menos umL
e pelo menos umD
, e osL
s serão retornados primeiro desde que umL
foi encontrado primeiro.Rest/@
depois remove o inicialL
eD
.(Tentei uma solução usando
Count
, mas devido a problemas de currying, ela não parecia ser mais curta:±q_:=#~Table~Count[q,#]&/@{L,D}
tem 31 bytes.)fonte
Cases@@@{{#,L},{#,D}}&
, por 22 bytes?Haskell, 32 bytes
Apenas uma função de biblioteca chata.
Experimente online!
fonte
Ruby , 26 bytes
Experimente online!
fonte
PHP7,
5245 bytes-7 bytes graças a @ Jörg Hülsermann
Use com CLI como
php -r a.php L L L D D L D
O script percorre os argumentos fornecidos e os anexa a uma matriz com base em seu valor.
fonte
-r
opção, em vez de-f
remover<?php
e soltar o espaço após oas
Lisp comum,
6665 bytesExperimente online!
Se, em vez de cadeias, usarmos símbolos, será muito mais curto:
Lisp comum,
424140 bytesExperimente online!
fonte
Raquete , 48 bytes
Basta aplicar essa função anônima a, por exemplo,
'(L D L D D L)
fonte
Mathematica,
2218 bytes4 bytes salvos pelo gênio da CalculatorFeline!
Experimente online ou na caixa de areia Wolfram !
Input é uma lista dos símbolos
L
eD
- não das strings, apenas as letras por si só, como na resposta de Greg Martin . A sintaxe#|L
é uma abreviação deAlternatives[#,L]
, mas a@@@
sintaxe substitui o cabeçalhoAlternatives
porCases
, portanto esse código é equivalente a{Cases[#,L],Cases[#,D]}&
.fonte
{#,x}
pode ser#|x
de -4 bytes.@@
e@@@
trabalhar com qualquer cabeça, não apenasList
. Se|
não funcionar, você ainda pode economizar em alguns casos com&&
,||
ou**
..
operadores aritméticos.#.L|#.D
Java 8, 105 bytes
Dicas bem-vindas.
Novo no PPCG, preciso incluirimport java.util.*;import java.util.stream.*;
na contagem de bytes?Não concorrente, ele não cria listas vazias com uma entrada vazia. Agradecemos a Nevay por salvar alguns bytes.
fonte
Stream#of
vez deArrays#stream
reduzir as importações parajava.util.stream.*
e em"D"::equals
vez dek->k.equals("D")
. Além disso, o código não atende aos requisitos, pois não gera uma lista vazia se nãoL
/D
estiver presente (casos de teste 2-4).Prolog (SWI) ,
42, 37 bytesExperimente online!
Dado que
W
é uma lista de lavagem,w/3
unificaráL
e formaráD
listas de Luzes e Darks, respectivamente, particionando a lavagem contra um predicado que terá êxito se um item for uma Luz.[Editado: -5 em golfe graças a Fatalize ]
fonte
l('L').
é 5 bytes menor quel(X):-X='L'.
Japonês ,
131210 bytesTeste (
-Q
sinalize apenas para fins de visualização)Explicação
Entrada implícita da matriz
U
.Gere a matriz
[0,1]
e passe cada elemento por uma função,X
sendo o elemento atual.Filtre
U
marcando a igualdade ...... com o caractere em string
LD
no índiceX
.fonte
¥
deve funcionar ..."[["L","L","D","D"],[]]
"Não, não vou lá :)" - me 2017¥
.Pitão ,
109 bytesConjunto de teste .
fonte
.g
parece ser mais curto .05AB1E , 8 bytes
Experimente online!
fonte
Javascript (ES6), 37 bytes
Isso se baseia em uma resposta Javascript (ES6) (agora excluída).
Versão não destruída:
Exemplo de trecho de código:
fonte
C #, 61 bytes
Versão completa / formatada:
fonte
F # , 37 bytes
Experimente online!
Recebe a entrada como uma lista de seqüências de caracteres e retorna duas listas, a primeira com elementos onde
fun a -> a="L"
é verdadeiro e a outra com elementos que resultam em falso.fonte
Gelatina , 10 bytes
Experimente online!
No Jelly, uma string é uma lista de strings de 1 caractere Python, por exemplo
['a', 'b', 'c']
. É por isso que você obtém resultados como[[['L'], ['L']], [['D'], ['D'], ['D']]]
, uma vez que as cordas Jelly de 1 caractere se comportam da mesma maneira.Não funciona como um programa completo, portanto,
ÇŒṘ
na parte inferior.fonte
string->char[]
automagicamente?W€€
parte.Perse , 21 bytes
Eu posso ou não ter implementado a função de partição de lista especificamente para esse desafio. Toma a entrada como uma matriz de seqüências de caracteres.
fonte
Casca , 7 bytes
Experimente online!
Explicação
fonte
Java 8,
110106 bytes-4 bytes graças a @Nevay .
Explicação:
Experimente aqui.
fonte
a->{String[]r={"",""};for(char c:a)r[c/69]+=c;return new char[][]{r[1].toCharArray(),r[0].toCharArray()};}
(-4 bytes)Oitava, 21 bytes
Entrada é uma matriz de caracteres, saída é uma matriz de células. Reciclado da minha resposta aqui .
Execução de amostra em ideone .
fonte
R, 35 bytes
Try it online!
Reads from stdin.
fonte
Julia, 26 bytes
fonte
Haskell (Lambdabot), 41 bytes
Try it online!
fonte
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.fonte
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:
fonte
Perl 5, 70 bytes
Try it online!
fonte