Все любят вложенные списки! Однако иногда сложно составить вложенный список. Вы должны решить, хотите ли вы вложить его глубже или вам нужно вложить его глубже. Таким образом, для вашей задачи, вы должны "Autonest" список. Чтобы автоматически проверить список, сравните каждую пару элементов в списке.
Если второй элемент меньше, разделите два элемента, вставив между ними закрывающие и открывающие скобки, например:
} { {2 , 1}
Например,
{2, 1}
становится{2}, {1}
и{3, 2, 1}
становится{3}, {2}, {1}
Если второй элемент такой же, то ничего не меняйте. Например,
{1, 1, 1}
остается прежним и{2, 1, 1, 1}
станет{2}, {1, 1, 1}
.Если второй элемент больше, вкладывайте каждый следующий элемент на один уровень глубже. Например,
{1, 2}
станет{1, {2}}
и{1, 2, 3}
станет{1, {2, {3}}}
Соревнование
Вы должны написать программу или функцию, которая принимает список чисел и возвращает тот же список после автоматической установки. Примите этот ввод в формате списка родных языков (или ближайшего варианта) или в виде строки. Вам не нужно использовать фигурные скобки, как я делал в своих примерах. Вы можете использовать любой тип скобок, которые наиболее естественны для вашего языка, если это не противоречит. Вы можете смело предполагать, что список будет содержать только целые числа. Вы также можете предположить, что в списке будет как минимум 2 числа. Вот пример 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}}}}}
Применяются стандартные лазейки, и выигрывает самый короткий ответ в байтах!
[-100, 100]
но я не планирую давать гигантские вклады.{2, 1}
становится{2}, {1}
« Как этот уровень выше ? На один уровень выше будет{2}, 1
. То, что у вас есть, того же уровня.Ответы:
MATL ,
4843 байтаЭто использует квадратные скобки при вводе и выводе. Вывод имеет запятые без пробелов в качестве разделителей.
Обратите внимание, что выходные данные не будут интерпретироваться как вложенный список в MATL. Это было бы на других языках, и это удовлетворяет спецификации вывода в задаче.
Попробуйте онлайн!
объяснение
источник
Haskell, 96 байт
Пример использования:
('{':).f $ [7,3,3,2,6,4]
->"{7},{3,3},{2,{6},{4}}"
.Поскольку у Haskell нет вложенных списков, я возвращаю результат в виде строки. Алгоритм вложения прост: а) вывести номер, б) если следующий номер больше (меньше, равен), принт
,{
(},{
,,
), в) сделать рекурсивный вызов с остальной частью списка, г) вывести,}
если номер меньше, чем следующий, е) заключить все в{
и}
.источник
Python 3, 98 байт
Пример:
источник
Ява 8
197 187 193192 байтаСпасибо всем комментаторам, которые работали со мной над этим чудовищем. Он был заполнен до 187 байтов, пока я не нашел дорогостоящую ошибку. Однако из-за силы
Черной Магии"работает до" оператора "->" число байтов составляет здоровые 192 байта.источник
length,
C
145138 байтСпасибо Джакомо за 7 байтов!
Ввод осуществляется через аргументы командной строки, а вывод - через стандартный вывод.
образец прогона:
источник
t=atoi(*v);
вместоsscanf(*v,"%d",&t);
источникаfor(;*++v;)
для сохранения первых 4, а затемif(t<p)P"}{");if(t>p)P"{",n++);
использовать ещеt>p?P"}{"):P"{",n++);
10.CJam,
51494846 байтИспользуется тот факт, что номер последней скобки больше, чем число соседней пары, которая увеличивается в массиве.
И я не знаю
ew
оператора до этого мне пришлось переопределить.Входные данные представляют собой разделенный пробелами список, разделенный квадратными скобками.
объяснение
Я узнаю, как сделать это с помощью фактического вложенного массива, а не полагаться на prettyprinting.
Наконец,
наравне спобитым ответом MATL.источник
Retina,
7170 байтСписки разделены пробелами, фигурные скобки:
{1 2 3}
. Отрицательные числа не поддерживаются, поэтому, если это проблема, я просто удалю свой ответ. Сетчатка + отрицательные числа = не стоит.Попробуйте онлайн
источник
JavaScript (ES6), 73 байта
Пояснение: случай последовательных равных предметов прост; элемент просто добавляется к самому внутреннему массиву (здесь представлен
m
переменной;n
это массив, который содержит вm
качестве своего последнего элемента, аo
является выходным). В случае разных элементов этот элемент всегда помещается в новый самый внутренний массив, с той лишь разницей, является ли этот массив родным или дочерним по отношению к предыдущему внутреннему массиву. Для дополнительной игры в гольф я настроил массивы так, чтобы начальный элемент считался последовательным равным элементом.источник