Задание:
Выведите значение для x
, где a mod x = b
для двух заданных значений a,b
.
предположение
a
иb
всегда будут положительными целыми числами- Там не всегда будет решение для
x
- Если существует несколько решений, выведите хотя бы одно из них.
- Если решений нет, ничего не выводите или указывайте, что решений не существует.
- Разрешены встроенные модули (не так весело, как другие математические подходы)
- Выходы всегда целые
Примеры
A, B >> POSSIBLE OUTPUTS
5, 2 >> 3
9, 4 >> 5
8, 2 >> 3, 6
6, 6 >> 7, (ANY NUMBER > 6)
8, 7 >> NO SOLUTION
2, 4 >> NO SOLUTION
8, 5 >> NO SOLUTION
10,1 >> 3, 9
Это код-гольф , поэтому побеждают младшие байты.
code-golf
math
number-theory
code-golf
number
integer
code-golf
string
code-golf
music
code-golf
arithmetic
array-manipulation
decision-problem
code-golf
math
rational-numbers
code-golf
code-golf
graphical-output
hardware
code-golf
math
number
code-golf
string
parsing
natural-language
code-golf
tips
brain-flak
code-golf
graph-theory
code-golf
number
polynomials
king-of-the-hill
code-golf
ascii-art
kolmogorov-complexity
animation
king-of-the-hill
code-golf
tips
code-golf
ascii-art
code-golf
string
array-manipulation
data-structures
code-golf
math
number
code-golf
string
base-conversion
binary
code-golf
decision-problem
graph-theory
code-golf
math
polynomials
code-golf
kolmogorov-complexity
physics
code-golf
sequence
number-theory
code-golf
math
integer-partitions
code-golf
array-manipulation
random
permutations
code-golf
string
decision-problem
Гравитон
источник
источник
Ответы:
JavaScript ,
2827262423 байтаПопробуйте онлайн!
false
указывает на отсутствие решения.-1 спасибо @Arnauld
источник
f=...
, затем вызватьf(8)(3)
? Это кажется немного обманным? Нормальный способ вызова функции будет такимf(8,3)
, что сделает ваше определение функции длиннее?(8)(3)
, но есть консенсус в отношении PPCG, что это разрешено . Вы не должны давать ему имя, хотя.MATL , 6 байтов
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
Рассмотрим входы
8
, в2
качестве примера.источник
Python 2 ,
4034 байта-6 байт благодаря Bubbler
Попробуйте онлайн!
источник
lambda a,b:[(a==b)*-~a,a-b][a>b*2]
Желе , 5 байт
Возвращает минимальное действительное значение x или 0 , если его нет.
Попробуйте онлайн!
источник
Groovy, 48 байт (с использованием встроенного):
Eval.me(...+"g")
- Прикрепляет «g» к входу, делая его BigInteger.modInverse(...)
- Выполняет обратную операцию по модулю.Java 8, 70 байт
источник
R ,
3328 байтПопробуйте онлайн!
-4 байта благодаря Ярко Дуббелдаму.
-1 байт благодаря Джузеппе.
Возвращает,
NA
если нет решения. В TIO не установлена библиотека pryr, поэтомуfunction(a,b)
вместо этого используется код по этой ссылке .источник
pryr::f(which(a%%1:(a+1)==b))
на 4 байта короче.match(b,a%%1:(a+1))
, который возвращаетNA
пропущенное значение.Желе ,
1110 байтПолная программа , содержащая два положительных целых числа
a
иb
распечатывающая список целочисленных решений междуmin(a,b)+1
иmax(a,b)+1
включительно.Попробуйте онлайн!
источник
Mathematica 36 байт
Входные данные:
Выход:
источник
a_ ±b_
. Но в любом случаеCases
вместоSelect
неназванной функции использовать ее короче :Cases[Range[9#],x_/;#~Mod~x==#2]&
Haskell , 33 байта
Сбой
code.hs: out of memory (requested ??? bytes)
при отсутствии решения (тайм-аут на TIO до этого):Попробуйте онлайн!
Спасибо Орджану Йохансену за обнаружение ошибки!
источник
b
делитсяa
.C # (моно C # компилятор) ,
57 5626 байтПорт Питона ответ Python. Спасибо WW за -1 байт.
Огромное спасибо Кевину Круйссену за -30 байтов.
Попробуйте онлайн!
источник
return
.i=>{/*code here*/}
). Однако в этом случае, поскольку у вас есть 2 входа, это может быть лямбда-функция с каррированием для сохранения дополнительного байта (a=>b=>{/*code here*/}
вместо(a,b)=>{/*code here*/}
). Кроме того, вы можете удалить круглые скобки вокруг ваших if-проверок. В общей сложности, без изменения какой-либо вашей функциональности, она становитсяa=>b=>a-b>b?a-b:a==b?a+1:0
26 байтовPyth, 16 байт
Попробуйте онлайн!
Все тесты
Принимает ввод как
[a, b]
, ошибки, если решение не найдено. Будет пересмотрен, если ошибки не допускаются.источник
APL (Dyalog Unicode) , 19 байт
Попробуйте онлайн!
Гольф в прогрессе ...
источник
Mathematica, 28 байт
источник
PHP> = 7.1, 51 байт
Онлайн версия
источник
Аксиома,
147128 байтовраскрутить и проверить
Это найдет все решение, даже решение с бесконечным множеством ...
источник
Пип , 9 байт
Принимает два числа в качестве аргументов командной строки. Выводит наименьшее решение или ноль, если решения не существует. Попробуйте онлайн!
объяснение
Например, с вводом
8
и2
:Основанный на 0 индекс первого вхождения
2
в этом списке -3
это наше решение.источник
J , 14 байт
Попробуйте онлайн!
Перевод решения Rod's Python 2 .
Как это устроено
Редкие случаи, когда J-код может быть напрямую переведен на Python.
источник
Japt , 13 байт
Попробуйте онлайн!
Перевод решения eush77's JS .
Код только
(U-=V)?U>V&&U:-~V
когда передается в JS, гдеU
иV
являются двумя входными значениями.источник
Рубин , 31 байт
Попробуйте онлайн!
источник
Japt , 7 байт
(В конце концов) Выводы,
undefined
если нет решения.Попробуй здесь
источник
Perl 6 , 23 байта
Попробуйте онлайн!
Блок анонимного кода, который возвращает список возможных значений от
2
доa+1
источник
ORK , 566 байт
Попробуйте онлайн!
О bjects R K оол. К счастью, однако, мне не нужно было использовать какие-либо (кроме встроенных) для этой задачи.
источник
F #, 40 байт
Попробуйте онлайн!
Довольно просто. Сбрасывает,
System.Collections.Generic.KeyNotFoundException
если не может быть найдено решение.Вы также можете изменить его на
Seq.tryFind
, который будет возвращатьint option
, с,None
если решение не может быть найдено.источник
05AB1E , 7 байтов
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Java 8, 26 байт
Порт @Epicness 'C # ответа , после того, как я играл в гольф немного больше.
Попробуйте онлайн.
источник
> <> , 21 байт
Тот же трюк, что и в большинстве опубликованных решений. Сначала мы подготавливаем все необходимые значения в стеке, а затем проверяем сравнения.
Попробуйте онлайн!
источник
Whispers v2 , 128 байт
Попробуйте онлайн!
Возвращает набор всех возможных решений и пустой набор (т.е.∅ ) когда решения не существует.
Как это устроено
Неудивительно, что он работает почти так же, как и большинство других ответов: он генерирует список чисел и проверяет каждое из них на наличие обратного модуля с аргументом.
Если вы знакомы с тем, как работает структура программы Whispers, смело переходите к горизонтальной линии. Если нет: по сути, Whispers работает над построчной системой отсчета, начиная с последней строки. Каждая строка классифицируется как один из двух вариантов. Либо это линия nilad , либо это строка оператора .
Строки Nilad начинаются с{ 0 } ,
>
, например,> Input
и> {0}
и возвращают точное значение, представленное в этой строке, т.е.> {0}
возвращает набор> Input
возвращает следующую строку STDIN, оценивается, если это возможно.Строки оператора начинаются сn → n2 ), поэтому 12 вместо этого он возвращает квадрат линии 1 , которая в данном случае является первым входом.
>>
, например,>> 1²
и>> (3]
и означают запуск оператора для одного или нескольких значений. Здесь используемые числа не ссылаются на эти явные числа, вместо этого они ссылаются на значение в этой строке. Например,²
есть квадратная команда (>> 1²
не возвращает значениеОбычно операторские строки работают только с использованием чисел в качестве ссылок, но вы, возможно, заметили строки
>> L=2
и>> L⋅R
. Эти два значения,L
иR
, используются в сочетании сEach
утверждениями.Each
операторы работают, принимая два или три аргумента, опять же как числовые ссылки. Первый аргумент (например,5
) является ссылкой на строку оператора, в которой используется функция, а остальные аргументы являются массивами. Затем мы перебираем функцию по массиву, гдеL
иR
в функции представляют текущий элемент (ы) в массивах, которые перебираются. В качестве примера:ПозволятьA = [ 1 , 2 , 3 , 4 ] , B = [ 4 , 3 , 2 , 1 ] и е( х , у) = х + у , Предполагая, что мы запускаем следующий код:
Затем мы получаем демонстрацию того, какС= [ ( 1 , 4 ) , ( 2 , 3 ) , ( 3 , 2 ) , ( 4 , 1 ) ] затем карта е( х ,у) по каждой паре, формируя наш окончательный массив Д = [ ф( 1 , 4 ) , ф( 2 , 3 ) , ф( 3 , 2 ) , ф( 4 , 1 ) ] = [ 5 , 5 , 5 , 5 ]
Each
работают заявления. Во-первых, при работе с двумя массивами, мы застегиваем ихПопробуйте онлайн!
Как работает этот код
Работая нелогично с тем, как работает Whispers, мы начнем с первых двух строк:
Это собирает наши два входа, скажем,Икс и Y и сохраняет их в строках 1 и 2 соответственно. Затем мы хранимИкс2 в строке 3 и создать диапазонA : = [ 1 . , , Икс2] по строке 4 . Далее переходим к разделу
Первое , что выполняется здесь строка 7 ,B : = [ я%Икс|i ∈ A ] , где a%б определяется как модуль изa и б ,
>> Each 5 4
, который перебирает линии 5 по линии 4 . Это дает массивЗатем мы выполняем линию 8 ,В , получая массив С: = [ ( я%х ) = у|i ∈ A ] ,
>> Each 6 7
, которая итерирует линия 6 за кадромДля входовх = 5 , у= 2 , we have = [ 1 , 2 , 3 , . , , , 23 , 24 , 25 ] , В = [ 0 , 1 , 2 , 1 , 0 , 5 , 5 , . , , , 5 , 5 ] и С= [ 0 , 0 , 1 , 0 , 0 , . , , , 0 , 0 ]
Затем мы спрыгиваем
which is our example of a dyadicA and C . We multiply each element in A with it's corresponding element in C , which yields an array, E , where each element works from the following relationship:
Each
statement. Here, our function is line 9 i.e>> L⋅R
and our two arrays areWe then end up with an array consisting of0 s and the inverse moduli of x and y . In order to remove the 0 s, мы конвертируем этот массив в набор ({ 0} , уступая, затем выводя, наш конечный результат.
>> {10}
), then take the set difference between this set andисточник
C #, 53 байта (83 с заголовком функции)
Попробуйте онлайн
Сначала попробуйте на Codegolf. Вероятно, не лучший язык для использования и не самое эффективное кодирование.
источник