В теории множеств натуральные числа обычно кодируются как чистые множества , то есть множества, которые содержат только пустой набор или другие чистые множества , Однако не все чистые множества представляют собой натуральные числа. Эта задача состоит в том, чтобы решить, представляет ли данный чистый набор кодировку натурального числа или нет.
Кодирование натуральных чисел работает следующим образом 1 :
- Ноль - это пустое множество:
- Для числа :
Таким образом, кодировки первых нескольких натуральных чисел
Задание
- Учитывая строку, представляющую чистый набор, определите, кодирует ли этот набор натуральное число согласно вышеупомянутой конструкции.
- Однако обратите внимание, что элементы набора не упорядочены, поэтому не является единственным допустимым представлением как, например, представляет один и тот же набор.
- Вы можете использовать
[]
,()
или<>
вместо{}
. - Вы можете предположить, что наборы даны без
,
разделителя. - Вы можете предположить
{{},{}}
, что на входе не будет повторяющихся элементов, например, это недопустимый вход, и что вход правильно сформирован, например, нет{{},
,{,{}}
или похожий.
Тестовые случаи
Правда:
{}
{{}}
{{},{{}}}
{{{}},{}}
{{},{{}},{{},{{}}}}
{{{},{{}}},{},{{}}}
{{{{}},{}},{{}},{}}
{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}}
{{{{{}},{}},{{}},{}},{{}},{},{{},{{}}}}
{{},{{}},{{},{{}},{{},{{}}},{{},{{}},{{},{{}}}}},{{{}},{}},{{},{{}},{{},{{}}}}}
{{{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}}
Ложь:
{{{}}}
{{{{}}}}
{{{{}},{}}}
{{},{{}},{{{}}}}
{{{},{{}}},{{}}}
{{{{{}}},{}},{{}},{}}
{{},{{}},{{},{{}}},{{},{{}},{{{}}}}}
{{{{{}},{}},{{{}}},{}},{{}},{},{{},{{}}}}
{{{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}},{{{{{}},{}},{{}},{}},{{{}},{}},{{}}},{{{{}},{}},{{}},{}},{{{}},{}},{{}},{}}
Связанный: Естественная конструкция (Выведите заданную кодировку заданного натурального числа.)
1 См. Https://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers
code-golf
decision-problem
set-theory
Laikoni
источник
источник
Ответы:
JavaScript (Node.js) ,
534844 байтаПопробуйте онлайн! Тестовые случаи в основном бесстыдно украдены из ответа @ Arnauld's. Объяснение: если набор представляет собой натуральное число, то представляемое им натуральное число должно быть равным размеру набора, и (учитывая, что элементы гарантированно различаются) элементы должны быть представлениями натуральных чисел, меньшими его, и поэтому они должны иметь меньшую длину. Это тривиально верно для пустого набора, конечно. Редактировать: 5 байтов сохранено благодаря @Arnauld. Сохранено 4 байта благодаря @Cowsquack.
источник
!e[a.length-1]
должен сохранить 3 байтаa[e.length]&&
за 5 байтов!g=(A,a=eval(A))=>a.every(e=>a[e.length]&&g(e))
будет работать?Python 3 ,
695844 байта11 байтов благодаря Эрику Аутгольферу.
14 байтов благодаря г-ну Xcoder.
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) ,
6059 байтПопробуйте онлайн!
Ядром этого решения является функция
который преобразует список формы
{0,1,2,...,n-1}
в любом порядке в выходные данныеn
(в частности, он преобразуется{}
в0
) и преобразует все остальное в действительное числоE
.Вызовите эту функцию
f
. Учитывая ввод, такой как"{{{}},{}}"
, мы делаем следующее:f
на каждом уровне, получаяf[{f[{f[{}]}], f[{}]}]
.f
, мы получим натуральное число для ввода, представляющего его. Например,f[{f[{f[{}]}], f[{}]}]
=f[{f[{0}], 0}]
=f[{1, 0}]
=2
. Все остальное будет производитьE
.E
.источник
Brachylog (v2), 9 байт
Попробуйте онлайн!
Как обычно для решения проблемы , это полная программа. Ввод из стандартного ввода, используя квадратные скобки. Вывод на стандартный вывод как
true.
противfalse.
.объяснение
Хотя я сказал выше, что это полная программа, на самом деле она более интересна; это и полная программа, и функция. При использовании в качестве полной программы он печатает, является
true.
ли набор натуральным числом илиfalse.
нет. При использовании в качестве функции он «нормализует» натуральное число (то есть нормализует все его элементы и сортирует их по порядку по значению; эта программа использует внутренние списки, а не наборы) или «выдает исключение» (на самом деле это ошибка, так как Пролог), если ввод не является натуральным числом.Полное поведение программы достаточно просто объяснить: оно чисто неявное в обработке Brachylog полных программ, которые не содержат инструкций ввода / вывода. Рассматриваемое поведение таково: «запустите функцию, взяв ее входные данные из стандартного ввода и убедившись, что ее выходные данные соответствуют описанию, данному первым аргументом командной строки; если утверждение не выполнено или программа выдает исключение, напечатайте
false.
, в противном случае выведите на печатьtrue.
» , В этом случае аргумент командной строки отсутствует (т. Е. «Все идет»), поэтому поведение функции исключение / исключение выдает результат.Что касается поведения функции:
Натуральное число определяется как содержащее две части: элементы натурального числа ниже, объединенные с самим числом. Таким образом, все его элементы также являются натуральными числами. Мы можем распознать натуральное число, а) проверив, что все его элементы являются натуральными числами, б) проверив, что самый большой элемент набора идентичен множеству без его самого большого элемента.
Когда мы используем списки, а не наборы (таким образом, квадратные скобки), нам нужно поместить их в согласованный порядок, чтобы сработало сравнение на равенство (в данном случае, отсортированное по «значению»). Порядок сортировки по умолчанию Brachylog будет сортировать префикс списка перед самим списком, что удобно означает, что он будет сортировать натуральные числа по числовому значению. Таким образом, мы можем просто рекурсивно отсортировать все наши числа, чтобы привести их в последовательный порядок. Фактически, с помощью функции, которую мы определяем рекурсивно, мы можем достичь обоих результатов одновременно: рекурсивная сортировка элементов числа и проверка того, что это натуральное число.
Функция, таким образом, состоит из четырех основных частей.
↰ᵐ
является рекурсивным вызовом, гарантирующим, что каждый элемент является натуральным числом, и преобразовывающим его каждый элемент в нормализованную форму.o
нормализует само число (его элементы уже нормализованы, поэтому все, что нам нужно сделать, это отсортировать). Затем.t~k|
убедитесь, что у нас есть структура, которую мы хотим, проверив, что самый большой элемент и другие элементы одинаковы. Пустой список (то есть 0) не имеет последнего элемента, поэтому получит ошибку подтверждения с помощьюt
;|Ė
обрабатывает этот случай, через давая явный запасной вариант в случае , когда список входов пуст.источник
K (нгн / к) ,
262427 байтПопробуйте онлайн!
input - строка json, проанализированная
`j@
(синтаксис, специфичный для ngn / k){
}
рекурсивная функция с аргументомx
. он возвращает натуральное число, представленное множествомx
, или null (0N
), если оно не представляет его.$[
;
;
]
если-то-еще. 0 фальси, другие целые числа правдивы!#x
целые числа от 0 (включительно) до длиныx
(исключая)^
безo'x
recursion (o
) для каждого ('
) элементаx
#
длина^
нулевой?~
не@
выступает в качестве фиктивного последнего глагола , так что~
и^
получить композиции с{
}
вместо того , чтобы применять к немуисточник
Желе , 10 байт
Попробуйте онлайн!
источник
Japt , 9 байт
Порт Нейла JS решение . Пожалуйста, проголосуйте, если вы голосуете за это.
Попробуйте или запустите все тесты
источник
Красный , 81 байт
Попробуйте онлайн!
Похоже на ответ Лаки Нун Python 3
источник
Желе , 8 байт
Поскольку входные данные должны быть строкой, эта отправка действительна только как полная программа.
Попробуйте онлайн! или проверьте все тесты
Как это работает
Это дает каноническое представление входных данных, состоящих исключительно из отсортированных массивов.
источник
Желе , 7 байт
Это порт ответа Python про Лаки Нун .
Поскольку входные данные должны быть строкой, эта отправка действительна только как полная программа.
Попробуйте онлайн! или проверьте все тесты
Как это работает
источник
Wolfram Language (Mathematica) , 52 байта
Попробуйте онлайн!
источник