Todo mundo adora listas aninhadas! No entanto, às vezes é difícil fazer uma lista aninhada. Você precisa decidir se deseja aninhar mais fundo ou se precisa aninhar menos. Portanto, para o seu desafio, você deve "Autonestar" uma lista. Para autonestear uma lista, compare todos os itens da lista.
Se o segundo item for menor, separe os dois elementos inserindo os colchetes de fechamento e abertura entre eles, assim:
} { {2 , 1}
Por exemplo,
{2, 1}
torna{2}, {1}
-{3, 2, 1}
se e torna - se{3}, {2}, {1}
Se o segundo item for o mesmo, não altere nada. Por exemplo,
{1, 1, 1}
permanece o mesmo e{2, 1, 1, 1}
se tornaria{2}, {1, 1, 1}
.Se o segundo item for maior, aninhe cada item a seguir um nível mais profundo. Por exemplo,
{1, 2}
se tornaria{1, {2}}
e{1, 2, 3}
se tornaria{1, {2, {3}}}
O desafio
Você deve escrever um programa ou função que inclua uma lista de números e retorne a mesma lista após ser testado automaticamente. Pegue essa entrada no formato de lista nativa do seu idioma (ou a alternativa mais próxima) ou como uma string. Você não precisa usar chaves como eu fiz nos meus exemplos. Você pode usar o tipo de colchete mais natural no seu idioma, desde que consistente. Você pode assumir com segurança que a lista conterá apenas números inteiros. Você também pode assumir que a lista terá pelo menos 2 números. Aqui está um exemplo de IO:
{1, 3, 2} --> {1, {3}, {2}}
{1, 2, 3, 4, 5, 6} --> {1, {2, {3, {4, {5, {6}}}}}}
{6, 5, 4, 3, 2, 1} --> {6}, {5}, {4}, {3}, {2}, {1}
{7, 3, 3, 2, 6, 4} --> {7}, {3, 3}, {2, {6}, {4}}
{7, 3, 1, -8, 4, 8, 2, -9, 2, 8} --> {7}, {3}, {1}, {-8, {4, {8}, {2}, {-9, {2, {8}}}}}
As brechas padrão se aplicam e a resposta mais curta em bytes vence!
[-100, 100]
mas eu não estou pensando em fornecer contribuições gigantescas.{2, 1}
se torna{2}, {1}
" Como é esse nível um nível mais alto ? Um nível mais alto seria{2}, 1
. O que você tem é o mesmo nível.Respostas:
MATL ,
4843 bytesIsso usa colchetes na entrada e na saída. A saída possui vírgulas sem espaços como separadores.
Observe que a saída não seria interpretada como uma lista aninhada no MATL. Seria em outros idiomas e satisfaz a especificação de saída no desafio.
Experimente online!
Explicação
fonte
Haskell, 96 bytes
Exemplo de uso:
('{':).f $ [7,3,3,2,6,4]
->"{7},{3,3},{2,{6},{4}}"
.Como Haskell não possui listas aninhadas, retorno o resultado como uma sequência. O algoritmo de aninhamento é fácil: a) imprima o número, b) se o próximo número for maior (menor, igual), imprima
,{
(},{
,,
), c) faça uma chamada recursiva com o restante da lista; d) imprima}
se o número for menor que o próximo, e) coloque tudo em{
e}
.fonte
Python 3, 98 bytes
Exemplo:
fonte
Java
8197187193192 bytesObrigado a todos os comentaristas que trabalharam comigo nessa monstruosidade. Foi jogado até 187 bytes até que encontrei um bug caro. No entanto, devido ao poder do
Black Magic,o "desce para" operator "->" a contagem de bytes está em 192 bytes íntegros.fonte
length,
C,
145138 bytesObrigado a Giacomo por 7 bytes!
A entrada é obtida através dos argumentos da linha de comando e a saída é fornecida pelo stdout.
amostra de execução:
fonte
t=atoi(*v);
em vez desscanf(*v,"%d",&t);
Fontefor(;*++v;)
para salvar o primeiro 4 e, em seguida, insted deif(t<p)P"}{");if(t>p)P"{",n++);
usot>p?P"}{"):P"{",n++);
por 10 mais.CJam,
51494846 bytesExplora o fato de que o número do último colchete é um a mais do que o número de pares adjacentes que está aumentando na matriz.
E eu não conheço
ew
operador antes que precisei reimplementar.A entrada é uma lista separada por espaços delimitada por colchetes.
Explicação
Vou descobrir como fazer isso com uma matriz aninhada real, em vez de depender da prettyprinting.
Finalmente,
a parda resposta do MATL batido.fonte
Retina,
7170 bytesAs listas são espaço separado, com chavetas:
{1 2 3}
. Números negativos não são suportados, por isso, se isso for um problema, excluirei minha resposta. Retina + números negativos = não vale a pena.Experimente online
fonte
JavaScript (ES6), 73 bytes
Explicação: O caso de itens iguais consecutivos é fácil; o item é adicionado apenas à matriz mais interna (aqui representada pela
m
variável;n
é a matriz que contémm
como seu último elemento, enquantoo
é a saída). Para o caso de itens diferentes, o item sempre entra em uma nova matriz mais interna, a única diferença é se essa matriz é um irmão ou filho da matriz mais interna anterior. Para maior golfidade, configurei as matrizes para que o item inicial conte como um item igual consecutivo.fonte