Учитывая список математических выражений, которые все верны и состоят из вычислений по модулю остатка с двумя числами и результатом, ваша задача - получить первые n
числа, которые верны для всех операторов в списке.
Например:
[m % 3 = 0, m % 4 = 1, m % 5 = 3]
где% - оператор по модулю.
Для n
= 3 первые 3 числа (считая от 0), которые соответствуют последовательности 33, 93, 153
, таким образом, ваш результат будет таким (отформатируйте до вас).
Правила / IO
- Вы берете положительное число
n
и список истин. Конечно, все, что вам нужно, - это только RHS операции по модулю и результат. n
и числа в списке истин всегда будут в диапазоне 1 -> 2 ^ 31-1 , как и результаты.- Вы берете ввод в любой удобной форме и вывод в любой удобной форме. Например, входной сигнал:
3 [3 0, 4 1, 5 3]
и выход:33 93 153
. - Гарантируется, что решение математически возможно.
- Источник ввода может быть из файла, параметров функции, стандартного ввода и т. Д. То же самое относится и к выводу.
- Нет лазеек.
- Это код-гольф, поэтому выигрывает самое низкое число байтов.
Testcases
# Input in the form <n>, <(d r), (d2 r2), ...>
# where <d> = RHS of the modulo expression and <r> the result of the expression. Output in the next line.
5, (3 2), (4 1), (5 3)
53 113 173 233 293
3, (8, 0), (13, 3), (14, 8)
120 848 1576
Ссылочная реализация в псевдокоде
n = (an integer from stdin)
truths = (value pairs from stdin)
counter = 0
while n != 0 {
if matches_criterias(counter, truths) {
print counter
n -= 1
}
counter += 1
}
0
ли действительный результат?Ответы:
Желе , 7 байт
Это полная программа. Аргументы - это делители, целевые модули и количество решений в указанном порядке.
Попробуйте онлайн!
Как это устроено
источник
Perl 6 , 33 байта
Попытайся
Вход
( number-of-values, list-of-divisors, list-of-remainders )
Expanded:
источник
JavaScript (ES6),
7168 байтПростая рекурсивная функция. Используйте, каррируя в массиве first и
n
second, примерно так:источник
JavaScript (ES6),
747069 байтПринимает входной сигнал в виде целого числа
n
и массивa
из[modulo, remainder]
массивов с выделкой синтаксиса(n)(a)
.Контрольные примеры
Показать фрагмент кода
источник
Haskell, 47 байтов
Пример использования:
3 # [(8,0),(13,3),(14,8)]
->[120,848,1576]
.источник
Python, 67 байт
источник
range(2**31)
. Также очень приятно. Я придумал этот ответ самостоятельно.JavaScript (ES6),
7270 байтВычисляется сначала по массиву условий и второму числу результатов. Изменить: 2 байта сохранены, не обрабатывая нулевой регистр.
источник
Mathematica, 42 байта
Безымянная функция, возвращающая список положительных целых чисел и получающая три входа: список модулей, список остатков и число
n
возвращаемых целых чисел. Например, второй контрольный пример вызываетсяи возвращается
{120, 848, 1576}
.Встроенный
#2~ChineseRemainder~#
дает наименьшее неотрицательное решение; чтобы получить все желаемые решения, мы добавляем это числоRange[0,#3-1]LCM@@#
, которое является первымn
неотрицательным кратным числа наименьшего общего кратного всех модулей.Насколько я знаю, Mathematica не имеет лениво вычисляемых бесконечных списков, поэтому эта реализация оказалась короче всего, что я обнаружил, когда тестировал неотрицательные целые числа один за другим, даже с длиной имени функции
ChineseRemainder
, и даже при том, что подобный тестMod[k,{8,13,14}]=={0,3,8}
работает отлично Что ж.источник
PHP, 97 байт
самый длинный ответ до сих пор. Но я рад, что смог получить его ниже 100.
принимает входные данные из отдельных аргументов командной строки,
печатает совпадения, разделенные и завершенные подчеркиванием.
Петля никогда не ломается; едва подходит для онлайн-тестеров.
Беги как
php -r 'code' <n> <modulo1> <result1> <modulo2> <result2> ...
.сломать
Примечания
$argc==count($argv)
, Для трех пар есть 8 аргументов: имя файла$argv[0]
,n
=$argv[1]
и парыmodulo
/result
над этим.$v=2
увеличение в 3 раза дает5
>$argc/2
.Добавьте один байт для чистого выхода: замените
&&$a[1]-->0?print$k._
на?$a[1]--?print$k._:die
.источник
Pyth -
1413 байтПопробуйте это онлайн здесь .
источник
SmileBASIC, 102 байта
Это первый раз, когда я использовал
ON
в SB. Причина, по которой я использовал его здесь вместо того,IF F GOTO@L
заключалась в том, что я мог поставить?T
после него одну и ту же строку, сэкономив 1 байт.источник
Python, 59 байт
m
это список выражений в виде строки, как["i % 4 == 1", ...]
Попробуйте онлайн (с более коротким диапазоном, чтобы он действительно закончился)
источник
PHP, 91 байт
Взять список как ассоциативный массив
Попробуйте онлайн!
источник