Leonardo da Pisano alias Fibonacci a joué un rôle déterminant dans l'introduction du système numérique hindou-arabe en Europe. Avant cela, les mathématiciens y travaillaient en base soixante avec des chiffres romains.
Par exemple, la racine carrée de deux peut être approximée comme suit: une et vingt-quatre parties de soixante et cinquante et une parties de trois mille six cents , et écrite comme: i xxiv li , avec la mise à l'échelle déterminée par le contexte. À l'époque, le «néant» était connu ( c.-à-d. Zéro), mais n'avait aucune représentation standard dans ce système numérique.
Si Fibonacci avait ignoré ces nouveaux chiffres décimaux qu'il avait rencontrés au cours de ses voyages, il aurait sûrement corrigé les lacunes du système actuel. Ce système amélioré, nous l'appellerons les sexagésimaux de Fibonacci .
Votre tâche consiste à écrire un programme, une fonction ou un extrait de code qui prend un nombre à virgule flottante au format ASCII ou binaire et qui sort en base soixante chiffres romains. L'entrée peut être un fichier, une console, une ligne de commande ou un argument de fonction et la sortie peut être un fichier ou une console, selon ce qui est le plus simple.
La sortie peut être en majuscules ou en minuscules et doit inclure les améliorations suivantes:
- utilisez n ou N pour indiquer une signification nulle, un lieu n'a aucune valeur, c'est-à - dire «zéro» (un problème avec le système)
- utilisez e ou E pour indiquer et correspondant au point sexagésimal (autre problème avec le système)
- utiliser un point central · ou un astérisque * pour séparer les groupes de chiffres romains (encore un autre problème avec le système)
Supposons que l'entrée sera en virgule flottante avec une mantisse non supérieure à lix · lix · lix · lix · lix . Les fractions inférieures à n · e · n · n · n · n · i peuvent être ignorées. Donc, à condition que l'entrée ait ces restrictions, au plus dix groupes de chiffres romains avec un e peuvent être sortis.
Les nombres inférieurs à i doivent être précédés d'un n · e pour garantir que le contexte est clair.
Quelques exemples: input
→ sortie
0
→ n1
→ i60
→ i · n0.1
→ n · e · vi3600
→ i · n · n10.5
→ x · e · xxx16777215
→ i · xvii · xl · xx · xv3.1415926536
→ iii · e · viii · xxix · xliv · n · xlvii
La sortie doit éviter les n · de tête inutiles dans la partie mantisse, les e isolés ou les traînants · n dans la partie fractionnaire de la sortie. Ainsi, par exemple, n · n · n · n · i , i · e et i · e · n · n · n · n · n sont des sorties incorrectes pour une entrée de 1
.
Les différences de plus ou moins n · e · n · n · n · n · i dans la sortie sont dans les tolérances et acceptables.
L'entrée est une virgule flottante légale dans la langue de votre choix, elle peut donc inclure des exposants positifs ou négatifs tant que l'entrée ne sort pas de la plage spécifiée ci-dessus.
Et enfin, les inserts en chiffres romains sont autorisés!
Réponses:
Python 3,
323319320 octetsCette réponse implémente les sexagésimaux de Fibonacci avec le délimiteur
*
et sans égard à la complexité de Kolmogorov dans les listes de chiffres romains (pour le moment du moins). Des tentatives ont été faites pour joindre la bouclewhile
etfor
sous laquelle les chiffres romains sont générés sous une boucle, mais ces tentatives n'ont pas encore rencontré le succès. Tous les conseils et suggestions de golf sont les bienvenus et appréciés.Edit: correction de bugs et golf.
Edit: Plus de correction de bugs.
Non golfé:
la source
C - 584 octets
Non compétitif (évidemment), mais pour servir d'inspiration:
Enregistrez sous
fs.c
, créez avecgcc -o fs fs.c -lm
et exécutez sous./fs <arg>
.Cas de test:
Plus grande mantisse et fraction:
J'utilise
double
comme type de travail, donc la plus grande mantisse et fraction combinée dépasse la précision native de ce type. Si j'utilisais à lalong double
place, il pourrait le gérer.la source
int main
n'a pas à revenir0
.Haskell (
333322315 octets)Je ne sais pas si le dernier chiffre sexagésimal est censé être arrondi lorsque je le fais ou si la troncature est autorisée; cela tronque, je pense que celui de Python3 pourrait aussi?
(-9 octets, merci H.PWiz ! -2 octets en éliminant
where
pour(\->)$
, -5 de plus en inventant cetted
fonction et en jouanta++"."++x
au golfa++'.':x
.)Non golfé:
La méthode de conversion des entiers en chiffres romains a été volée sans vergogne à Thomas Ahle sur StackOverflow et vient de jouer un peu au golf .
la source
["l","xl","x","ix","v","iv","i"]
peut êtrewords"l xl x ix v iv i"