Натуральные числа, включая 0, формально определяются как множества следующим образом :
- Число 0 определяется как пустой набор, {}
- Для n ≥ 0 число n +1 определяется как n ∪ { n }.
Как следствие, n = {0, 1, ..., n -1}.
Первые числа, определенные этой процедурой, являются:
- 0 = {}
- 1 = {{}}
- 2 = {{}, {{}}}
- 3 = {{}, {{}}, {{}, {{}}}}
Вызов
Учитывая n
, выведите его представление в виде набора.
правила
Выход может последовательно использовать любой кронштейн символ , такие как {}
, []
, ()
или <>
. Произвольные символы (такие как 01
) не допускаются.
Вместо запятой, как указано выше, разделителем может быть любой знак пунктуации; или это может быть несуществующим.
Пробелы (не переводы строк) могут быть включены произвольно и непоследовательно.
Например, число 2 с квадратными скобками и точкой с запятой в качестве разделителя [[]; [[]]]
, или эквивалентно [ [ ]; [ [ ] ] ]
, или даже[ [ ] ;[ []]]
Порядок , в котором элементы множества определяется не имеет значения. Таким образом, вы можете использовать любой порядок в представлении. Например, это некоторые допустимые результаты для 3
:
{{},{{}},{{},{{}}}}
{{{}},{{},{{}}},{}}
{{{}},{{{}},{}},{}}
Вы можете написать программу или функцию . Вывод может быть строкой или, если вы используете функцию, вы можете вернуть вложенный список или массив, чье строковое представление соответствует приведенному выше.
Контрольные примеры
0 -> {}
1 -> {{}}
2 -> {{},{{}}}
3 -> {{},{{}},{{},{{}}}}
4 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}
5 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}
6 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}
7 -> {{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}}}}
источник
Ответы:
Желе , 3 байта
Это монадическая ссылка. Попробуйте онлайн!
Как это работает
Каждое натуральное число является набором всех предыдущих натуральных чисел, т. Е. N = {0,…, n-1} . Поскольку перед 0 нет натуральных чисел , мы имеем 0 = {} .
источник
ḶL
как это неоперативное, мнемоника не длинна. Также есть недвоичные, десятичные, unhalve, unine, unarccosine и т. Д.Python 2, 26 байт
Проверьте это на Ideone .
источник
JavaScript (ES6), 32 байта
Достаточно просто.
источник
.map()
без функции стрелки внутри :-).map(Number)
это довольно распространенный случай..map(e=>+e)
короче, на байт.Perl 6 , 16 байт
Возвращает вложенную структуру данных.
Пример:
Объяснение:
источник
Рубин,
2721 байтЯ новичок в рубиновом гольфе, но здесь ничего не выходит. Спасибо Джордану за сохранение 6 байтов!
Это рекурсивная функция
f
(процедура, если быть точным) и принимает аргументs
. Он отображает процедурныйf
над0...s
, что диапазон[0, s)
.источник
map{|e|f[e]}
наmap &f
.Haskell,
3227 байтПопробуйте это на Ideone.
источник
CJam , 14 байтов
Попробуйте онлайн!
объяснение
На каждой итерации блок строит представление числа из предыдущего. Чтобы проиллюстрировать это, давайте рассмотрим вторую итерацию, где представление числа
2
построено из представления1
, которое является строкой"[[]]"
."[[]]"
_
(дубликата) оно содержит"[[]]"
:"[[]]"
)
(uncons) содержит"[[]]"
,"[[]"
,"]"
@
(циклический) она содержит"[[]"
,"]"
,"[[]]"
\
(своп) она содержит"[[]"
,"[[]]"
,"]"
]
(упаковать в массив) он содержит["[[]" "[[]]" "]"]
, который будет отображаться в виде строки"[[][[]]]"
.источник
Чеддер, 17 байт
Короткая рекурсия + Короткая дистанция + Короткая итерация = Задача, в которой чеддер справляется очень хорошо
Неконкурентный, 11 байт
=>
Оператор был добавлен после того, как этот вызов был выпущен сделать этот ответ , не конкурируя.Это может показаться странным, но позвольте мне упростить это:
в основном
n
это вход иf
сама функция.|>n
генерирует [0, n) и=>
отображает этоf
.источник
05AB1E ,
87 байтобъяснение
Попробуйте онлайн!
Сохранено 1 байт благодаря Аднану.
источник
Pyth, 4 байта
Тестирование
L
: Определить функциюy
с помощью вводаb
yMb
:y
отображается в диапазоне0, 1, ..., b-1
На входе 0 эта карта возвращается
[]
. В противном случае он возвращаетy
сопоставленные по всем числам доb
.источник
MATL , 13 байт
Попробуйте онлайн!
объяснение
источник
Perl, 27 байт
Включает +1 для
-p
Кажется, что многие различные методы заканчиваются как 27 или 28 байтов. например
Лучшее, что я мог найти, это
поскольку на старых perls вы можете оставить пробел перед
for
и получить 26 байтовисточник
Mathematica, 14 байтов
источник
Mathematica, 31 байт
Непосредственно реализует определение как вложенный список. Использует безымянную функцию, которая рекурсивно вызывает себя, используя
#0
.источник
Union
вместоJoin
:±0={};±n_:={t=±(n-1)}⋃t
... Однако, в этом случае даже итеративное решение будет еще короче:Nest[{#}⋃#&,{},#]&
Сетчатка ,
2418 байтПопробуйте онлайн!(Первая строка включает набор тестов, разделенных переводом строки.)
объяснение
Это преобразует входные данные в унарные и добавляет
<>
представление0
.Здесь
+
указывает, что эта замена должна выполняться в цикле, пока строка не перестанет изменяться. Проще объяснить это, пройдя отдельные шаги, которые я предпринял, играя в гольф. Давайте с этой версией замены:Это соответствует последнему
1
унарному представлению оставшегося ввода (чтобы удалить его и уменьшить входное значение), а также содержимому текущего набора в конце. Затем он заменяется новым набором, содержащим предыдущий и его содержимое. Тем не менее, мы можем заметить, что$1
сопровождается>
в обоих случаях, и, следовательно, мы можем включить его в сам захват и исключить его из шаблона замены. Это приводит к формеОднако теперь мы можем заметить, что
(.*)
просто захватывает суффикс строки после,1<
и мы даже повторно вставляем этот суффикс в конце с$1
. Так как синтаксис подстановки дает нам возможность ссылаться на часть строки после совпадения с,$'
мы можем просто пропустить обе эти части и получить версию, использованную в ответе:источник
{}
, но<>
это единственная пара, которая никогда не нуждается в побеге, поэтому я решил пойти с этим. ;)Недогрузка , 14 байтов
Попробуйте онлайн!
Программы с полной загрузкой не могут принимать входные данные с помощью любого из наших определенных методов, так что это функция, которая принимает входные данные из стека в виде чисел Черча (обычный способ определения целых чисел в недогрузке) и производит вывод в стек в виде строки. ,
Эти
(…)
группировки маркеров требуется , чтобы сделать эту функцию ( для повторного использования) , а не фрагмент (использоваться только один раз). Оболочка в ссылке TIO деструктивно использует данную функцию^
, но ее можно использовать повторно, сделав ее копию и использовав только одну из копий при ее вызове. Он также обеспечивает ввод в программу (здесь(:*:*)
, то есть 4), и печатает вывод, используяS
.объяснение
Underload неожиданно подходит для этой задачи, так как ходят по тарпингу Тьюринга, имея такие полезные примитивы, как «копировать» и «заключать в скобки». (Так или иначе, Underload, обычно очень многословный язык, опережает Mathematica, обычно язык, который выигрывает благодаря огромному набору встроенных функций благодаря более подходящим встроенным функциям!) Вот как работает программа:
Возведение в степень функции эффективно заставляет шаги функции повторяться столько раз, как, например,
(:a*)
³(:a*:a*:a*)
. Это идиоматический способ написать цикл, который повторяется заданное количество раз в недогрузке. (Вы можете заметить, что выше~^
описано два разных способа; это потому, что целые числа в Underload определены как возведение в степень функции, специализированное для этого целого числа, поэтому для возведения в степень функции вы просто пытаетесь выполнить целое число, как если бы оно было функцией .)источник
Par / GP , 23 байта
Попробуйте онлайн!
источник
APL (NARS), 15 символов, 30 байтов
тест:
Я не знаю, будет ли это принято ... Zilde - это ⍬ здесь это представляет набор пустот {}, если я хочу напечатать элемент Zilde или один элемент, полный Zilde, и Zilde приложил все, что происходит, это ничего не печатать ... так что для Zilde нужно определить одну функцию, которую я называю o (
o←⎕fmt
) Я не вставляю в счетчик, потому что элемент и его структура существуют, даже если sys не печатает его ... Это возможно, если io равен 0может быть решение 12 символов тоже ...
источник
Брахилог , 14 байт
Попробуйте онлайн!
объяснение
источник
GAP , 22 байта
Например:
источник
Ракетка 119 байт
Ungolfed:
Тестирование (In Racket {} аналогично () и вывод по умолчанию ()):
Чтобы четко видеть каждое число (от 0 до 3):
источник
Пакетная, 74 байта
Использует тот факт, что каждый ответ равен предыдущему ответу, вставленному в себя после ведущего
{
. Первые несколько выходов следующие:источник