Вы должны создать функцию, которая вложит строку s
в массив, n
раз
>>> N("stackoverflow",2)
[['stackoverflow']]
Параметры:
s
- строка asciin
- целое число>= 0
правила
- Самый короткий код выигрывает.
- Выход будет вложенным
array
,list
илиtuple
(или аналогичного типа основаны от массива)
Тестовые случаи
>>> N("stackoverflow",0)
'stackoverflow'
>>> N("stackoverflow",1)
['stackoverflow']
>>> N("stackoverflow",5)
[[[[['stackoverflow']]]]]
Вдохновлен: вложением строки в список n раз, то есть список списка списка
"
? НапримерN("stack\"overflow",5)
Ответы:
Желе , 2 байта
Немного сбивает с толку, поскольку: (1) у желе нет строк, есть только списки символов; и (2); вывод не будет отображать вложенность. Чтобы увидеть, что это на самом деле делает то, что просят, посмотрите на строковое представление Python результата с помощью:
[]
Будет присутствовать дополнительная пара , так как сама строка будет списком символов. НапримерКак?
Код проверки концепции добавляет:
источник
Java и C #, 62 байта
Должен работать без изменений в Java и C #.
источник
05AB1E , 3 байта
Код
объяснение
Это означает, что это также работает для 0 -теста, поскольку строка уже находится в стеке.
Попробуйте онлайн!
источник
JavaScript (ES6), 20 байт
Хотя люди обычно настаивают на том, чтобы я каррировал мои функции для сохранения 1 байта, это тот случай, когда это действительно способствует решению.
источник
d=>g=n=>n?[g(n-1)]:d
Mathematica, 13 байт
источник
CJam ,
76 байтовОнлайн переводчик
Это безымянная функция , которая принимает аргументы из стека , как
S N
,S
будучи строку иN
быть рассекречивать. Вы можете выполнить это с~
оператором, что означает eval.Объяснение:
источник
{{a}*}
или{'a*~}
.{a}
n раз) вместо второго (создайте строку из na
s и выполните ее).Javascript ES6, 23 байта
Рекурсивная функция
Результаты карри в той же длине
источник
Брахилог , 10 байт
Попробуйте онлайн!
объяснение
Это будет 3 байта, если он не прослушивается. Здесь нам нужно все это, чтобы получить список,
[String, T, built-in_group]
хотя[String, T]
это уже наш вклад.К сожалению, это
:g
напрямую приводит к тому[[String, T], built-in_group]
, что не распознается должным образом,i
потому что целое числоT
находится внутри первого списка.источник
MATL, 6 байтов
В результате получается вложенный массив ячеек. Однако при отображении по умолчанию в MATL вы не можете видеть , что это такое, поскольку он не отображает все фигурные скобки. Демонстрация ниже является слегка измененной версией, которая показывает строковое представление вывода.
Попробуйте онлайн
объяснение
источник
Пайк, 3 байта
Попробуй это здесь!
источник
Pyth , 3 байта
Постоянная ссылка
Это выведет что-то вроде
...[[[[['string']]]]]...
. Это не процитировать нулевой глубины:string
.Объяснение:
Если вы хотите использовать кавычки на нулевой глубине, используйте вместо этого 4-байтовое решение (объяснение):
источник
PHP, 60 байт
48 байт, если это выглядит только как задача
источник
function f($s,$n){return$n?[f($s,$n-1)]:$s;}
.print_r()
и, если вам не нравится этот параметр,serialize()
оба они короче, чемjson_encode()
его, при дифференциации выходных данных.')
в конце кода выглядит странно.Рубин: 23 байта
Это обновлено, чтобы сделать его вызываемым Proc, а не оригинальный фрагмент. Мне было бы интересно узнать, существует ли способ
s
неявного возврата, вместо того, чтобы явно возвращать его.источник
->s,n{...}
.C,
44 байта, 41 байтВы можете проверить это, выполнив следующие действия:
Выход:
Конечно, вы получите предупреждения. Это работает на
gcc
bash на моей машине с Windows (gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
а также на настоящей машине с Linux (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
).источник
int*n(s,a)int*s;{return!a?s:n(&s,a-1);}
работает с gcc.cc -v
->Apple LLVM version 8.0.0 (clang-800.0.38)
.!
от троичного состояния и изменить порядокs
иn(&s,a-1)
сохранить байт?n(s,6)
, вы должны перейти***
к******
объявлению переменной и использовать. Это необходимо именно потому, что функция делает то, что от нее ожидают: вложите строку в массив несколько (здесь: 6) раз. Конечно, вы все равно получите три уровня,[]
потому что они жестко закодированы. Я думаю, что программа не должна выводить их вообще. Эта задача не о скобках, а о вложенности. В некоторых языках массивы печатаются в скобках, в C нет встроенной функции для их печати. Ну и что? Это не нужно здесь.*
подписи в функции?Python, 32 байта
источник
Рубин, 25 символов
Переписать из jamylak «s решение Python .
Образец прогона:
источник
C # 6, 50 байтов
источник
n<1
? Также -2 байта, если вы используетеobject
вместоdynamic
.Рубин, 24 байта
Вызывается так же, как в ответе manatwork , но более странная реализация.
*s
оборачивает входные данные (возможно, вложенную строку) в массив. Тогда, еслиn
ноль,s[n]
возвращает первый элементs
, превращая функцию в неоперативный. В противном случае он возвращается,nil
такs
как когда-либо будет иметь только один элемент, поэтому мы переходим к рекурсивному вызову.источник
V , 6 байтов
Попробуйте онлайн!
Объяснение:
источник
Perl 6 , 23 байта
Expanded:
источник
Агда, 173 байта
Поскольку тип возвращаемого значения функции зависит от числа, указанного в качестве аргумента, это явно тот случай, когда следует использовать язык с зависимой типизацией. К сожалению, игра в гольф нелегка на языке, где вы должны импортировать природные объекты и списки, чтобы использовать их. С положительной стороны, они используют
suc
там, где я ожидал бы многословноsucc
. Итак, вот мой код:(Надеюсь, я нашел все места, где пробелы могут быть опущены.)
L
- это функция типа, которая задает натуральныйn
тип, и типa
возвращает типn
вложенных списковa
, умноженных на времена , так жеL 3 Bool
будет и тип списков списков списковBool
(если бы мы имели импортированоBool
). Это позволяет нам выразить тип нашей функции как(n : ℕ) -> {a : Set} -> a -> L n a
, где фигурные скобки делают этот аргумент неявным. Код использует более короткий способ написания этого типа. Теперь функция может быть определена очевидным образом путем сопоставления с шаблоном по первому аргументу.Загрузка этого файла с
.agda
расширением в Emacs позволяет использоватьC-c C-n
(оценить срок к нормальной форме), вход для примераf 2 3
и получить правильный ответ в неудобном виде:(3 ∷ []) ∷ []
. Теперь, конечно, если вы хотите сделать это со строками, вы должны импортировать их ...источник
→
вместо->
, но, конечно, это увеличивает размер файла в кодировке UTF-8.к, 3 байта
Взятый как двоичная функция,
/
будет итеративно применять левую функцию,:
(enlist
) n раз ко второму аргументу.Пример:
источник
PHP, 44 байта
ничего сложного, только рекурсивная функция
источник
Python 2, 32 байта
Оферты
n
открыть скобки перед строкой иn
близкие скобки перед ним, то Evals результата. Если вывод строки разрешен, егоeval
можно удалить.источник
На самом деле , 4 байта
Вклад
string
тогдаn
. Предложения по игре в гольф приветствуются. Попробуйте онлайн!Ungolfing
источник
R,
3940 байтРЕДАКТИРОВАТЬ: Исправлена
n=0
проблема благодаря @rturnbull.Функция, которая принимает два входа
s
(строка) иn
(вложенность) и выводит вложенный список. Обратите внимание, что R-классlist
печатает исходные данные не так, как большинство других языков, однако, функционально похож на карту ключ / значение (с возможно безымянными ключами) или список в Python.пример
источник
n=0
, хотя. Прежде чем я увидел ваш ответ, я придумал рекурсивное решение, с которым можно справитьсяn=0
, но оно на 1 байт длиннее вашего решения (40 байт):f=function(s,n)if(n)list(f(s,n-1))else s
n=0
деле. Тем не менее, ваше решение на самом деле38
байтов, исключая наименование функции и, следовательно, короче. Отличный уловf(s,n-1)
вызов внутри него.) Насколько я знаю, рекурсивные анонимные функции невозможны в R.f=function(s,n)'if'(n,list(f(s,n-1)),s)
.Ракетка 83 байта
Ungolfed:
Тестирование:
Выход:
источник
Haskell,
4038 байтСистема строгих типов в Haskell не позволяет возвращать различные типы («Строки» против «Список строк» или «Список списка строк», ...), поэтому я должен определить свой собственный тип, который учитывает все эти случаи. Основная функция
f
рекурсивно вызываетn
раз конструкторC
для вложения иN
для базового случая.Пример использования (с
deriving (Show)
добавлением к новомуdata
типу, чтобы можно было его напечатать):f 4 "codegolf"
->C (C (C (C (N "codegolf"))))
.Редактировать: @Christian Sievers сохранил 2 байта, переписав функцию в стиле без точки для строкового аргумента. Благодарность!
источник
deriving
пункт: паренсы не нужны. - Не уверен, что это нормально - вкладывать толькоC
конструктор, который не похож на список. Моя очень похожая попытка была основана на типе данных, определенном какdata D x=J x|L[D x]
.f 0=N;f n=C. f(n-1)
1:(2:(3:([])))
с C (C (C (N "codegolf"))).C
это минусы (:
),N
ноль ([]
).C
не минусы, это только встраивание, ваш тип данных не может выразить[["a","b"],["c"]]
. Но, возможно, это нормально, так как для этой проблемы нужны только одиночные игры. -f n=...
не бессмысленно. Точка восстановленное?Either
), даже если это означало, что конструкторы были немного более многословны?тинилисп (repl), 34 байта
Определяет функцию
F
. Технически, tinylisp не имеет строк, но этот код будет работать для любого типа данных.Ungolfed (ключ к встроенным:
d
= определить,q
= цитата,i
= if,c
= cons,s
= вычитать):Пример использования:
источник
Clojure, 24 байта
Clojure несколько конкурентоспособен здесь.
iterate
создает последовательностьx, (f x), (f (f x)) ...
,nth
возвращает необходимый элемент.Смотрите это онлайн: https://ideone.com/2rQ166
источник