Учитывая упорядоченный список буквенных строк в одном и том же случае (az XOR AZ), где каждой строке предшествует 0 или более пробелов (), выведите тот же список, но со строками, отсортированными на каждом уровне отступа. Глубины отступов для разных родителей считаются отдельными списками для целей сортировки.
пример
Если вы вводите:
bdellium
fox
hound
alien
aisle
wasabi
elf
alien
horseradish
xeno
irk
wren
tsunami
djinn
zebra
ваш вывод должен быть
aisle
horseradish
xeno
wasabi
alien
elf
bdellium
alien
fox
hound
djinn
zebra
irk
tsunami
wren
Если вам нравится, подумайте об этом, как о списке каталогов, и вам нужно отсортировать имена в каждом каталоге.
мелочи
- Элемент может иметь отступ на любое количество пробелов. Если он имеет одинаковое количество пробелов с предыдущим элементом, он принадлежит к той же иерархии сортировки, что и предыдущий элемент. Если он отступает большему количеству пробелов, это начало новой подчиненной иерархии.
- Если строка имеет отступ с меньшим количеством пробелов, чем строка над ней, она соединяется с ближайшей подгруппой над ней с таким же # или меньшим количеством пробелов перед ней (как хрен в приведенном выше примере, который связывается с группой васаби над ней, потому что васаби - первый предмет над ним, который не имеет больше места, чем хрен)
- Вы должны сохранить уровень отступа каждого элемента ввода в вашем выводе
- Вкладки в выводе запрещены
- Первая строка ввода никогда не будет иметь отступ
- Ваша программа должна обрабатывать хотя бы одну строку из всех прописных и строчных букв; это не должно обращаться с обоими.
счет
Это код-гольф , поэтому ответ, который использует наименьшее количество байтов, выигрывает.
['a','..b', '.c', '..d']
, то каким должен быть выход?['a','..b', '.c', '..d']
или['a','.c','..b', '..d']
какая-то другая вещь? (Я использую'.'
вместо места для наглядности).Ответы:
Pyth , 23 байта
Попробуй это здесь!
источник
Python 2 , 117 байт
Попробуйте онлайн!
Принимает в качестве входных данных список строк; и выводит список строк, отсортированных по мере необходимости.
Идея состоит в том, чтобы превратить каждый элемент в список, который содержит «абсолютный путь» в виде списка; а затем пусть Python обрабатывает сортировку. Например, если вход:
Затем с помощью
reduce()
мы преобразуем в список списков:который сортируется как:
и затем выведите последний элемент каждого списка в list-of-lists, чтобы получить:
источник
APL (Dyalog Unicode) , 31 байт SBCS
Анонимный префикс лямбда, принимает и возвращает список строк.
Попробуйте онлайн!
{
…}
"Дфн";⍵
это аргумент⍵[
…]
Индексировать аргумент следующими индексами:' '(
…)¨⍵
Применить следующую скрытую функцию к каждой строке с пробелом в качестве левого аргумента:,
объединить пробел со строкой⊣=
Логический список, указывающий, где пробел равен каждому символу,⊂⍨
используйте это, чтобы разделить (начать часть, где истина) объединение пробела и строки↑
смешать список списков строк в матрицу строк{
…}⍀
Кумулятивное уменьшение по вертикали этим «dfn»;⍺
а⍵
верхние и нижние арги:≢⍵
длина нижней строки1=
это равно 1? (то есть там нет ничего, кроме единственного пробела?):⍺
если так, верните верхний аргумент⋄⍵
иначе, верните нижний аргумент⍋
оценить (найти индексы, которые будут сортировать это)источник
Сетчатка , 47 байт
Попробуйте онлайн! Примечание: несколько строк имеют пробелы. Объяснение:
Первый шаг - вставить каждое слово в следующие строки с одинаковым отступом. Например, с помощью линии
aisle
,wasabi
иelf
полученные линииaisle
,aisle wasabi
иaisle wasabi elf
. Я обнаружил это регулярное выражение методом проб и ошибок, поэтому в нем могут быть крайние случаи.Теперь мы можем сортировать строки без учета регистра.
Удалить все вставленные слова.
источник
Perl 6 ,
120 83 81 63 54 37 4742 байта-5 байт благодаря nwellnhof
Попробуйте онлайн!
Это использует метод Часа Брауна . Блок анонимного кода, который принимает список строк и возвращает список строк.
Объяснение:
источник
{my@a;.sort:{@a[+.comb(' ')...*>@a]=$_;~@a}}
требуется для поддержки более высоких уровней отступов.Чистый ,
112101 байтПопробуйте онлайн!
Анонимная функция,
:: [[Char]] -> [[Char]]
которая переносится$ :: [[Char]] -> [[[Char]]]
в правильный формат вывода.$
группирует строки в «больше пробелов, чем» и «все остальное после», рекурсивно обрабатывает каждую группу и сортирует, когда они присоединены. На каждом шаге сортируемый список выглядит так:Чисто , 127 байт
Попробуйте онлайн!
Определяет функцию,
$ :: [[Char]] -> [[Char]]
которая разделяет строки на кортежи в форме,(spaces, letters)
которые рекурсивно сортируются вспомогательной функцией? :: [([Char],[Char])] -> [[([Char],[Char])]]
.Разъяснение:
источник
JavaScript (Node.js) ,
1141009288 байтПопробуйте онлайн!
Аналогичный подход к ответу Chas Brown на Python, но с использованием регулярных выражений.
объяснение
источник
К4 , 51 байт
Решение:
Пример:
Предположения:
а. То, что каждая иерархия будет начинаться с самого низкого уровня, т.е. вы не получите:
Объяснение:
источник
Perl 5, 166 байт
Ungolfed (вроде):
Это довольно простая рекурсивная реализация. Мы проверяем уровень отступа, ища первый непробельный символ (
/\S/
) и получая его индекс ($-[0]
). К сожалению, нам действительно нужно объявить несколько переменных, которые используются в рекурсии, иначе они будут неявно глобальными и рекурсия не будет работать правильно.источник