Ce que vous devez faire est de créer une fonction / programme qui prend une décimale en entrée et génère le résultat de la prise répétée de l'inverse de la partie fractionnaire du nombre, jusqu'à ce que le nombre devienne un entier.
Plus précisément, le processus est le suivant:
Soit x l'entrée
Si x est un entier, affichez-le.
Sinon: . Revenez à 2.
est la composante fractionnaire de , et est égale à . est le plancher de x, qui est le plus grand entier inférieur à .
Cas de test:
0 = 0
0.1 = 1/10 -> 10
0.2 = 1/5 -> 5
0.3 = 3/10 -> 10/3 -> 1/3 -> 3
0.4 = 2/5 -> 5/2 -> 1/2 -> 2
0.5 = 1/2 -> 2
0.6 = 3/5 -> 5/3 -> 2/3 -> 3/2 -> 1/2 -> 2
0.7 = 7/10 -> 10/7 -> 3/7 -> 7/3 -> 1/3 -> 3
0.8 = 4/5 -> 5/4 -> 1/4 -> 4
0.9 = 9/10 -> 10/9 -> 1/9 -> 9
1 = 1
3.14 = 157/50 -> 7/50 -> 50/7 -> 1/7 -> 7
6.28 = 157/25 -> 7/25 -> 25/7 -> 4/7 -> 7/4 -> 3/4 -> 4/3 -> 1/3 -> 3
Résumé pour 0 à 1 par incréments de 0,1: 0, 10, 5, 3, 2, 2, 2, 3, 4, 9, 1
Il s'agit de code-golf , donc le moins d'octets gagne.
Clarifications:
- "Points bonus" pour aucune erreur d'arrondi
- Devrait fonctionner pour tout nombre rationnel non négatif (en ignorant l'erreur d'arrondi)
- Vous pouvez, mais ne devez pas afficher les étapes suivies
- Vous pouvez prendre l'entrée sous forme décimale, fraction ou paire de nombres, qui peut être dans une chaîne.
Désolé pour tous les problèmes, c'est ma première question sur ce site.
code-golf
math
arithmetic
recursion
rational-numbers
Solomon Ucko
la source
la source
Réponses:
J, 18 octets
En J, l'idiome
u ^: v ^:_
signifie "Continuez à appliquer le verbe tantu
que la conditionv
renvoie vrai.Dans notre cas, la condition de fin est définie par le crochet
~:<.
, ce qui signifie "le plancher du nombre<.
n'est pas égal~:
au nombre lui-même" - nous nous arrêterons donc lorsque le verbe principalu
renvoie un entier.u
dans ce cas est un autre crochet-<.
- le nombre moins son plancher - dont la valeur de retour est introduite dans@
le verbe réciproque%
.Essayez-le en ligne!
la source
_2{(%@-<.) ::]^:a:
.%@|~&1^:(~:<.)^:_
Python 3 , 101 octets
Essayez-le en ligne!
Format: la chaîne doit contenir un point décimal.
la source
.replace(".","")
->.replace(*"._")
enregistrer 1 octetMathematica, 36 octets
Démo
la source
Rationalize
?Rationalize
, Mathematica pense qu'il n'y a pas suffisamment de précision pour générer tous les termes de la fraction continue. Par exemple,ContinuedFraction[0.1]
c'est juste{0}
.Perl 6 , 42 octets
Essayez-le en ligne!
La
nude
méthode renvoie le nu merator et de proposeur d'un nombre rationnel comme une liste à deux éléments. Il est plus court d'obtenir le dénominateur de cette façon que d'appelerdenominator
directement la méthode.la source
Haskell , 47 octets
Cela bat la réponse de Wheat Wizard car
GHC.Real
nous permet de faire correspondre les motifs sur les rationnels en utilisant:%
, ainsi que d'avoir un nom plus courtEssayez-le en ligne!
f
prend unRational
nombre en entrée, bien que ghc leur permette d'être écrit au format décimal, avec une certaine précision.la source
Haskell ,
4034 octetsÉditer:
(Je n'ai pas pu résister à publier ceci après avoir vu les réponses Haskell avec des importations verbeuses - maintenant je vois que d'autres réponses linguistiques utilisent également essentiellement cette méthode.)
!
prend deux arguments entiers (numérateur et dénominateur de la fraction; ils n'ont pas besoin d'être en termes plus petits mais le dénominateur doit être positif) et retourne un entier. Appelez le314!100
.Essayez-le en ligne!
n/d
(en supposantd
positive) estmod n d/d
, donc à moins quemod n d==0
, ne se!
reproduise avec une représentation ded/mod n d
.la source
Python 3 + sympy , 67 octets
Essayez-le en ligne!
Sympy est un package mathématique symbolique pour Python. Parce qu'il est symbolique et non binaire, il n'y a pas d'inexactitudes en virgule flottante.
la source
PHP , 69 octets
Essayez-le en ligne!
PHP , 146 octets
Essayez-le en ligne!
la source
Gelée , 8 octets
Essayez-le en ligne!
Imprécisions à virgule flottante.
la source
M
pour corriger les inexactitudes à virgule flottante: P . C'est Jelly mais avec des mathématiques de précision arbitraires. Ne résout cependant pas la boucle 0.7.JavaScript ES6, 25 octets
Appel
f(a,b)
àa/b
la source
gcd(a,b)=1
peut supprimer/b
Haskell ,
6261 octetsEssayez-le en ligne!
Utilise la
Data.Ratio
bibliothèque de Haskell pour des justifications de précision arbitraires. Si seulement les noms intégrés n'étaient pas si longs.la source
Data.Ratio
. Je n'en ai jamais entendu parlerGHC.Real
. N'hésitez pas à poster cela comme votre propre réponse.APL (Dyalog Classic) , 18 octets
Essayez-le en ligne!
APL NARS, 18 caractères
-1 octet grâce au test Uriel
la source
⍵-⌊⍵
→1|⍵
pour un octetSmalltalk, 33 octets
la source
Stax , 8 octets
Exécuter et déboguer
"Points bonus" pour aucune erreur de précision. Aucune arithmétique à virgule flottante utilisée. Cela (enfin) utilise le type rationnel intégré de stax.
la source
JavaScript, 70 octets
Si nous pouvons changer le type d'entrée en une chaîne, cela peut économiser 5 octets.
la source