Biorąc pod uwagę uporządkowaną listę ciągów liter tej samej wielkości (az XOR AZ), gdzie każdy ciąg jest poprzedzony 0 lub więcej znakami spacji (), wypisuje tę samą listę, ale z ciągami posortowanymi na każdym poziomie wcięcia. Głębokości wcięć dla różnych rodziców liczą się jako odrębne listy do celów sortowania.
Przykład
Jeśli twój wkład to:
bdellium
fox
hound
alien
aisle
wasabi
elf
alien
horseradish
xeno
irk
wren
tsunami
djinn
zebra
twój wynik powinien być
aisle
horseradish
xeno
wasabi
alien
elf
bdellium
alien
fox
hound
djinn
zebra
irk
tsunami
wren
Jeśli chcesz, pomyśl o tym jak o liście katalogów i musisz posortować nazwy w każdym katalogu.
Drobne szczegóły
- Element może być wcięty przez dowolną liczbę spacji. Jeśli jest wcięty tą samą liczbą spacji co poprzedni element, należy do tej samej hierarchii sortowania co poprzedni element. Jeśli jest wcięty przez więcej spacji, jest to początek nowej podhierarchii.
- Jeśli linia jest wcięta przez mniejszą liczbę spacji niż linia nad nią, łączy się z najbliższą podgrupą nad nią z tym samym # lub mniejszymi spacjami przed nią (jak chrzan w powyższym przykładzie, który łączy się z grupą wasabi nad nią, ponieważ wasabi to pierwszy przedmiot powyżej, który nie ma więcej miejsca niż chrzan)
- Musisz zachować poziom wcięcia każdego elementu wejściowego na wyjściu
- Karty wyjściowe są niedozwolone
- Pierwszy wiersz danych wejściowych nigdy nie będzie wcięty
- Twój program musi obsługiwać co najmniej jeden ciąg wszystkich wielkich i małych liter; nie musi obsługiwać obu.
Punktacja
To jest golf golfowy , więc wygrywa odpowiedź wykorzystująca najmniej bajtów.
['a','..b', '.c', '..d']
, jakie powinno być wyjście?['a','..b', '.c', '..d']
lub['a','.c','..b', '..d']
coś innego? (Używam'.'
zamiast miejsca dla przejrzystości wizualnej).Odpowiedzi:
Pyth , 23 bajty
Wypróbuj tutaj!
źródło
Python 2 , 117 bajtów
Wypróbuj online!
Pobiera jako dane wejściowe listę ciągów; i wyświetla listę ciągów znaków, posortowaną zgodnie z wymaganiami.
Chodzi o to, aby każdy element przekształcić w listę zawierającą „ścieżkę bezwzględną” jako listę; i pozwól Pythonowi zająć się sortowaniem. Np. Jeśli dane wejściowe to:
Następnie za pomocą
reduce()
konwertujemy na listę list:który jest sortowany jako:
a następnie wypisz ostatni element każdej listy z listy list, aby uzyskać:
źródło
APL (Dyalog Unicode) , 31 bajtów SBCS
Anonimowy przedrostek lambda, pobiera i zwraca listę ciągów znaków.
Wypróbuj online!
{
…}
„Dfn”;⍵
jest argumentem⍵[
…]
Zindeksuj argument za pomocą następujących wskaźników:' '(
…)¨⍵
Zastosuj następującą ukrytą funkcję do każdego łańcucha ze spacją jako lewym argumentem:,
konkatenuj spację z łańcuchem⊣=
Lista boolowska wskazująca, gdzie spacja jest równa każdemu znakowi, który,⊂⍨
użyj go do podzielenia (rozpocznij część, gdzie prawda) konkatenacji spacji i łańcucha↑
mieszaj listę list ciągów w macierz ciągów{
…}⍀
Pionowe skumulowane zmniejszenie o to „dfn”;⍺
i⍵
są górnymi i dolnymi argumentami:≢⍵
długość dolnego ciągu1=
czy to jest równe 1? (tzn. czy jest tam tylko jedna przestrzeń?):⍺
jeśli tak, zwróć górny argument⋄⍵
w przeciwnym razie zwróć niższy argument⍋
oceniaj (znajdź wskaźniki, które to posortują)źródło
Siatkówka , 47 bajtów
Wypróbuj online! Uwaga: kilka linii ma końcowe spacje. Wyjaśnienie:
Pierwszym krokiem jest wstawienie każdego słowa do kolejnych wierszy z tym samym wcięciem. Na przykład liniami
aisle
,wasabi
aelf
wynikowe linie toaisle
,aisle wasabi
iaisle wasabi elf
. Znalazłem ten regex metodą prób i błędów, więc mogą występować z nim przypadki brzegowe.Teraz możemy sortować linie bez rozróżniania wielkości liter.
Usuń wszystkie wstawione słowa.
źródło
Perl 6 ,
120 83 81 63 54 37 4742 bajtów-5 bajtów dzięki nwellnhof
Wypróbuj online!
To wykorzystuje metodę Chasa Browna . Anonimowy blok kodu, który pobiera listę wierszy i zwraca listę wierszy.
Wyjaśnienie:
źródło
{my@a;.sort:{@a[+.comb(' ')...*>@a]=$_;~@a}}
jest wymagane do obsługi wyższych poziomów wcięć.Czysty ,
112101 bajtówWypróbuj online!
Anonimowa funkcja,
:: [[Char]] -> [[Char]]
która otacza$ :: [[Char]] -> [[[Char]]]
właściwy format wyjściowy.$
grupuje ciągi znaków w „więcej spacji niż” i „wszystko inne później”, powtarza się nad każdą grupą i sortuje, gdy są do siebie przyległe. Na każdym kroku sortowana lista wygląda następująco:Czysty , 127 bajtów
Wypróbuj online!
Definiuje funkcję,
$ :: [[Char]] -> [[Char]]
która dzieli ciągi na krotki w formie,(spaces, letters)
które są rekurencyjnie sortowane według funkcji pomocnika? :: [([Char],[Char])] -> [[([Char],[Char])]]
.Wyjaśnił:
źródło
JavaScript (Node.js) ,
1141009288 bajtówWypróbuj online!
Podobne podejście do odpowiedzi Pythona Chasa Browna, ale zamiast tego za pomocą wyrażeń regularnych.
Wyjaśnienie
źródło
K4 , 51 bajtów
Rozwiązanie:
Przykład:
Założenia:
za. Że każda hierarchia rozpocznie się od najniższego poziomu, tzn. Nie otrzymasz:
Wyjaśnienie:
źródło
Perl 5, 166 bajtów
Niegolfowany (w pewnym sensie):
Jest to dość prosta implementacja rekurencyjna. Poziom wcięcia sprawdzamy, szukając pierwszego znaku spacji (
/\S/
) i uzyskując jego indeks ($-[0]
). Niestety, faktycznie musimy zadeklarować garść zmiennych używanych w rekursji, w przeciwnym razie będą one domyślnie globalne i rekursja nie będzie działać poprawnie.źródło