เศษส่วนทศนิยมกอล์ฟ


15

เป้าหมายของคุณคือการเขียนโค้ดบางส่วนที่จะส่งออกลำดับทศนิยมที่ไม่ซ้ำกันสั้นที่สุดสำหรับส่วนที่ป้อน ไม่มีเศษส่วนสองตัวที่มีตัวส่วนเดียวกันอาจมีผลลัพธ์แบบเดียวกันแม้ว่าเศษส่วนที่มีตัวส่วนที่แตกต่างกันจะมีค่าตัวแทนเดียวกัน

ใช้จำนวนเต็ม 2เป็นอินพุตอันแรกคือตัวเศษที่สองคือตัวส่วน

เช่น:

n  d   output
-----  ------
0 13:  0.00
1 13:  0.07
2 13:  0.1
3 13:  0.2
4 13:  0.30
5 13:  0.38

เป็นต้น

3/13เป็นเศษส่วนเดียวที่มีตัวหารของ 13 ที่ขึ้นต้นด้วย0.2ดังนั้นจึงไม่จำเป็นต้องใช้ตัวเลขเพิ่มเติม 4/13และ5/13ทั้งคู่เริ่มต้นด้วย0.3ดังนั้นต้องมีตัวเลขอื่นเพื่อแยกความแตกต่างระหว่างพวกเขา

คุณสามารถส่งออกตัวเลขที่มากกว่า -1 และน้อยกว่า 1 ทั้งที่มีหรือไม่มีศูนย์ก่อนจุดทศนิยมได้ตราบใดที่ผลลัพธ์นั้นสอดคล้องกันเช่น0.5และ.5เป็นตัวเลขเดียวกันและทั้งคู่นั้นถูกต้อง ไม่อนุญาตเลขศูนย์นำหน้าอื่น ๆ ต้องแสดงศูนย์ต่อท้ายหากจำเป็นต้องแยกความแตกต่างของเอาต์พุตจากค่าอื่น

คุณไม่สามารถปัดตัวเลขใด ๆ ให้ห่างจากศูนย์ได้ พวกเขาจะต้องถูกตัดทอน ต้องไม่มีช่องว่างนำหน้าหรือต่อท้าย อาจมีทางเลือกขึ้นบรรทัดใหม่ขึ้นบรรทัดเดียว

ค่าการทดสอบเพิ่มเติม:

   n    d   output
----------  ------
   0    1:   0 (this 0 may not be removed because there's no decimal point)
   5    1:   5
   0    3:   0.0 (or .0)
   4    3:   1.3
   5    3:   1.6
  10    8:   1.2
  11    8:   1.3
  12    8:   1.5
-496  -38:  13.05
 458  -73:  -6.27
  70  106:   0.660 (or .660)
 255  123:   2.07
 256 -123:  -2.081
-257 -123:   2.089
-258  123:  -2.09
 258 -152:  -1.697
-259  152:  -1.70
 260  152:   1.710
 272  195:   1.39
 380  247:   1.538
 455 -455:  -1.000
 -44  891:  -0.049 (or -.049)
 123 1234:   0.099 (or .099)

ในแต่ละกรณีผลลัพธ์และตัวหารนั้นเพียงพอที่จะคำนวณหาตัวเศษ

คำตอบ:


1

Perl, 77 ไบต์

#!perl -p
$%++while/ /<grep{!index$_/$',$\=$`/$'.($`%$'?0:n).0 x$%&'?'x$%}$`-2..$`+2}{

นับ Shebang เป็นหนึ่งนำเข้าจาก stdin

ตัวอย่างการใช้งาน

$ echo 0 3 | perl golf-decimals.pl
0.0

$ echo 4 3 | perl golf-decimals.pl
1.3

$ echo 11 8 | perl golf-decimals.pl
1.3

$ echo -496 -38 | perl golf-decimals.pl
13.05

$ echo 458 -73 | perl golf-decimals.pl
-6.27

$ echo -44 891 | perl golf-decimals.pl
-0.049


1

JavaScript (ES7), 118 93 90 ไบต์

f=(a,b,i=0)=>(v=(p=n=>((n/b*10**i|0)/10**i).toFixed(i))(a))==p(a+1)|v==p(a-1)?f(a,b,i+1):v

ฉันบันทึก 25 ไบต์ขอบคุณ @Neil
บันทึกเพิ่มเติม 3 ไบต์โดยใช้การสอบถามซ้ำ


2
คุณมักจะผ่าน/bและiเพื่อpให้คุณอาจรหัสพวกเขาภายในpตัวเองและเพียงแค่ใช้พารามิเตอร์เดียว คำตอบก็แค่nคุณไม่ต้องคำนวณอีกแล้ว ฉันมีรุ่น recursive ES6 อย่างอิสระตามนี้ที่ 86 ไบต์เท่านั้น ...
Neil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.