Вдохновленный (с объяснением украдено у) это
Фон
Скажем, у вас есть два списка A = [a_1, a_2, ..., a_n]
и B = [b_1, b_2, ..., b_n]
целых чисел. Мы говорим, A
что потенциально делим на то, B
если есть перестановка, B
которая делает a_i
делимым b_i
на всех i
. Тогда возникает проблема: можно ли изменить порядок (т. Е. Переставить), B
чтобы a_i
он делился b_i
на всех i
? Например, если у вас есть
A = [6, 12, 8]
B = [3, 4, 6]
Тогда ответ будет True
, так как B
может быть заказана быть , B = [3, 6, 4]
и тогда мы бы что a_1 / b_1 = 2
, a_2 / b_2 = 2
и a_3 / b_3 = 2
, все из которых являются целыми числами, поэтому A
потенциально-кратно B
.
В качестве примера, который должен выводить False
, мы могли бы иметь:
A = [10, 12, 6, 5, 21, 25]
B = [2, 7, 5, 3, 12, 3]
Причина в False
том, что мы не можем переупорядочить, B
когда 25 и 5 A
, но единственным делителем B
будет 5, так что один будет опущен.
Твое задание
Ваша задача, очевидно, определить, являются ли два списка (заданных в качестве входных данных) потенциально делимыми. Вы можете принимать входные данные любым приемлемым способом, как при выводе.
Дубликаты в списках возможны, и единственное ограничение размера на целые числа - это ваш язык. Все целые числа в обоих списках будут больше 0, и оба списка будут одинакового размера.
Как и во всех проблемах с решением, выходные значения должны быть 2 различными значениями, которые представляют истину и ложь.
Это код-гольф, поэтому выигрывает самый короткий код!
Контрольные примеры
Input, input => output
[6, 12, 8], [3, 4, 6] => True
[10, 5, 7], [1, 5, 100] => False
[14, 10053, 6, 9] [1,1,1,1] => True
[12] [7] => False
[0, 6, 19, 1, 3] [2, 3, 4, 5, 6] => undefined
источник
Ответы:
Желе , 5 байт
Возвращает 0 для True , 1 для False .
Попробуйте онлайн!
Как это устроено
источник
Шелуха ,
765 байтСохранено 2 байта благодаря @Zgarb
Принимает аргументы в обратном порядке и возвращает
1
дляTrue
и0
дляFalse
.Попробуйте онлайн!
объяснение
источник
VΠMz¦P
должно работать на 6 байтов.Mz
может быть‡
.▼▲
вместо▲▼
. Хорошая идея в любом случае!05AB1E , 7 байтов
Входные данные: принимает списки B и A (обратный порядок).
Выходные данные: 1, если истина, 0 в противном случае
Попробуйте онлайн!
Пояснения:
источник
MATL ,
876 байт1 байт, используя идею ответа от желе Денниса
Входы есть
B
, тогдаA
. Вывод0
если делится или1
если нет.Попробуйте онлайн!
объяснение
источник
Mathematica, 52 байта
спасибо @ngenisis за -5 байт
источник
Cases
как правило, короче:Cases[Permutations@#2,p_/;And@@IntegerQ/@(#/p)]!={}&
JavaScript (ES6),
6763 байтаВозвращает логическое значение.
Контрольные примеры
Показать фрагмент кода
источник
Haskell ,
7974686261 байтПопробуйте онлайн!
Сохранено 1 байт благодаря @nimi
источник
f a=any((<1).sum.zipWith rem a).permutations
.R + комбинат ,
696658 байт-3 байта благодаря Ярко Дуббелдаму
еще -8 байт благодаря Ярко
как ни странно, R не имеет встроенной функции для генерации всех перестановок. Возвращает логическое значение.
Кроме того, со вторым улучшением Ярко приводит
any
список к векторуlogical
с предупреждением.Попробуйте онлайн! (Г-скрипка)
источник
Mathematica, 42 байта
источник
Желе , 7 байт
Попробуйте онлайн!
Факторная сложность в длине списка.
источник
any
встроенного? TILPyth - 11 байт
Тестовый пакет .
источник
J, 27 байт
Попробуйте онлайн!
Принимает первый список в качестве левого аргумента и второй список в качестве правого.
источник
(|"1~e.~0*[)i.@!@#A.]
CJam,
2017 байтТестовая версия
Функция, которая принимает массив B в качестве первого аргумента и массив A в качестве второго аргумента. Обратите внимание, что в тестовой версии я переключаю порядок на A, а затем B.
источник
JavaScript (ES6), 100 байт
Несколько неэффективно; дополнительный
&
ускорит это.источник
PHP,
112 180178 байтЯ думал слишком коротко.
анонимная функция принимает два массива, возвращает
NULL
ложное и1
правдивое.Выдает ошибку, если второй массив содержит
0
.Попробуйте онлайн .
источник
$f([6,5],[3,5])
.C (gcc) , 191 байт
Попробуйте онлайн!
Использование:
f(int size, int size, int *a, int *b)
возвращает,
1
если делится,0
противном случае. Смотрите пример использования на TIO.(Должен делать перестановки трудный путь в C, так что это вряд ли конкурентно)
источник
Perl 6 , 38 байт
На самом деле ответ @ nwellnhof кажется слишком читабельным, поэтому я решил следовать хорошей традиции Perl, заключающейся в коде только для записи :—).
1 байт сохранен благодаря @nwellnhof.
Попробуйте онлайн!
Что он делает: это анонимная функция, которая принимает два аргумента списка. Когда мы говорим
@^a
, мы имеем в виду первое, когда@^b
это второе.(@^a,)
список , содержащий список@^a
.@^b.permutations
список всех перестановок@^b
. Оператор "XZ %%" создает все возможные пары из этого одного списка слева и все перестановки справа и использует для них оператор "Z %%", который является стандартной операцией "zip" с использованием оператора делимости %%.max
Оператор дает наибольший элемент списка (в данном случае это список , который имеет наиболееTrue
«S в нем). Затем мы уменьшаем его, используя логический оператор AND, чтобы увидеть, все ли элементы этого «наиболее верного» списка истинны, и это результат. Это почти точная копия того, что написал @nwellnhof, просто используя неясные операторы, чтобы сбрить байты.источник
permutations
, что это явно слишком читабельно;)[&&]
на,min
чтобы сохранить другой байт.XZ%%
{all (@^a,)Z%%@^b.permutations.any}
было возможноБрахилог , 6 байт
Попробуйте онлайн!
Предикат успешно выполняется, если два списка потенциально делимы, и не выполняется, если это не так.
источник
Python 2 , 92 байта
Попробуйте онлайн!
Ваша базовая реализация.
источник
Python 2 , 90 байт
Попробуйте онлайн!
источник
Рубин , 56 байт
Попробуйте онлайн!
Довольно просто, использует тот факт, что
permutation
существует.источник
Скала, 60 байт
Golfed:
Ungolfed:
источник
Джапт ,
1211 байтВыходы
true
илиfalse
.Проверь это
объяснение
Неявный ввод массивов
U
&V
(A
&B
, соответственно)Создать массив всех перестановок
V
.Проверьте, возвращает ли какой-либо из элементов (подмассивов) значение true.
Проверьте, возвращает ли каждый элемент в текущем подмассиве значение true, когда передается через следующую функцию,
X
причем текущий элемент иY
текущий индекс.Получить элемент в
U
индексY
.Проверьте, если это делится на
X
.источник