Описание задачи
Давайте начнем с некоторых определений:
- отношение есть множество упорядоченных пар элементов (в этой проблеме, мы будем использовать целые числа)
Например, [(1, 2), (5, 1), (-9, 12), (0, 0), (3, 2)]
это отношение.
отношение называется транзитивным, если для любых двух пар элементов
(a, b)
и(b, c)
в этом отношении(a, c)
также присутствует пара ,[(1, 2), (2, 4), (6, 5), (1, 4)]
является переходным, потому что он содержит(1, 2)
и(2, 4)
, но(1, 4)
также,[(7, 8), (9, 10), (15, -5)]
является транзитивным, потому что нет двух пар(a, b)
,(c, d)
представленных так, чтоb
=c
.[(5, 9), (9, 54), (0, 0)]
не является переходным, потому что он содержит(5, 9)
и(9, 54)
, но не(5, 54)
Учитывая список пар целых чисел, определите, является ли отношение транзитивным или нет.
Ввод, вывод
Вам будет предоставлен список пар целых чисел в любом разумном формате. Рассмотрим отношение
[(1, 6), (9, 1), (6, 5), (0, 0)]
Следующие форматы эквивалентны:
[(1, 6), (9, 1), (6, 5), (0, 0)] # list of pairs (2-tuples)
[1, 9, 6, 0], [6, 1, 5, 0] # two lists [x1, x2, ..., xn] [y1, y2, ..., yn]
[[1, 6], [9, 1], [6, 5], [0, 0] # two-dimentional int array
[4, 1, 6, 9, 1, 6, 5, 0, 0] # (n, x1, y1, ..., xn, yn)
[1+6i, 9+i, 6+5i, 0+0i] # list of complex numbers
... many others, whatever best suits golfing purposes
Вывод: истинное значение для транзитивного отношения, иначе ложь. Вы можете предположить, что вход будет состоять как минимум из одной пары, и что пары будут уникальными.
(1,3) (2,1) (3,4) (1,4) (2,4)
. Если бы пары не были заказаны, это не было бы транзитивно, потому что(2,3)
отсутствует.[(7, 8), (9, 10), (15, -5)]
) не быть транзитивным?Ответы:
Haskell, 42 байта
Пример использования:
f [(1,2), (2,4), (6,5), (1,4)]
->True
.(Внешний) цикл по всем парам
(a,b)
и (внутренний) цикл по одним и тем же парам, теперь вызываемым(c,d)
и каждый раз, когдаb==c
проверяется, существует ли(a,d)
также существующая пара. Объедините результаты с логическимand
.источник
Пролог, 66 байт
Отношение не транзитивно, если мы можем найти (A, B) и (B, C) такие, что (A, C) не выполняется.
источник
MATL ,
2725 байтФормат ввода - это матрица (используется в
;
качестве разделителя строк), где каждая пара отношения является столбцом. Например, тестысоответственно вводятся как
Истинный вывод - это матрица, образованная единицами. Ложь - это матрица, которая содержит хотя бы один ноль.
Попробуйте онлайн!
объяснение
Сначала код сокращает входные целые до уникальных целочисленных значений, основанных на 1. Из этих значений он генерирует матрицу смежности; матрица умножает это сама; и преобразует ненулевые значения в матрице результатов в единицы. Наконец, он проверяет, что ни одна запись в последней матрице не превышает записи в матрице смежности.
источник
JavaScript (ES6),
6967 байтСохранено 2 байта благодаря идее @Cyoce. Было четыре предыдущих 69-байтовых формулировки:
источник
.every
[e]
, поэтому, даже если для назначенияe
вам потребуется 8 байтов, вы все равно сохраняете байт. Однако я пошел дальше, сделав аббревиатуру дляa.every
, которая сохранила второй байт.Брахилог , 24 байта
Попробуйте онлайн!
Объяснение:
Другими словами, если вход содержит пары
[A:B]
и[B:C]
, мы можем переставить вход для ввода[A:B]
и[B:C]
в начале, удалить все остальные элементы и создать список[A:B:B:C]
. Затем мы возвращаем истину из внутреннего предиката (фальси из всей программы), если[A:C]
его там нет.источник
CJam (22 байта)
Набор онлайн-тестов . Это анонимный блок (функция), который принимает элементы как двухуровневый массив, но набор тестов выполняет строковые манипуляции, чтобы сначала поместить ввод в подходящий формат.
рассечение
источник
Pyth, 14 байт
Тестирование
Ожидается, что формат ввода
[[0, 0], [0, 1], ... ]
источник
Mathematica, 49 байтов
Чистая функция, которая принимает список пар. Если список содержит входной
{a,b}
и ,{b,c}
но не{a,c}
для некоторыхa, b, c
, заменяет его0
. Истина это входной список, ложь есть0
.источник
C ++ 14, 140 байт
В качестве неназванного лямбда возвращается через ссылочный параметр. Требует, чтобы его вход был контейнером
pair<int,int>
. Принимая скучный подход O (n ^ 3).Ungolfed и использование:
источник
Python 2 ,
916755 байтПопробуйте онлайн!
-24 байта благодаря Leaky Nun
-12 байтов благодаря Bubbler
источник
lambda x
наlambda s
.for
s.Аксиома 103 байта
ungolfed:
упражнения
источник
Pyth -
2221 байтТестовый пакет .
источник
Clojure,
5653 байтаОбновление: Вместо того , чтобы использовать
:when
я просто проверить , что для всех пар[a b]
[c d]
либоb != c
или[a d]
находится из входного набора.Оригинал:
Ничего себе, Clojure для циклов это круто: D Это проверяет, что
for
цикл не генерирует ложное значение, которое происходит, если[a d]
не найдено из входного набора.Этот вход должен быть набором двухэлементных векторов:
Если входные данные должны быть похожими на список, то
(%[a d])
должны быть заменены((set %)[a d])
на дополнительные 6 байтов.источник
Оба эти решения являются неназванными функциями, принимающими список упорядоченных пар в качестве входных данных и возвращающих
True
илиFalse
.Mathematica, 65 байт
#~Permutations~{2}]
создает список всех упорядоченных пар упорядоченных пар из входных данных иJoin@@@
преобразует их в упорядоченные четверки. Затем они обрабатываются функциейIf[#2==#3,{#,#4},Nothing]&@@@
, которая имеет классное свойство: если два средних элемента равны, она возвращает упорядоченную пару, состоящую из первого и последнего чисел; в противном случае возвращаетсяNothing
специальный токен Mathematica, который автоматически исчезает из списков. Таким образом, результатом является набор упорядоченных пар, которые должны быть на входе, чтобы он был транзитивным;SubsetQ[#,...]
обнаруживает это свойство.Mathematica, 70 байт
Table[...,{i,#},{j,#}]
создает двумерный массив с индексамиi
иj
, которые берутся непосредственно из входных данных (отсюда обе упорядоченные пары). Функция этих двух индексов естьLast@i!=#&@@j||#~MemberQ~{#&@@i,Last@j}
, что переводится как «либо второй элементi
и первый элементj
не совпадают, либо вход содержит упорядоченную пару, состоящую из первого элементаi
и последнего элементаj
». Это создает двумерный массив логических значений, которыйAnd@@And@@@
превращается в единый логический тип.источник
APL (NARS), 39 символов, 78 байтов
тестовое задание:
одну секунду «решение» следуйте по пути:
источник
Common Lisp, 121 байт
Попробуйте онлайн!
источник