Обчисліть верхню Divmod


13

Завдання

Зазначені два позитивних цілих чисел (DIVID е й і Divis O г), обчислити Q uotient і г emainder.
Зазвичай це було б обчислено як і e = o*q+rде . Для цього виклик все-таки, але і . Наприклад, і , як правило, це було б , оскільки і . Тут буде де і деq*o<=e0<=r<o
e = o*q+rq*o>=e-o<r<=0
e=20o=320/3 -> 20=3*6+218<=200<=2<320/3 -> 20=3*7-121>=20-3<-1<=0

Випробування

Input -> Output
20, 3 -> 7, -1
10, 5 -> 2, 0
7, 20 -> 1, -13
100, 13 -> 8, -4

Вам не потрібно впоратися o=0.


3
Називав це тим, що є тривіальним варіантом регулярного дивомода.
Ніл

Чи прийнятно виводити rяк заперечення реального rдля мов, які використовують неподписані байти для зберігання даних або припускають переповнення? ( -11/ 255)
Уріель

@Uriel так, але додайте до цього записку у відповідь
Rod

Відповіді:


8

Python 3 , 39 26 байт

Мартін Ендер врятував 13 байт

lambda x,y:(-(x//-y),x%-y)

Спробуйте в Інтернеті!

Python 2 , 25 байт

lambda x,y:(-(x/-y),x%-y)

Спробуйте в Інтернеті!


Я думаю, ви можете просто зробити, x%-yщоб отримати залишок.
Мартін Ендер

Власне, чому б не пройти весь шлях ...(-(x//-y),x%-y)
Мартін Ендер

@MartinEnder Thats дійсно добре
Halvard Hummel

@ Mr.Xcoder Включено обидва
Халвард Гуммель

8

Желе , 3 байти

NdN

Спробуйте в Інтернеті!

Як це працює

Знову зловживайте divmod \ o /. Подивися, ма 'не єдинод!

NdN - Повна програма / ланцюг Dyadic. | Приклад: 7, 20

N - заперечити перший вхід. | -7
 d - Divmod за другим. | [-1, 13]
  N - знову заперечуйте. | [1, -13]



5

05AB1E , 4 байти

(s‰(

Спробуйте в Інтернеті!

5 байт

(‰ćÄJ

Спробуйте в Інтернеті!

Як вони працюють

Зловживає модулем Пітона! \ o /

(s ‰ (| Повна програма. Нехай A і B - два входи. | Приклад: 100, 13.

(| Обчислити -A. | -100
 s | Swap (в цьому випадку переверніть стек). | 13, -100
  ‰ | Divmod. | [-8, 4]
   (| Від'ємний (помножте кожен на -1, в основному). | [8, -4]

-------------------------------------------------- -

(‰ ćÄJ | Повна програма. Вводиться в зворотному порядку.

(| Негативний. Push -A.
 ‰ | Divmod
  ć | Виштовхнути голову ділмода (зробити стек [коефіцієнт, [залишок]].
   Ä | Абсолютне значення (діє на коефіцієнт).
    J | Приєднуйтесь до стека.

Ага так, забув, що divmod працює з негативними цифрами :)
Emigna

А також, це нова функціональність, Jчи не так? Ніколи цього не бачив. Однозначно може бути корисним.
Емінья

@Emigna Описано як Приєднатися. Натисніть "" .join (a), якщо список є; Інше, штовхати '' .joine (стек) . Я думаю, що це нова функціональність, хоча я ніколи Jраніше не використовував : P
Містер Xcoder

Це, безумовно, нове. Пробував на моїй місцевій версії з серпня і 5)6дає ['5']6:)
Емінья

4

Аліса , 15 байт

/O.
\io/R%e,R:R

Спробуйте в Інтернеті!

Пояснення

Ціле ділення і модуль Рубі (на якому реалізовано Алісу) визначені таким чином, що використання негативного дільника вже на зразок робить те, що ми хочемо. Якщо ми заперечуємо дільник, ми автоматично отримуємо правильний модуль і отримуємо мінус бажаний коефіцієнт. Тож найпростіший спосіб вирішити це, відкинувши купу чисел:

/   Switch to Ordinal mode.
i   Read all input as a string "e o".
.   Duplicate the string.
/   Switch to Cardinal mode.
R   Implicitly convert the top string to the two integer values it
    contains and negate o.
%   Compute e%-o.
e,  Swap the remainder with the other copy of the input string. We can't
    use the usual ~ for swapping because that would convert the string 
    to the two numbers first and we'd swap e%-o in between e and o instead
    of to the bottom of the string.
R   Negate o again.
:   Compute e/-o.
R   Negate the result again.
\   Switch to Ordinal mode.
O   Output -(e/-o) with a trailing linefeed.
o   Output e%-o.

    The code now bounces through the code for a while, not doing much except
    printing a trailing linefeed when hitting O again. Eventually, the IP
    reaches : and attempts a division by zero which terminates the program.




2

J , 16 байт

([-]*a),~a=.>.@%

Це, по суті, рішення математики Jenny_mathy, переписане в Дж.

Як це працює:

a=.>.@% Знаходить стелю поділу аргументів на лівий і правий і зберігає їх у змінну a

,~ приєднаний до (зворотний)

([-]*a) віднімає * правий аргумент з лівого аргументу

Спробуйте в Інтернеті!



2

Лист звичайний, 7 байт

Вбудована функція ceilingповертає два значення: стелю коефіцієнта та решту, які відповідають:

$ clisp -q
[1]> (ceiling 20 7)
3 ;
-1

2

JavaScript (ES6), 37 31 29 27 25 байт

Збережено 2 байти завдяки @Rod
Збережено 2 байти завдяки @ETHproductions

Здійснює введення в синтаксис currying. Повертає [q, r] .

a=>b=>[q=~-a/b+1|0,a-q*b]

Тестові справи


Ви, напевно, можете q=(a+b-1)/b+|0замість цьогоq=a/b+.9|0
Rod

@ETHproductions Звучить як план. ;)
Арнольд


1

4 , 55 50 байт

3.711712114001231311141130013513213131211513115154

Спробуйте в Інтернеті!

Представляє нагадування за допомогою заперечення ( 10замість -10), оскільки мова використовує введення та вихід байтів, що вважається дійсним коментарем ОП.









0

TXR: 8 байт

Вбудована функція ceil-rem. Наприклад, (ceil-rem 20 7)урожайність (7 -1).



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.