{}
это пустой набор. Вы можете использовать ()
или, []
если хотите.
Мы не собираемся строго определять «набор», но наборы все удовлетворяют следующим свойствам:
Наборы следуют обычной математической структуре. Вот несколько важных моментов:
- Наборы не заказаны.
- Нет набора содержит себя.
- Элементы либо в наборе, либо нет, это логическое значение. Поэтому элементы набора не могут иметь кратности (то есть элемент не может быть в наборе несколько раз).
- Элементы набора также являются множествами и
{}
являются единственным примитивным элементом.
задача
Напишите программу / функцию, которая определяет, равны ли два набора.
вход
Два допустимых набора через стандартный ввод или аргумент функции. Формат ввода потерян в пределах разумного.
Некоторые действительные входные данные:
{} {{}}
{{},{{}}} {{{{{},{{}}}}}}
{{},{{},{{}}}} {{{},{{}}},{{{{{},{{}}}}}}}
Неверные данные:
{{} {} Brackets will always be balanced.
{{},{}} {} Set contains the same element twice
Вывод
Истинное значение, если входы равны, иначе ложно.
Контрольные примеры
Ваша заявка должна отвечать правильно для всех допустимых входных данных, а не только для тестовых случаев. Они могут быть обновлены в любой момент.
Truthy:
{} {}
{{},{{}}} {{{}},{}}
{{},{{},{{{}},{}}}} {{{{},{{}}},{}},{}}
Falsy:
{} {{}}
{{},{{},{{{}},{}}}} {{{{}}},{},{{}}}
{{},{{}},{{{}}},{{},{{}}}} {}
счет
Дополнительные правила
Было добавлено дополнительное правило, полностью запрещающее неупорядоченные итерируемые типы. Они слишком распространены и слишком упрощают эту задачу. Не стесняйтесь оставлять ответы, которые нарушают это, просто укажите, что они были сделаны до изменения правила.
==
в Юлия, 2 байта,frozenset.__eq__
в Python 16 байтов и т. Д.).See the comments for an explanation.
Пожалуйста, не делай этого. Комментарии нестабильны и уходят очень легко, так что важная штука идет в теле постаОтветы:
CJam, 11 байт
Попробуй это здесь.
CJam, 13 байтов
Попробуй это здесь.
источник
Желе , 6 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Брахилог , 8 байт
Это предполагает скобки на входе и выходе.
Например:
объяснение
источник
Pyth, 9 байт
Формат ввода: используйте
[]
вместо{}
.Тестирование
источник
Mathematica, 16 байт
Неименованная функция, которая ожидает список, содержащий оба набора, например
Мы используем
//@
(MapAll
) для сортировки наборов на каждом уровне, а затем утверждаем, что результаты равны.источник
JavaScript (ES6), 42 байта
Принимает ввод, используя
[]
s напримерf([[],[[]]],[[[]],[]])
. Работает путем преобразования массивов в строки, а затем сортирует их изнутри.0
и1
используются, потому что они короче, чем'['
и']'
, напримерg([[[]],[]])
,001,00111
который представляет[[],[[]]]
.источник
0+
там?0+
и+1
все, что я получу, это запятые.f=
, я не включил его в число байтов, и мне лень редактировать пост только для этого.Python 2, 49 байт
Например, вызов анонимной функции
g
:источник
g([[],[[],[]],[[],[[]]],[[]],[[[]]]], [[[],[]],[[[]],[]],[[]],[[[]]],[]])
возвращаетсяFalse
, но наборы равны. Это должно быть исправлено путем сопоставления перед сортировкой.Пролог (SWI) , 37 байт
Попробуйте онлайн!
Вводит в виде вложенных списков, то есть в квадратных скобках вместо фигурных скобок. Первоначально это было
X+Y:-sort(X,M),sort(Y,N),maplist(+,M,N).
, но затем я попытался перевести ответ Fatalize's Brachylog v1, и оказалось, что он на 3 байта короче.Вместо этого он может обрабатывать фигурные скобки для еще 23 байтов:
Пролог (SWI) , 60 байт
Попробуйте онлайн!
*
здесь преобразует (непустой, следовательно,X=Y;
) фигурный член с правой стороны в список элементов термина, а затем сортирует его с левой стороны.Так как оба аргумента
+
уже проходят*
, добавлениеsort
в in*
экономит 7 байтов по сравнению с использованиемpermutation
in+
.И, наконец, вот версия, которая обрабатывает входные списки, возможно, имеющие дубликаты элементов, и именно это вдохновило меня написать решение в Прологе для начала:
Пролог (SWI) , 57 байт
Попробуйте онлайн!
По сути,
X/Y
объявляет, что X является подмножеством Y, объявляя, что для каждого элемента X есть равный элемент Y, поэтомуX/Y,Y/X
объявляет, что X и Y являются равными наборами.источник
APL (NARS2000), 4 байта
⍦
является оператором мультимножества, который изменяет функции для обработки их аргументов как наборов, а не списков;≡
это функция эквивалентности, которая возвращает логическое значение, указывающее, являются ли аргументы полностью эквивалентными по значению и формеЧто касается дополнительного правила: обратите внимание, что в этом ответе не используется какой-либо неупорядоченный тип данных набора, а только обычные списки (которые могут содержать несколько идентичных элементов). Он просто рассматривает их как наборы.
Число байтов равно 4, потому что NARS2000 использует исключительно UCS-2.
источник
Юлия,
363532 байтаВходные данные - это вложенный массив либо (устаревший)
{}
синтаксис, либоAny[]
.Попробуйте онлайн!
источник
SETL, 1 байт
Принимает наборы в качестве левого и правого аргументов.
Обратите внимание, что это НЕ придерживается добавленного правила, которое запрещает неупорядоченные типы данных набора.
источник
Brachylog v2, 3 байта
Попробуйте онлайн!
Принимает один набор через входную переменную, а другой набор через выходную переменную. Успешно, если наборы равны и терпит неудачу, если они не.
Как и мой основной ответ на Пролог, перевод ответа Fatalize's Brachylog v1 (который, я думаю, может быть в гольфе
p:0a
?).источник
𝔼𝕊𝕄𝕚𝕟, 7 символов / 9 байтов
Try it here (ES6 browsers only).
объяснение
источник
Haskell, 77 байт
источник
==
и<
не определены?)S
как (обернутый вL
) списокS
es. У Haskell нет встроенного типа, который может представлять списки списков списков ...Perl 6 , 55 байт
Принимает участие с
[]
.Попробуйте онлайн!
источник
$^
вместо этого используют синтаксис, и я не думаю, что[]
ввод работает, так как все и[[]],[[[]]],[[[[]]]]
т. Д.[]
Wolfram Language (Mathematica) , 20 байтов
Попробуйте онлайн!
Чистая функция, которая принимает каждый набор в качестве аргумента.
источник