No Elixir, as listas (vinculadas) estão no formato em [head | tail]
que head pode ser qualquer coisa e tail é uma lista do restante da lista, e[]
- a lista vazia - é a única exceção a isso.
As listas também podem ser escritas como o [1, 2, 3]
equivalente a[1 | [2 | [3 | []]]]
Sua tarefa é converter uma lista como descrito. A entrada sempre será uma lista válida (no Elixir) contendo apenas números correspondentes ao regex \[(\d+(, ?\d+)*)?\]
. Você pode levar a entrada com (um espaço após cada vírgula) ou sem espaços. A saída pode estar com (um espaço antes e depois de cada|
) ou sem espaços.
Para entradas com zeros iniciais, você pode emitir sem os zeros ou com.
A entrada deve ser tomada como uma sequência de caracteres (se estiver gravando uma função), assim como a saída.
Exemplos
[] -> []
[5] -> [5 | []]
[1, 7] -> [1 | [7 | []]]
[4, 4, 4] -> [4 | [4 | [4 | []]]]
[10, 333] -> [10 | [333 | []]]
relacionados , não uma duplicata, pois isso envolve, em parte, o modo de adição ]
até o final. Além disso, a resposta de Haskell aqui é bem diferente da resposta de lá.
Respostas:
Haskell, 50 bytes
Experimente online!
O
+0
permite que o Haskell tipo verificador de saber que estamos lidando com listas de números, entãoread
vai analisar a cadeia de entrada para nós.fonte
Python 2 , 50 bytes
Experimente online!
fonte
JavaScript (ES6), 50 bytes
Experimente online!
Versão recursiva, 51 bytes
Experimente online!
fonte
Retina ,
39333220 bytesEconomizou 13 bytes graças a H.PWiz, ovs, somente ASCII e Neil.
Experimente online!
Explicação
Se não tivermos uma lista vazia, adicione uma vírgula à direita.
Enquanto houver vírgulas, enrole as coisas com
|[ thing ]
.fonte
\b]
por,]
. (Caso contrário, eu tinha descoberto independentemente a mesma solução.) #\b
era algo por algum motivo> _> 20 bytes @MnemonicPerl 5
-pl
,3128 bytesExperimente online!
Quão?
fonte
Elixir ,
11185 bytesExperimente online!
Eu nunca usei Elixir antes. Define uma função que pega uma string e uma referência a ela mesma e retorna uma string.
fonte
Ceilão , 113 bytes
Experimente online!
Aqui está escrito:
Experimente online!
Como observado por ovs em um comentário (agora excluído): Se alguém selecionar as opções "sem espaços" para entrada e saída indicadas na pergunta, poderá proteger mais 3 bytes (os óbvios com espaços).
Se não precisarmos analisar a entrada, mas pudermos obter uma sequência como entrada, ela ficará muito menor (69 bytes).
Experimente online!
fonte
Python 3 , 65 bytes
Experimente online!
Se a entrada puder ser uma lista, então:
Python 3 , 53 bytes
Experimente online!
fonte
SNOBOL4 (CSNOBOL4) , 114 bytes
Experimente online!
fonte
Stax , 19 bytes
Execute e depure
Meu primeiro post Stax, então provavelmente não é o ideal.
Descompactado e comentado:
Execute e depure este
fonte
Casca , 22 bytes
Experimente online!
fonte
Befunge-98 (PyFunge) ,
2221 bytesExperimente online!
Se não houvesse restrições estranhas na saída, poderíamos fazer isso em 18:
Curiosamente, este é tecnicamente um programa que não faz nada em Python.
fonte
Ruby
-p
, 39 bytesPrograma completo:
Experimente online!
Ruby ,
4845 bytesFunção recursiva:
Experimente online!
fonte
R ,
847169 bytesExperimente online!
fonte
\K
lookbehind mais curtoPróton , 57 bytes
Experimente online!
fonte
Geléia , 19 bytes
Experimente online!
Uma alternativa não recursiva à solução de Erik .
fonte
Geléia , 18 bytes
Experimente online!
fonte
Gelatina , 18 bytes
Um programa completo que imprime o resultado (como um link monádico, ele aceita uma lista de caracteres, mas retorna uma lista de caracteres e números inteiros).
Experimente online!
Quão?
fonte
Java 10, 107 bytes
Experimente online.
Explicação:
fonte
ML padrão , 71 bytes
Experimente online! Usa o formato sem espaços. Por exemplo,
it "[10,333,4]"
rendimentos"[10|[333|[4]|[]]]]"
.destroçado
Experimente online!
fonte
R ,
140136 bytesAbaixo 4 bytes de acordo com os bons conselhos de Giuseppe.
Experimente online!
fonte
substr
é mais curto e o primeiropaste0
pode serpaste
obter 136 bytes.eval
,parse
esub
em vez deunlist
,strsplit
esubstr
, eu também conseguiu apenas 136 bytes (eu pensei que poderia ser mais curto, mas não era)R , 108 bytes
Experimente online!
Demorou quase um ano para encontrar uma solução R melhor que a anterior ... deveria saber
Reduce
que seria a resposta! Saídas sem espaços, a entrada pode ser com ou sem espaços.fonte
Python 2 , 63 bytes
Experimente online!
fonte
sed +
-E
, 46 bytesUma abordagem bastante direta. A segunda linha pega
[\d+, ...]
e muda para[\d | [...]]
. A terceira linha retorna à primeira linha, se a substituição tiver sido bem-sucedida. A substituição se repete até falhar e, em seguida, o programa termina. Corra comsed -E -f filename.sed
, passando a entrada via stdin.fonte
Vermelho , 110 bytes
Experimente online!
Explicação da versão não destruída:
Vermelho é tão fácil de ler, que duvido que eu tenha acrescentado os comentários acima :)
fonte
Perl 6 , 38 bytes
Experimente online!
fonte