Вам будет предоставлены два массивов / списков / векторы неотрицательных целых чисел A и B . Ваша задача состоит в том, чтобы вывести целое число N , которое появляется в обоих A и B , а также является уникальным в обоих A и B .
Вы можете предположить, что существует хотя бы один такой номер.
Разрешен любой разумный метод / формат ввода и вывода .
Эти лазейки запрещены.
Это код-гольф , поэтому выигрывает самый короткий код на каждом языке программирования!
Тестовые случаи:
A, B -> Выход [6], [1, 6] -> 6 [1, 2, 3, 4], [4, 5, 6, 7] -> 4 [0, 73, 38, 29], [38, 29, 73, 0] -> 73 [1, 3, 4, 6, 6, 9], [8, 7, 6, 3, 4, 3] -> 4 [2, 2, 2, 6, 3, 5, 8, 2], [8, 7, 5, 8] -> 5 [12, 19, 18, 289, 19, 17], [12, 19, 18, 17, 17, 289] -> 289 [17, 29, 39, 29, 29, 39, 18], [19, 19, 18, 20, 17, 18] -> 17 [17, 29, 39, 29, 29, 39, 18, 18], [19, 19, 18, 20, 17, 18] -> 17
источник
eS@Fm.m/d
) и взяв входные данные в виде списка из двух списков.Python 3 ,
615654 байтаСохранено 7 байтов благодаря @ Mr.Xcoder , @ pizzapants184 и @ovs
Попробуйте онлайн!
источник
05AB1E ,
98 байт-1 байт благодаря Эрику Аутгольферу
Попробуйте онлайн!
источник
Шелуха , 7 байт
Принимает ввод в виде списка из двух списков, работает также для любого количества списков (возвращая наибольшее число, которое встречается ровно один раз в каждом, если это возможно). Попробуйте онлайн!
объяснение
Это первый ответ Husk на (ab) использование новой функции «Maximum by»
►
.источник
Bash + coreutils, 60 байт
Попробуйте онлайн
Баш, 89 байт
TIO
источник
sort -rn
сsed q
в конце вместо того,tail -1
чтобы побрить 1 байт. Отличная находка сgrep -wf
кстати. +1Желе , 11 байт
Попробуйте онлайн!
источник
`
!J, 23 байта
(-.-.@~:#])
удаляет из списка любые повторяющиеся элементы&
сделать это с обеими аргументами([-.-.)
Мы хотим, чтобы A пересекалось с B. Это эквивалентная фраза: «A минус (A минус B)»>./
Взять максимумПопробуйте онлайн!
источник
e.~#]
. Гольф это оказалось непростым делом ... Я пытался использовать/.
-key безуспешно (((1=#)/.~#~.)
для первой части, которая, по моим подсчетам, на 2 байта длиннее)PowerShell , 94 байта
Попробуйте онлайн!
Берет вход
$a
и$b
как массивы. Создает ,filter
чтоgroup
ев элементы входного массива вместе и вытаскивает только те , сcount
-eq
UAL к1
(то есть, только те , которые являются уникальными во входном массиве).Следующая строка затем строит алгоритм. Сначала мы
sort
$a
, а затем вытащить те, которые являются-in
уникальными предметами$b
. Они сами тогда уникальны,[-1]
выбирается самое большое , и мы берем.Name
их. Это осталось на конвейере и вывод неявный.источник
Javascript (ES6),
102867571 байтСпасибо @justinMariner за получение от 102 до 86
Спасибо @tsh за получение от 86 до 75
Спасибо @Arnauld для получения от 75 до 71
Попробуйте онлайн!
источник
e
появляется только один разa
иb
.lastIndexOf
это, это довольно умно. Вы можете получить это до 86 байт: попробуйте онлайн! , Проверьте советы JS для больше.(g=x=>x.filter(y=>y==e).length==1)
короче.Haskell ,
5753 байтаПопробуйте онлайн!
UPD: спасибо @Laikoni
источник
f
как инфиксный оператор и написать[1|...]==[1]
вместо того,sum[1|...]==1
чтобы сохранить несколько байтов!
сand
экономит еще два байта: попробуйте онлайн!Wolfram Language (Mathematica) , 40 байт
Попробуйте онлайн!
Как это работает
Tally@#
дает список уникальных элементов первого ввода вместе с их количеством: например,Tally[{2,2,2,6,3,5,8,2}]
доходность{{2,4},{6,1},{3,1},{5,1},{8,1}}
.Tally@#2
делает то же самое для второго списка и⋂
находит пары, присутствующие в обоих. Затем мы выбираем (сCases
) пары, оканчивающиеся на1
, беря первый элемент каждого результата, что дает нам список всех уникальных близнецов. Наконец,Max
возвращается самый большой уникальный близнец.источник
Рёда , 48 байт
Попробуйте онлайн!
Вдохновленный ответом jq170727's jq .
Объяснение:
источник
F # (.NET Core) ,
117115114111108 байт115114 байтДругое решение с
countBy
этим временем:Попробуйте онлайн!
117111 байтПопробуйте онлайн!
100% F #! Любая помощь приветствуется!
6 байтов выиграно благодаря префиксной нотации!
108 байт
@
это функция concat! Спасибо @ Ayb4btu за этот алгоритм.Попробуйте онлайн!
источник
C # (.NET Core) ,
8584 байтаПопробуйте онлайн!
Наивное решение с LINQ (
using System;using System.Linq;
+ 31 символ, поэтому 116 байтов с заголовком)84! Я забыл карри!
источник
Пип ,
1716 байтЭта функция принимает два списка в качестве аргументов. Попробуйте онлайн!
объяснение
источник
APL (Dyalog) , 18 символов = 23 байта *
Полное тело программы. Запрашивает список списков из STDIN. Работает с любым количеством списков. Выходы в STDOUT.
Попробуйте онлайн!
⎕
запросить оценку ввода от STDIN{
…}⌸¨
Для каждого списка вызовите следующую функцию для каждого уникального элемента в этом списке, используя уникальный элемент в качестве левого аргумента (⍺
) и список индексов его появления в качестве правого аргумента (⍵
):≢⍵
подсчет индексов (т.е. количество вхождений)1=
равно 1⍺⍴⍨
используйте это, чтобы изменить форму определенного элемента (т.е. дает пустой список, если не уникален)Теперь у нас есть два списка уникальных элементов для каждого входного списка (хотя каждый элемент является списком, и есть пустые списки как остаток от неуникальных элементов).
∩/
пересечение (сокращение)∊
ε NLIST (Flatten)⌈/
Макс (уменьшение)* в Классике, считая
⌸
как⎕U2338
.источник
MATL , 13 байт
Попробуйте онлайн! Или проверьте все контрольные примеры .
объяснение
источник
PHP, 98 байт
Предоставить массивы в качестве параметров GET
a
иb
.источник
Java 8, 133 байта
Объяснение:
Попробуй это здесь.
источник
R , 73 байта
Попробуйте онлайн!
Вычисления
A
пересекаютсяB
, тогда максимум разницы между этим и дублированными элементамиA
иB
.источник
JavaScript ES5,
122121114 байтЯ новичок здесь, так что я не знаю, могу ли я удалить определение функции и просто поместить ее содержимое (что сэкономило бы мне 17 байт)
Вот рабочий пример:
122121114От 122 до 121 байта: инициализация переноса в
От 121 до 114 байт:
b
должна быть строкаисточник
b
и сохранитьb=''+b,
?f=(a,b)=>{for(b=''+b,i=a.sort().length;--i+1;)if(a[i]!=a[i+1]&&a[i]!=a[i-1]&&!(b.split(a[i]).length-2))return a[i]}
.SQLite , 118 байт
Попробуйте онлайн!
Впервые в SQL, любая помощь приветствуется!
источник
Jq 1,5 , 76 байт
расширенный
Попробуйте онлайн!
Вот еще одно решение такой же длины:
расширенный
Попробуйте онлайн!
источник
APL, 47 байт
Объявляет анонимную функцию, которая принимает два вектора, удаляет дубликаты элементов, а затем находит самый большой элемент в пересечении результатов.
A←⍺
иB←⍵
сохраните аргументы, переданные функции вA
иB
.a=b
возвращает вектор с 1 в каждом индексе, в которомa
равноb
. Еслиa
скаляр (т.е. единичная величина, а не вектор), это возвращает вектор с 1, где элементb
находится,a
и 0, когда это не так. Например:{+/⍵=A}
: вложенная анонимная функция; найти вхождения аргумента в вектореA
и сложить их, т.е. найти количество вхождений аргумента вA
1={+/⍵=A}¨A
: примените вложенную анонимную функцию к каждому элементу в A и найдите те, которые равны 1, т.е. уникальные элементы((1={+/⍵=A}¨A)/A←⍺)
: найдя расположение уникальных элементов, выберите только эти элементы в исходном векторе (/
выбирает из правого аргумента элементы, расположение которых соответствует 1 в левом аргументе)R←((1={+/⍵=A}¨A)/A←⍺)∩(1={+/⍵=B}¨B)/B←⍵
: повторить процесс для второго аргумента; Теперь, когда у нас есть только уникальные элементы, найдите пересечение, т.е. общие элементы, и сохраните его в вектореR
R[⍒R]
: доступ к элементамR
в порядке убывания1↑R[⍒R]
: взять первый элементR
сортировки в порядке убыванияПрецедент:
источник
J , 30 байт
Как это работает:
Я начинаю с тестирования, где два списка перекрываются
=/
(вставляет тест на равенство между всеми членами списков:Более одного 1 в одном и том же столбце означает, что число не является уникальным для левого аргумента (в данном случае 6); в строке - для правильного аргумента (3)
Затем я суммирую все строки и все столбцы, чтобы найти, где находятся дубликаты:
Я нахожу декартово произведение вышеупомянутых списков и устанавливаю элементы больше 1 к 0.
Я маскирую матрицу равенства c с помощью m, чтобы найти уникальные элементы, общие для обоих списков, и умножаю левый аргумент на это.
Затем я выравниваю список и нахожу элемент max:
Попробуйте онлайн!
источник
C # (.NET Core) ,
66 + 31 = 97,65 + 31 = 96 байт.Попробуйте онлайн!
+31 байт для
using System;using System.Linq;
Я черпал вдохновение из ответа @ aloisdg. Однако вместо того, чтобы искать уникальные значения в обоих массивах, я инвертировал порядок операций, так что
intersect
сначала, а затем нахожу максимальное значение элементов, которые встречаются дважды, когда массивы сцепляются и пересекаются. Я могу использовать<3
какCount
будет по крайней мере 2 для любого значения, как это будет в обоих массивах.Подтверждения
-1 байт благодаря @aloisdg и его предложению использовать
Func
карри.источник
Октава ,
5756 байтАнонимная функция, которая принимает в качестве входных данных массив ячеек из двух числовых массивов.
Попробуйте онлайн!
объяснение
Для каждого (
cellfun(@(x)...)
) из двух входных массивов это создает матрицу парных сравнений равенства между его записями (x.'==x
); сохраняет (x(...)
) только те записи, для которых сумма столбца равна1
(sum(...)==1
); и упаковывает результат в ячейку ({...}
). Пересечение (intersect
) двух результатов ({:}
) вычисляется, иmax(...)
берется максимум ( ).источник
Wolfram Language (Mathematica) , 49 байтов
Попробуйте онлайн!
источник