Golflu ondalık kesirler


15

Amacınız, girdi kesiri için en kısa benzersiz ondalık dizilimini çıkaran bir kod yazmaktır. Aynı paydaya sahip iki fraksiyon aynı çıktıya sahip olamaz, ancak farklı paydalara sahip fraksiyonların aynı temsile sahip olması mümkündür.

Giriş olarak 2 tamsayı alın , ilki pay, ikincisi payda.

Örneğin:

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

vb.

3/13, 13 paydası ile başlayan tek kesirdir 0.2, bu nedenle başka basamak gerekmez. 4/13ve 5/13her ikisi de ile başlar 0.3, bu yüzden aralarında ayrım yapmak için başka bir basamak gerekir.

Çıktı tutarlı olduğu sürece ondalık noktadan önce sıfır ile veya sıfır olmadan -1'den büyük ve 1'den küçük sayılar çıktısı alabilirsiniz, yani 0.5ve.5 aynı sayı olduğu ve her ikisi de geçerli . Başlıca sıfırlara izin verilmez. Çıktıyı başka bir değerden ayırt etmek gerekirse, sondaki sıfırlar gösterilmelidir.

Sıfırdan uzağa herhangi bir sayı yuvarlayamazsınız; kesilmeleri gerekir. Ön veya arka boşluk olmamalıdır. İsteğe bağlı olarak tek bir son satır olabilir.

Daha fazla test değeri:

   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)

Her durumda, çıkış ve payda, payın benzersiz bir şekilde çalışması için yeterlidir.

Yanıtlar:


1

Perl, 77 bayt

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

Mesele bir olarak sayılır, girdi stdin'den alınır.

Örnek Kullanımı

$ 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 bayt

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

Formda girdi alan bir program numerator,denominator ve sonucu basan .

Test odası

[Açıklama daha sonra geliyor]


1

JavaScript (ES7), 118 93 90 bayt

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

@Neil sayesinde 25 bayt kazandım.
Özyineleme kullanarak ek 3 bayt kaydedildi.


2
Her zaman geçmesine /bve ikarşı polabilir, siz de öyle iç kod bunları pkendisi ve sadece tek bir parametre alır. Ayrıca cevap sadece ntekrar hesaplamak zorunda değilsiniz. Ben sadece 86 bayt buna dayalı gevşek özyinelemeli bir ES6 sürümü var ...
Neil
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.