В Elixir (связанные) списки имеют формат, в [head | tail]
котором head может быть любым, а tail - списком остальной части списка, и []
- пустой список - единственное исключение из этого.
Списки также могут быть написаны как [1, 2, 3]
что эквивалентно[1 | [2 | [3 | []]]]
Ваша задача - преобразовать список, как описано. Входными данными всегда будет действительный список (в Elixir), содержащий только числа, соответствующие регулярному выражению \[(\d+(, ?\d+)*)?\]
. Вы можете взять ввод с (один пробел после каждой запятой) или без пробелов. Вывод может быть с (один пробел до и после каждого |
) или без пробелов.
Для входов с ведущими нулями вы можете выводить либо без нулей, либо с помощью.
Входные данные должны восприниматься как строка (если пишется функция), как и выходные данные.
Примеры
[] -> []
[5] -> [5 | []]
[1, 7] -> [1 | [7 | []]]
[4, 4, 4] -> [4 | [4 | [4 | []]]]
[10, 333] -> [10 | [333 | []]]
связанный , а не дубликат, так как это отчасти подразумевает добавление режима ]
до конца. Кроме того, ответ на Haskell здесь сильно отличается от ответа на этот вопрос.
Ответы:
Haskell, 50 байтов
Попробуйте онлайн!
Модуль
+0
проверки типа Haskell знает, что мы имеем дело со списками чисел, поэтомуread
проанализируем входную строку для нас.источник
Python 2 , 50 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 50 байт
Попробуйте онлайн!
Рекурсивная версия, 51 байт
Попробуйте онлайн!
источник
Retina ,
39333220 байтСохранено 13 байтов благодаря H.PWiz, ovs, ASCII-only и Neil.
Попробуйте онлайн!
объяснение
Если у нас нет пустого списка, добавьте запятую.
Пока есть запятые, оберните вещи
|[ thing ]
.источник
\b]
на,]
. (В противном случае я независимо обнаружил одно и то же решение.)\b
по какой-то причине забыл что-то> _> 20 байт @MnemonicPerl 5
-pl
,3128 байтПопробуйте онлайн!
Как?
источник
Эликсир ,
11185 байтПопробуйте онлайн!
Я никогда не использовал Эликсир раньше. Определяет функцию, которая принимает строку и ссылку на себя и возвращает строку.
источник
Цейлон , 113 байт
Попробуйте онлайн!
Вот это выписано:
Попробуйте онлайн!
Как отметил ovs в (теперь удаленном) комментарии: если выбрать вариант «без пробелов» для ввода и вывода, указанных в вопросе, можно сохранить еще 3 байта (очевидные с пробелами в них).
Если нам не нужно анализировать входные данные, а просто можно получить последовательность в качестве входных данных, она становится намного короче (69 байт).
Попробуйте онлайн!
источник
Python 3 , 65 байт
Попробуйте онлайн!
Если вместо ввода можно использовать список, то:
Python 3 , 53 байта
Попробуйте онлайн!
источник
SNOBOL4 (CSNOBOL4) , 114 байт
Попробуйте онлайн!
источник
Stax , 19 байт
Запустите и отладьте его
Мой первый пост Stax, так что, вероятно, не оптимально.
Распаковано и прокомментировано:
Запустите и отладьте этот
источник
Шелуха , 22 байта
Попробуйте онлайн!
источник
Befunge-98 (PyFunge) ,
2221 байтПопробуйте онлайн!
Если бы не было странных ограничений на вывод, мы могли бы сделать это в 18:
Забавный факт, технически это программа, которая ничего не делает на Python.
источник
Рубин
-p
, 39 байтПолная программа:
Попробуйте онлайн!
Руби ,
4845 байтРекурсивная функция:
Попробуйте онлайн!
источник
R ,
847169 байтПопробуйте онлайн!
источник
\K
взгляде назадПротон , 57 байт
Попробуйте онлайн!
источник
Желе , 19 байт
Попробуйте онлайн!
Нерекурсивная альтернатива решению Эрика .
источник
Желе , 18 байт
Попробуйте онлайн!
источник
Желе , 18 байт
Полная программа, печатающая результат (в виде монадической ссылки она принимает список символов, но возвращает список символов и целых чисел).
Попробуйте онлайн!
Как?
источник
Java 10, 107 байт
Попробуйте онлайн.
Объяснение:
источник
Стандартный ML , 71 байт
Попробуйте онлайн! Использует формат без пробелов. Например,
it "[10,333,4]"
урожайность"[10|[333|[4]|[]]]]"
.ungolfed
Попробуйте онлайн!
источник
R ,
140136 байтВниз на 4 байта в соответствии с рекомендациями Джузеппе.
Попробуйте онлайн!
источник
substr
короче и первымpaste0
можноpaste
получить это до 136 байтов.eval
,parse
иsub
вместоunlist
,strsplit
иsubstr
, я также управлял только 136 байтами (я думал, что это могло бы быть короче, но это не было)R , 108 байт
Попробуйте онлайн!
Потребовался почти год, чтобы найти лучшее решение R, чем предыдущее ... должен был знать,
Reduce
будет ответ! Выходы без пробелов, ввод может быть с пробелами или без них.источник
Python 2 , 63 байта
Попробуйте онлайн!
источник
sed +
-E
, 46 байтДовольно простой подход. Вторая строка берет
[\d+, ...]
и меняет его на[\d | [...]]
. Третья строка переходит обратно на первую строку, если замена прошла успешно. Замена повторяется до тех пор, пока не произойдет сбой, а затем программа завершится. Запуск сsed -E -f filename.sed
передачей ввода через стандартный ввод.источник
Красный , 110 байт
Попробуйте онлайн!
Объяснение версии без гольфа:
Красный настолько легко читается, что я сомневаюсь, что мне нужно было добавить вышеупомянутые комментарии :)
источник
Perl 6 , 38 байт
Попробуйте онлайн!
источник