Commencez par étudier ce puzzle pour avoir une idée de ce que vous allez produire.
Votre défi consiste à écrire un programme ou une fonction qui produira un graphique circulaire comme ceux du puzzle, à partir d’un nombre (base 10) compris entre 1 et 100 (inclus). Cela ressemble à ce défi , sauf que vous produirez un graphique plutôt que des chiffres romains. Les cercles suivants représentent les nombres 1 à 10, de gauche à droite:
Comme l'indique la réponse au puzzle, votre graphique doit se lire comme un chiffre romain vu de l'intérieur vers l'extérieur, l'épaisseur de trait représentant les symboles du chiffre romain et le graphique entier représentant le nombre. Pour votre référence, voici les épaisseurs de lignes dont vous aurez besoin. Chaque ligne doit avoir un remplissage 3px entre elle et la suivante.
Number Roman Numeral Line Width
1 I 1px
5 V 3px
10 X 5px
50 L 7px
100 C 9px
S'il vous plaît envoyer un échantillon ou deux de votre sortie. Supposons que la saisie soit correcte, les failles standard , etc., etc. C'est le code de golf, donc le moins d'octets gagnent. En cas d'égalité des voix, la plupart des votes sont gagnants. Bonne chance!
Réponses:
Mathematica -
166181 octetsUn peu plus concis que les autres réponses de Mathematica, en partie grâce à un style plus simple.
Tous les espaces sont uniquement à des fins de clarté. Ceci définit une fonction anonyme qui renvoie le graphique souhaité.
Animation
Générer un GIF animé des nombres décimaux est trivial dans Mathematica, qui intègre des fonctions permettant d’animer et d’exporter des séquences d’objets arbitraires. En supposant que le code ci-dessus vient d'être exécuté,
Exemple de sortie
la source
Common Lisp -
376331304 octetsExemples
(1) (24)
(104) (1903) (3999)
Animation
Pour les nombres de 1 à 400:
NB: Pour l'anecdote, cette animation se fait comme suit:
J'ai une version modifiée du code, nommée
rings
qui renvoie la largeur de l'image produite. Par conséquent, le résultat de la boucle suivante est la taille maximale, ici 182 :La boucle entière prend 9.573 secondes. Cela donne environ 24 ms pour chaque entier. Ensuite, dans une coquille:
Ungolfed
Des explications
La fonction prend un entier
N
compris entre 1 et 3999 et un nom de fichierJ'utilise
(format nil "~@R" N)
pour convertir décimal en romain. Par exemple:La
~@R
chaîne de contrôle de format est spécifiée pour fonctionner avec des nombres entiers compris entre 1 et 3999. C'est pourquoi il existe une limitation pour la plage d'entrées autorisées.Je parcours la chaîne résultante pour construire une liste
P
contenant des(radius width)
couples, pour chaque chiffre C.La largeur est un simple mappage linéaire: j'utilise la chaîne constante "IVXLCDM" pour calculer la position de C dans celle-ci. En multipliant par deux et en ajoutant un, nous obtenons la valeur souhaitée:
Ceci est cependant fait légèrement différemment dans la version avec golf:
Le calcul de chaque rayon prend en compte la largeur de chaque anneau ainsi que les espaces vides entre les anneaux. Sans optimisation de la vitesse, les calculs restent précis car ils ne sont pas basés sur des flottants, mais sur des nombres rationnels.
Edit : J'ai modifié les paramètres pour se conformer aux règles de remplissage.
Une fois que cela est fait, je connais la taille requise de la toile résultante (deux fois le dernier rayon calculé).
P
et sauve la toile.la source
HTML + JQuery, 288
HTML
JS
Afficher l'extrait de code
Violon
la source
Java, 565
Exemples
15
84
93
Bien formaté:
la source
Mathematica 9 -
301249 octets: D On se sent triste d'utiliser la conversion intégrée en chiffres romains, mais bon.
(Quand j'ai fait ça hier soir, je n'avais pas beaucoup de temps, mais j'ai réalisé que le golf pouvait être joué beaucoup plus loin. Et j'ai aussi pris des allusions de David Zhang ...: D Merci!)
Un peu plus clairement:
C'est une fonction que vous pouvez appeler comme ceci:
Vous pouvez aussi afficher les résultats des valeurs a à b avec:
Table[r[i],{i,a,b}]
Remarque : cela ne fonctionne que pour des valeurs allant jusqu'à 399.
la source
Python 2,
322296Le script lit le numéro à convertir à partir de stdin et génère l'image sous forme de balisage SVG.
.. J'utilise 'rouge' au lieu de 'noir', car il enregistre 2 caractères :)
Voici quelques exemples: pour 23: http://jsfiddle.net/39xmpq49/ pour 42: http://jsfiddle.net/7Ls24q9e/1/
la source
JavaScript
342334308la source