Десяткові дроби з гольфу


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}{

Підрахувавши шебанг як один, вхід береться від 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

Pyth, 37 байт

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

Програма, яка приймає дані у формі numerator,denominatorта друкує результат.

Тестовий набір

[Пояснення, що надходить пізніше]


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так, що вам більше не доведеться її обчислювати. У мене рекурсивна версія ES6 вільно базується на цьому лише у 86 байтах ...
Ніл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.