Phân số thập phân được đánh gôn


15

Mục tiêu của bạn là viết một số mã sẽ xuất ra chuỗi thập phân duy nhất ngắn nhất cho phân số đầu vào. Không có hai phân số có cùng mẫu số có thể có cùng một đầu ra, mặc dù các phân số có mẫu số khác nhau có cùng một đại diện.

Lấy 2 số nguyên làm đầu vào, đầu tiên là tử số, thứ hai là mẫu số.

Ví dụ:

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

Vân vân.

3/13là phân số duy nhất có mẫu số là 13 bắt đầu bằng 0.2, do đó không cần thêm chữ số nào. 4/135/13cả hai đều bắt đầu bằng 0.3, vì vậy một chữ số khác được yêu cầu để phân biệt giữa chúng.

Bạn có thể xuất các số lớn hơn -1 và nhỏ hơn 1 bằng hoặc không có số 0 trước dấu thập phân, miễn là đầu ra là nhất quán, nghĩa là 0.5.5là cùng một số và đều hợp lệ. Không có số không hàng đầu khác được cho phép. Các số 0 triling phải được hiển thị nếu cần thiết để phân biệt đầu ra với giá trị khác.

Bạn không thể làm tròn bất kỳ số nào từ 0; chúng phải được cắt ngắn. Không được có không gian hàng đầu hoặc dấu. Có thể tùy chọn có một dòng mới duy nhất.

Thêm giá trị thử nghiệm:

   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)

Trong mỗi trường hợp, đầu ra và mẫu số là đủ để tìm ra tử số duy nhất.

Câu trả lời:


1

Perl, 77 byte

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

Đếm shebang là một, đầu vào được lấy từ stdin.

Sử dụng mẫu

$ 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

Bình thường, 37 byte

AQJ+`cGHK*20\0<Jf!}<JTm<+`dKTcRH,tGhG

Một chương trình lấy đầu vào trong biểu mẫu numerator,denominatorvà in kết quả.

Bộ kiểm tra

[Giải thích đến sau]


1

JavaScript (ES7), 118 93 90 byte

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

Tôi đã lưu 25 byte, nhờ @Neil.
Đã lưu thêm 3 byte bằng cách sử dụng đệ quy.


2
Bạn luôn luôn vượt qua /biđể pbạn cũng có thể mã hóa chúng bên trong pchính nó và chỉ lấy một tham số duy nhất. Ngoài ra, câu trả lời chỉ là nđể bạn không phải tính toán lại. Tôi có một phiên bản ES6 đệ quy một cách lỏng lẻo dựa trên điều này chỉ với 86 byte ...
Neil
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.