задача
Указанные два положительных целых чисел (DIVID е й и Divis O г), вычислить Q uotient и г emainder.
Обычно это будет рассчитываться как e = o*q+r
где q*o<=e
и 0<=r<o
.
Для этого вызова это еще, e = o*q+r
но q*o>=e
и -o<r<=0
.
Например, e=20
и o=3
, как правило, это будет 20/3 -> 20=3*6+2
, так как 18<=20
и0<=2<3
. Здесь будет 20/3 -> 20=3*7-1
где 21>=20
и-3<-1<=0
Тестовые случаи
Input -> Output
20, 3 -> 7, -1
10, 5 -> 2, 0
7, 20 -> 1, -13
100, 13 -> 8, -4
Вам не нужно справляться o=0
.
r
как отрицание реальногоr
для языков, которые используют байты без знака для хранения данных или предполагают переполнение? (-1
→1
/255
)Ответы:
Python 3 ,
3926 байтМартин Эндер спас 13 байтов
Попробуйте онлайн!
Python 2 , 25 байт
Попробуйте онлайн!
источник
x%-y
чтобы получить остаток.(-(x//-y),x%-y)
Желе , 3 байта
Попробуйте онлайн!
Как это устроено
Злоупотребление divmod снова \ o /. Смотри не юникод!
источник
Haskell , 25 байт
Попробуйте онлайн!
источник
Mathematica, 21 байт
Попробуйте онлайн!
источник
⌈#/#2⌉
вычисляет потолок их деления и сохраняет его в переменнойs
, а затем вычитает аргумент 2 * s из аргумента 1.05AB1E , 4 байта
Попробуйте онлайн!
5 байт
Попробуйте онлайн!
Как они работают
Злоупотребления Python по модулю! \ О /
источник
J
не так ли? Никогда раньше такого не видел. Определенно может быть полезным.J
: P5)6
выдает['5']6
:)Алиса , 15 байт
Попробуйте онлайн!
объяснение
Целочисленное деление Руби и модуль (по которому реализованы Алисы) определены так, что использование отрицательного делителя уже делает то, что мы хотим. Если мы отрицаем делитель, мы автоматически получим правильное значение по модулю и получим минус необходимое нам соотношение. Так что самый простой способ решить эту проблему - отрицать несколько чисел:
источник
Пари / ГП , 18 байт
Попробуйте онлайн!
источник
Юлия , 18 байт
Попробуйте онлайн!
.-
является поэлементным отрицанием иfldmod
возвращает кортеж, составленный из результатов промежуточного деления и соответствующего остатка.источник
MATL ,
54 байтаПопробуйте онлайн!
-1 байт благодаря Луису Мендо
источник
J , 16 байт
По сути, это решение Mathematica от Jenny_mathy, переписанное в J.
Как это устроено:
a=.>.@%
Находит потолок деления левого и правого аргументов и сохраняет его в переменную a,~
соединены (обращены)([-]*a)
вычитает * правый аргумент из левого аргументаПопробуйте онлайн!
источник
R ,
3129 байт-2 байта благодаря Джузеппе
Попробуйте онлайн!
источник
-c(e%/%-o,-e%%o)
Common Lisp, 7 байт
Встроенная функция
ceiling
возвращает два значения: верхний коэффициент и остаток для сопоставления:источник
JavaScript (ES6),
3731292725 байтСохранено 2 байта благодаря @Rod
Сохранено 2 байта благодаря @ETHproductions
Принимает ввод в синтаксисе карри. Возвращает [q, r] .
Контрольные примеры
Показать фрагмент кода
источник
q=(a+b-1)/b+|0
вместо этогоq=a/b+.9|0
Perl 5 , 30 + 1 (
-p
) = 31 байтПопробуйте онлайн!
источник
4 ,
5550 байтПопробуйте онлайн!
Представляет напоминание в виде отрицания (
10
вместо-10
), поскольку язык использует байтовый ввод и вывод, который считается действительным в комментарии OP.источник
Commentator, 90 bytes
Try it online!
Outputs the remainder, then the quotient, newline separated.
источник
C (gcc), 43 bytes
Usage
Try it online!
источник
Java (OpenJDK 8), 30 bytes
Try it online!
источник
Add++, 35 bytes
Try it online!
источник
C (gcc) 41 bytes
This may be cheating, using two functions and it may fail other tests?
Try it online
источник
Swift, 47 bytes
источник
SNOBOL4 (CSNOBOL4),
124123105 bytesTry it online!
Takes input as
E
, thenO
, separated by a newline and prints outQ
, thenR
, separated by a newline.источник
TXR: 8 bytes
Built-in function
ceil-rem
. E.g.(ceil-rem 20 7)
yields(7 -1)
.источник
Clean, 42 bytes
Try it online!
источник
Deorst, 23 bytes
Try it online!
How it works
источник