Contexte
Ce challenge est inspiré de ce site internet, qui a publié le schéma suivant:
Ce diagramme nous montre que l'expression du chiffre romain la plus longue sous 250 est celle de 188, ce qui nécessite 9 chiffres pour s'exprimer.
Défi
Les symboles standards utilisés pour exprimer chiffres les plus romains sont les suivantes: { I
, V
, X
, L
, C
, D
, M
}, où les valeurs numériques de caractères sont M
= 1000, D
= 500, C
= 100, L
= 50, X
= 10, V
= 5, I
= 1.
Dans ce défi, votre objectif est de, étant donné un entier positif n , calculer le nombre de représentations de chiffres romains valides qui peuvent être composées en concaténant n des symboles standard.
Ensuite, votre programme doit sortir le résultat de ce calcul!
Entrée : Un entier positif n .
Sortie : Le nombre d'expressions de chiffres romains valides de longueur n .
Règles pour les expressions numériques romaines
Les chiffres romains n'avaient à l'origine qu'un appariement "additif", ce qui signifie que les chiffres étaient toujours écrits dans l'ordre décroissant, et la somme des valeurs de tous les chiffres était la valeur du nombre.
Plus tard, l'appariement soustractif, l'utilisation de placer un plus petit chiffre devant un plus grand afin de soustraire le plus petit du plus grand, est devenu monnaie courante pour raccourcir les expressions du chiffre romain. Paires soustractive ne peuvent être enchaînées, comme dans l'expression non valide suivante: IXL
.
Voici les règles modernes pour l'appariement additif et soustractif.
- Un seul I, X et C peut être utilisé comme premier chiffre dans une partie d'une paire soustractive.
- Je ne peux être placé avant V ou X que dans une paire soustractive.
- X ne peut être placé avant L ou C dans une paire soustractive.
- C ne peut être placé avant D ou M dans une paire soustractive.
- À l'exception des paires soustractives, les chiffres doivent être dans l'ordre décroissant (ce qui signifie que si vous supprimez le chiffre de tête de chaque paire soustractive, les chiffres seront dans l'ordre décroissant).
- M, C et X ne peuvent pas être égalés ou dépassés par des dénominations plus petites.
- D, L et V ne peuvent chacun apparaître qu'une seule fois.
- Seul M peut être répété 4 fois ou plus.
Notes complémentaires
Nous n'utiliserons pas la notation à barres ; nous ajouterons simplement plus de M pour exprimer n'importe quel nombre.
Ce sont les seules règles que nous suivrons pour nos chiffres romains. Cela signifie que les expressions étranges, telles que
IVI
, seront également considérées comme valides dans notre système.Souvenez-vous également que nous ne comptons pas le nombre de nombres qui ont des expressions de longueur n , car certains nombres ont plusieurs expressions. Au lieu de cela, nous comptons uniquement le nombre d'expressions valides.
Cas de test
1
→ 7
2
→ 31
3
→ 105
J'ai vérifié ce qui précède à la main, alors assurez-vous de vérifier les cas de test et d'ajouter plus si vous le pouvez!
Critères gagnants
Il s'agit d'un défi de code-golf , alors amusez-vous! Je n'accepterai que des solutions qui peuvent gérer au moins les entrées de 1 à 9. Plus est bonus!
Éditer
Comme demandé par les commentateurs, trouvez ci-dessous, ou sur ce lien pastebin, les 105 combos que j'ai comptés pour n = 3
III IVI IXI IXV IXX VII XII XIV XIX XVI XXI XXV XXX XLI XLV XLX XCI XCV XCX XCL XCC LII LIV LIX LVI LXI LXV LXX CII CIV CIX CVI CXI CXV CXX CXL CXC CLI CLV CLX CCI CCV CCX CCL CCC CDI CDV CDX CDL CDC CMI CMV CMX CML CMC CMD CMM DII DIV DIX DVI DXI DXV DXX DXL DXC DLI DLV DLX DCI DCV DCX DCL DCC MII MIV MIX MVI MXI MXV MXX MXL MXC MLI MLV MLX MCI MCV MCX MCL MCC MCD MCM MDI MDV MDX MDL MDC MMI MMI MMX MML MMC MMD MMM
Modifier 2:
Utilisez le code non golfé suivant , gracieuseté de Jonathan Allan pour vérifier vos résultats.
Modifier 3:
Je m'excuse pour toutes les erreurs de ce défi. Je ferai en sorte de faire un meilleur travail la prochaine fois!