Le roi de la Rome antique a du mal à déterminer si un carré magique est valide ou non, car le carré magique qu'il vérifie ne comprend aucun séparateur entre les nombres. Il a engagé un ingénieur logiciel pour l'aider à déterminer si un carré magique est valide ou non.
Description de l'entrée
L'entrée vient sur les arguments STDIN ou de ligne de commande. Vous ne pouvez pas avoir l'entrée pré-initialisée dans une variable (par exemple "ce programme attend l'entrée dans une variable x
"). L'entrée est au format suivant:
<top>,<middle>,<bottom>
Chacun de <top>
, <middle>
et <bottom>
est une chaîne qui contiendra seulement jamais les caractères majuscules I
, V
et X
. Il ne contiendra aucun espace ni aucun autre caractère. Chaque chaîne représente trois chiffres romains, résultant ainsi en une matrice de nombres 3x3. Cependant, ces chiffres romains peuvent (mais pas nécessairement) être ambigus . Permettez-moi d'illustrer cela avec un exemple. Prenons l'exemple de la ligne suivante de trois chiffres romains, sans espace entre chaque numéro:
IVIIIIX
Parce qu'il n'y a pas d'espaces entre les lettres, il y a deux possibilités pour les nombres ici:
- 1, 8, 9 (
I VIII IX
) - 4, 3, 9 (
IV III IX
)
Lorsque vous considérez que les trois lignes de la matrice peuvent être ambigües, il existe un potentiel pour qu'il existe de nombreuses matrices 3x3 différentes à partir d'une seule entrée.
Notez que les séquences telles que 1, 7, 1, 9 ( I VII I IX
) ne sont pas possibles car chaque ligne représentera toujours trois chiffres romains. Notez également que les chiffres romains doivent être valides, donc des séquences telles que 1, 7, 8 (I VII IIX
) ne sont également pas possibles.
Description de sortie
Production:
- Un entier
A
, oùA
est le nombre de matrices 3x3 uniques qui peuvent être formées à partir de l'entrée ambigüe, et: - Une valeur vraie si l' une des matrices 3x3 uniques forme un carré magique, ou:
- Une valeur fausse si aucune des matrices 3x3 uniques ne forme un carré magique.
Les valeurs véridiques et fausses doivent être cohérentes. Ils sont séparés par une virgule.
Une explication est requise sur ce qui est considéré comme unique. Tant qu'une matrice n'a pas exactement les mêmes nombres exactement aux mêmes positions qu'une matrice trouvée précédemment, elle est considérée comme unique. Cela signifie que les réflexions, etc. des matrices trouvées précédemment sont considérées comme uniques.
Exemples d'entrées et de sorties
Dans ces exemples, j'utilise true
comme valeur vraie et false
comme valeur fausse.
Entrée: VIIIIVI,IIIVVII,IVIXII
Sortie: 24,true
(Le triangle magique est 8-1-6, 3-5-7, 4-9-2.)
Entrée: IIIXVIII,IVIII,VIIII
Sortie:210,false
Suppléments
- Vous n'êtes pas autorisé à utiliser des fonctions de conversion de chiffres romains intégrées si votre langue choisie en possède une.
la source
Réponses:
Perl, 219
237Sauts de ligne ajoutés pour plus de clarté.
Testez- moi .
la source
Prolog - 686
Non golfé
Bien sûr,
p
pourrait également être défini comme:Dans ce cas, l'environnement dirait «Oui» ou «Non» après avoir écrit le nombre de carrés.
Exemple
Utilisation d' éclipse .
Des exemples de résultats pour le second sont collés ici .
la source
Python, 442 caractères
Le code construit d'abord
N
qui est un mappage de la chaîne de chiffres romains à sa valeur pour tous les nombres possibles dont nous pourrions avoir besoin. Divise chaque ligne en trois de toutes les manières possibles et vérifie dans lequel des triplets résultants tous ont des correspondancesN
. La finaleany
voit si une combinaison est un carré magique.la source
Haskell,
451429423 octetsUsage:
Environ 70 octets juste pour obtenir le bon format d'entrée et de sortie.
La fonction
r
convertit un nombre romain (donné sous forme de chaîne) en un entier (si ce n'est pas un nombre romain valide qui0
est retourné).s
divise une chaîne de chiffres romains en 3 sous-chaînes et conserve ces triplets avec des nombres romains valides et les convertit viar
en entiers.e
vérifie si tous les entiers d'une liste de trois éléments sont égaux.p
prend trois chaînes de chiffres romains, les divise vias
en listes d'entiers, combine un entier de chaque liste en triplets et conserve ceux avec des sommes égales dans toutes les directions.f
calcule le nombre de matrices valides et vérifie sip
renvoie la liste vide (pas de solution valide) ou non (il existe une solution valide). La fonction principalei
lit l'entrée de STDIN, la convertit en une liste de chaînes (q
aide en remplaçant,
par\n
) et les appelsp
.la source
R,
489474464Cela est devenu beaucoup plus gros que je ne le voulais, mais je pense que je peux le jouer un peu.
Il utilise une méthode de force brute, en calculant toutes les combinaisons possibles de chiffres romains et leurs chiffres correspondants.
Une fois cela fait, il compare l'entrée à la liste des chiffres romains et obtient les chiffres possibles.
De là, il parcourt chaque matrice de nombres et teste le carré magique, pour finalement produire le résultat.
Essai. Il attend l'entrée une fois collé dans le RGui.
la source