Dada uma lista ordenada de cadeias de letras no mesmo caso (az XOR AZ), em que cada cadeia é precedida por 0 ou mais caracteres de espaço (), produz a mesma lista, mas com as cadeias classificadas em cada nível de indentação. As profundidades de indentação sob pais diferentes contam como listas distintas para fins de classificação.
Exemplo
Se sua entrada for:
bdellium
fox
hound
alien
aisle
wasabi
elf
alien
horseradish
xeno
irk
wren
tsunami
djinn
zebra
sua saída deve ser
aisle
horseradish
xeno
wasabi
alien
elf
bdellium
alien
fox
hound
djinn
zebra
irk
tsunami
wren
Se desejar, pense nela como uma lista de diretórios e você precisa classificar os nomes em cada diretório.
Minutiae
- Um item pode ser recuado por qualquer número de espaços. Se for recuado pelo mesmo número de espaços que o item anterior, ele pertence à mesma hierarquia de classificação que o item anterior. Se for recuado por mais espaços, será o início de uma nova sub-hierarquia.
- Se uma linha é recuada por menos espaços do que a linha acima, ela se vincula ao subgrupo mais próximo acima dela com o mesmo # ou menos espaços antes dela (como rábano no exemplo acima, que se vincula ao grupo wasabi acima dela porque wasabi é o primeiro item acima dele a não ter mais espaços do que o rábano)
- Você deve preservar o nível de indentação de cada item de entrada em sua saída
- Guias na saída não são permitidas
- A primeira linha da entrada nunca será recuada
- Seu programa deve manipular pelo menos uma das seqüências de caracteres todas em maiúsculas e minúsculas; não precisa lidar com ambos.
Pontuação
Este é um código-golfe , então a resposta que usa o menor número de bytes vence.
['a','..b', '.c', '..d']
, qual deve ser a saída?['a','..b', '.c', '..d']
ou['a','.c','..b', '..d']
ou alguma outra coisa? (Estou usando o'.'
espaço em vez de clareza visual).Respostas:
Pitão , 23 bytes
Experimente aqui!
fonte
Python 2 , 117 bytes
Experimente online!
Toma como entrada uma lista de strings; e gera uma lista de cadeias, classificadas conforme necessário.
A idéia é transformar cada elemento em uma lista que contenha o "caminho absoluto" como uma lista; e então deixe o Python lidar com a classificação. Por exemplo, se a entrada for:
Em seguida, através do
reduce()
, convertemos para uma lista de listas:que é classificado como:
e, em seguida, imprima o último elemento de cada lista na lista de listas para obter:
fonte
APL (Dyalog Unicode) , SBCS de 31 bytes
Prefixo anônimo lambda, pega e retorna lista de strings.
Experimente online!
{
...}
"dfn";⍵
é argumento⍵[
…]
Indexe o argumento com os seguintes índices:' '(
…)¨⍵
Aplique a seguinte função tácita a cada sequência com espaço como argumento à esquerda:,
concatenar o espaço para a string⊣=
Lista booleana indicando onde o espaço é igual a cada caractere que,⊂⍨
use isso para particionar (começar parte onde true) a concatenação de espaço e string↑
misture lista de listas de strings em matriz de strings{
…}⍀
Redução cumulativa vertical por este "dfn";⍺
e⍵
são argumentos superiores e inferiores:≢⍵
o comprimento da corda inferior1=
isso é igual a 1? (ou seja, não há nada além do espaço único lá?):⍺
Nesse caso, retorne o argumento superior⋄⍵
caso contrário, retorne o argumento inferior⍋
graduação (encontre índices que classifiquem isso)fonte
Retina , 47 bytes
Experimente online! Nota: Várias linhas têm espaços à direita. Explicação:
O primeiro passo é inserir cada palavra nas seguintes linhas no mesmo recuo. Por exemplo, com as linhas
aisle
,wasabi
eelf
as linhas resultantes sãoaisle
,aisle wasabi
eaisle wasabi elf
. Descobri esse regex por tentativa e erro, portanto pode haver casos extremos com ele.Agora podemos classificar as linhas sem distinção entre maiúsculas e minúsculas.
Exclua todas as palavras inseridas.
fonte
Perl 6 ,
120 83 81 63 54 37 4742 bytes-5 bytes graças a nwellnhof
Experimente online!
Isso usa o método de Chas Brown . Um bloco de código anônimo que pega uma lista de linhas e retorna uma lista de linhas.
Explicação:
fonte
{my@a;.sort:{@a[+.comb(' ')...*>@a]=$_;~@a}}
é necessário para suportar níveis mais altos de indentação.Limpo ,
112101 bytesExperimente online!
Função anônima
:: [[Char]] -> [[Char]]
que envolve$ :: [[Char]] -> [[[Char]]]
o formato de saída correto.$
agrupa as seqüências de caracteres em "mais espaços que" e "tudo o mais depois", se repete sobre cada grupo e classifica quando estão unidas. A cada etapa, a lista que está sendo classificada se parece com:Limpo , 127 bytes
Experimente online!
Define a função
$ :: [[Char]] -> [[Char]]
que separa as seqüências de caracteres em tuplas no formulário(spaces, letters)
que são classificadas recursivamente pela função auxiliar? :: [([Char],[Char])] -> [[([Char],[Char])]]
.Explicado:
fonte
JavaScript (Node.js) ,
1141009288 bytesExperimente online!
Abordagem semelhante à resposta Python de Chas Brown, mas usando expressões regulares.
Explicação
fonte
K4 , 51 bytes
Solução:
Exemplo:
Suposições:
uma. Que cada hierarquia começará com o nível mais baixo, ou seja, você não terá:
Explicação:
fonte
Perl 5, 166 bytes
Ungolfed (tipo de):
É uma implementação recursiva bastante direta. Verificamos o nível de indentação pesquisando o primeiro caractere não espacial (
/\S/
) e obtendo seu índice ($-[0]
). Infelizmente, precisamos declarar algumas variáveis usadas na recursão, caso contrário elas serão implicitamente globais e a recursão não funcionará corretamente.fonte