คำนวณ Divmod ด้านบน


13

งาน

รับจำนวนเต็มบวกสองตัว ( หารe nd และ divis o r) ให้คำนวณq uotient และr emainder
ปกติมันจะคำนวณเป็นe = o*q+rที่และq*o<=e สำหรับความท้าทายนี้ก็ยังคงแต่และ ตัวอย่างและปกติก็จะเป็นตั้งแต่และ ที่นี่จะเป็นที่ไหนและ0<=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
เรียกมันว่าเป็นการแปรปรวนเล็กน้อยของ divmod ปกติ
Neil

เป็นที่ยอมรับได้หรือไม่ที่จะส่งออกrเนื่องจากการปฏิเสธของจริงrสำหรับภาษาที่ใช้ไบต์ที่ไม่ได้ลงนามเพื่อเก็บข้อมูลหรือสมมติว่ามีการล้น ( -11/ 255)
Uriel

@Uriel ใช่ แต่เพิ่มบันทึกเกี่ยวกับคำตอบนี้
Rod

คำตอบ:


8

Python 3 , 39 26 ไบต์

Martin Enderบันทึก 13 ไบต์

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

ลองออนไลน์!

Python 2 , 25 ไบต์

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

ลองออนไลน์!


ฉันคิดว่าคุณสามารถทำได้x%-yเพื่อให้ได้ส่วนที่เหลือ
Martin Ender

ที่จริงแล้วทำไมไม่ไปตลอดทาง ...(-(x//-y),x%-y)
Martin Ender

@MartinEnder Thats ดีจริงๆ
Halvard Hummel

@ Mr.Xcoder รวมอยู่ด้วย
Halvard Hummel

8

เยลลี่ 3 ไบต์

NdN

ลองออนไลน์!

มันทำงานอย่างไร

การละเมิด divmod อีกครั้ง \ o / ดูสิว่าไม่มียูนิโค้ด!

NdN - โปรแกรมเต็มรูปแบบ / ห่วงโซ่ Dyadic | ตัวอย่าง: 7, 20

N - ลบอินพุตแรก | -7
 d - Divmod โดยอันที่สอง | [-1, 13]
  N - ลบล้างอีกครั้ง | [1, -13]


5

Mathematica ขนาด 21 ไบต์

{s=⌈#/#2⌉,#-#2s}&

ลองออนไลน์!


คุณสามารถเพิ่มคำอธิบายได้ไหม
Rod

2
@Rod ⌈#/#2⌉คำนวณเพดานของการแบ่งของพวกเขาและเก็บไว้ในตัวแปรsแล้วลบอาร์กิวเมนต์ 2 * s จากการโต้แย้ง 1
นาย Xcoder

1
@ Mr.Xcoder คุณเร็วมาก!
J42161217

5

05AB1E , 4 ไบต์

(s‰(

ลองออนไลน์!

5 ไบต์

(‰ćÄJ

ลองออนไลน์!

พวกเขาทำงานอย่างไร

ละเมิดโมดูโลของ Python! \ O /

(s ‰ (| โปรแกรมเต็มให้ A และ B เป็นสองอินพุต) ตัวอย่าง: 100, 13

(| คำนวณ -. | -100
 s | สลับ (กลับสแต็กในกรณีนี้) | 13, -100
  ‰ | Divmod | [-8, 4]
   (| Negative (คูณแต่ละตัวด้วย -1 โดยพื้นฐาน) | [8, -4]

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

(‰ćÄJ | โปรแกรมเต็มใช้อินพุตในลำดับย้อนกลับ

(| เชิงลบกด -
 ‰ | Divmod
  ć | ดันหัวสกัด Divmod (ทำสแต็ค [ความฉลาด, [ส่วนที่เหลือ]]
   Ä | ค่าสัมบูรณ์ (ทำงานกับความฉลาด)
    J | เข้าร่วมสแต็ค

อ่าใช่ลืมไปว่า divmod ทำงานร่วมกับตัวเลขติดลบ :)
Emigna

และนั่นคือฟังก์ชั่นใหม่ของJใช่ไหม? ไม่เคยเห็นมาก่อน อาจเป็นประโยชน์อย่างแน่นอน
Emigna

@Emigna มันถูกอธิบายว่าเข้าร่วม กด '' .join (a) ถ้า a คือ list; อื่นผลักดัน '' .join (สแต็ค) ฉันคิดว่ามันเป็นฟังก์ชั่นใหม่แม้ว่าฉันจะไม่เคยใช้มาJก่อน: P
Mr. Xcoder

มันใหม่แน่นอน พยายามในรุ่นท้องถิ่นของฉันตั้งแต่เดือนสิงหาคมและ5)6มอบ['5']6:)
Emigna

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 ที่เขียนใหม่ใน J

มันทำงานอย่างไร:

a=.>.@% ค้นหาเพดานของการหารของอาร์กิวเมนต์ซ้ายและขวาและเก็บไว้ในตัวแปร a

,~ ตัดแบ่งเป็น (กลับด้าน)

([-]*a) ลบอาร์กิวเมนต์ * right ออกจากอาร์กิวเมนต์ซ้าย

ลองออนไลน์!



2

Common Lisp ขนาด 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 ฟังดูเหมือนแผน ;)
Arnauld


1

4 , 55 50 ไบต์

3.711712114001231311141130013513213131211513115154

ลองออนไลน์!

แสดงให้เห็นถึงการแจ้งเตือนโดยมันปฏิเสธ ( 10แทน-10) เนื่องจากภาษาใช้ byte input และ output ถือว่าถือว่าถูกต้องโดยความคิดเห็น OP









0

TXR: 8 ไบต์

ฟังก์ชั่นในceil-remตัว เช่นอัตราผลตอบแทน(ceil-rem 20 7)(7 -1)



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.