Fractions décimales golfées


15

Votre objectif est d'écrire du code qui produira la séquence décimale unique la plus courte pour la fraction d'entrée. Deux fractions avec le même dénominateur peuvent ne pas avoir la même sortie, bien qu'il soit possible que des fractions avec des dénominateurs différents aient la même représentation.

Prenez 2 entiers en entrée, le premier est le numérateur, le second est le dénominateur.

Par exemple:

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

etc.

3/13est la seule fraction avec un dénominateur de 13 qui commence par 0.2, donc aucun autre chiffre n'est requis. 4/13et les 5/13deux commencent par 0.3, donc un autre chiffre est nécessaire pour les distinguer.

Vous pouvez sortir des nombres supérieurs à -1 et inférieurs à 1 avec ou sans zéro avant le séparateur décimal, tant que la sortie est cohérente, c'est 0.5-à- dire et .5sont le même nombre et sont tous deux valides. Aucun autre zéro à gauche n'est autorisé. Les zéros de fin doivent être affichés s'ils sont nécessaires pour distinguer la sortie d'une autre valeur.

Vous ne pouvez arrondir aucun nombre à partir de zéro; ils doivent être tronqués. Il ne doit pas y avoir d'espaces de début ou de fin. Il peut éventuellement y avoir une seule nouvelle ligne de fin.

Plus de valeurs de test:

   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)

Dans chaque cas, la sortie et le dénominateur sont suffisants pour travailler de manière unique le numérateur.

Réponses:


1

Perl, 77 octets

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

En comptant le shebang comme un, l'entrée provient de stdin.

Exemple d'utilisation

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

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

Un programme qui prend la saisie dans le formulaire numerator,denominatoret imprime le résultat.

Suite de tests

[Explication à venir plus tard]


1

JavaScript (ES7), 118 93 90 octets

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

J'ai économisé 25 octets, grâce à @Neil.
3 octets supplémentaires enregistrés à l'aide de la récursivité.


2
Vous passez toujours /bet ià painsi vous pourriez aussi bien les code à l' intérieur plui - même et prendre un seul paramètre. De plus, la réponse est juste npour que vous n'ayez pas à le calculer à nouveau. J'ai une version récursive ES6 basée sur cela à 86 octets seulement ...
Neil
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.