Der König des alten Roms hat Schwierigkeiten festzustellen, ob ein magisches Quadrat gültig ist oder nicht, da das magische Quadrat, das er überprüft, keine Trennzeichen zwischen den Zahlen enthält. Er hat einen Softwareentwickler beauftragt, um festzustellen, ob ein magisches Quadrat gültig ist oder nicht.
Eingabebeschreibung
Die Eingabe erfolgt über STDIN- oder Befehlszeilenargumente. Sie können die Eingabe nicht in einer Variablen vorinitialisieren lassen (z. B. "Dieses Programm erwartet die Eingabe in einer Variablen x
"). Die Eingabe erfolgt im folgenden Format:
<top>,<middle>,<bottom>
Jede <top>
, <middle>
und <bottom>
ist ein String, wird immer nur die Großbuchstaben enthalten I
, V
und X
. Es enthält keine Leerzeichen oder andere Zeichen. Jede Zeichenfolge repräsentiert drei römische Ziffern, was zu einer 3x3-Zahlenmatrix führt. Diese römischen Ziffern können jedoch (aber nicht unbedingt) mehrdeutig sein . Lassen Sie mich dies anhand eines Beispiels veranschaulichen. Betrachten Sie die folgende Beispielzeile mit drei römischen Ziffern ohne Leerzeichen zwischen den einzelnen Ziffern:
IVIIIIX
Da zwischen den Buchstaben keine Leerzeichen stehen, gibt es hier zwei Möglichkeiten für die Zahlen:
- 1, 8, 9 (
I VIII IX
) - 4, 3, 9 (
IV III IX
)
Wenn Sie bedenken, dass alle drei Zeilen der Matrix mehrdeutig sein können, besteht die Möglichkeit, dass eine einzelne Eingabe viele verschiedene 3x3-Matrizen enthält.
Beachten Sie, dass Sequenzen wie 1, 7, 1, 9 ( I VII I IX
) nicht möglich sind, da jede Zeile immer drei römische Ziffern darstellt. Beachten Sie auch, dass die römischen Ziffern gültig sein müssen, sodass auch Sequenzen wie 1, 7, 8 ( I VII IIX
) nicht möglich sind.
Beschreibung der Ausgabe
Ausgabe:
- Eine Ganzzahl
A
, wobeiA
die Anzahl der eindeutigen 3x3-Matrizen ist, die aus der mehrdeutigen Eingabe gebildet werden können, und: - Ein wahrer Wert, wenn eine der einzigartigen 3x3-Matrizen ein magisches Quadrat bildet, oder:
- Ein falscher Wert, wenn keine der eindeutigen 3x3-Matrizen ein magisches Quadrat bildet.
Die Wahrheits- und Falschwerte müssen konsistent sein. Sie werden durch ein Komma getrennt.
Es ist eine Erklärung erforderlich, was als eindeutig gezählt wird. Solange eine Matrix nicht genau die gleichen Zahlen an genau den gleichen Positionen wie eine zuvor gefundene Matrix hat, wird sie als eindeutig gezählt. Dies bedeutet, dass Reflexionen usw. von zuvor gefundenen Matrizen als eindeutig gezählt werden.
Beispiel für Ein- und Ausgänge
In diesen Beispielen verwende ich true
als meinen Wahrheitswert und false
als meinen Falschwert.
Eingabe: VIIIIVI,IIIVVII,IVIXII
Ausgabe: 24,true
(Das magische Dreieck ist 8-1-6, 3-5-7, 4-9-2.)
Eingabe: IIIXVIII,IVIII,VIIII
Ausgabe:210,false
Extras
- Sie dürfen keine integrierten Konvertierungsfunktionen für römische Zahlen verwenden, wenn Ihre ausgewählte Sprache eine hat.
quelle
Antworten:
Perl, 219
237Zeilenumbrüche wurden aus Gründen der Übersichtlichkeit hinzugefügt.
Teste mich .
quelle
Prolog - 686
Ungolfed
Natürlich
p
könnte auch definiert werden als:In diesem Fall würde die Umgebung nach dem Schreiben der Anzahl der Quadrate "Ja" oder "Nein" sagen.
Beispiel
Mit Eclipse .
Beispielergebnisse für das zweite werden hier eingefügt .
quelle
Python, 442 Zeichen
Der Code wird zuerst erstellt. Dabei
N
handelt es sich um eine Zuordnung von einer römischen Zeichenfolge zu ihrem Wert für alle möglichen Zahlen, die wir möglicherweise benötigen. Teilt jede Zeile auf jede mögliche Weise in drei Zeilen und überprüft, in welchem der resultierenden Tripel alle Zuordnungen enthalten sindN
. Das Finaleany
sieht, ob eine Kombination ein magisches Quadrat ist.quelle
Haskell,
451429423 BytesVerwendungszweck:
Etwa 70 Bytes, nur um das Eingabe- und Ausgabeformat richtig zu machen.
Die Funktion
r
konvertiert eine römische Zahl (als Zeichenfolge angegeben) in eine Ganzzahl (wenn keine gültige römische Zahl0
zurückgegeben wird).s
teilt eine Folge von römischen Ziffern in 3 Teilzeichenfolgen auf und behält diese Tripel mit gültigen römischen Zahlen bei und konvertiert sie überr
in ganze Zahlen.e
prüft, ob alle ganzen Zahlen einer Liste mit drei Elementen gleich sind.p
Nimmt drei Zeichenfolgen römischer Ziffern, teilt sies
in Ganzzahllisten auf, kombiniert eine Ganzzahl jeder Liste zu Dreiergruppen und behält diese mit gleichen Summen in alle Richtungen bei.f
berechnet die Anzahl der gültigen Matrizen und prüft, obp
die leere Liste zurückgegeben wird (keine gültige Lösung) oder nicht (gültige Lösung vorhanden). Die Hauptfunktioni
liest die Eingabe von STDIN und konvertiert sie in eine Liste von Zeichenfolgen (q
hilft durch Ersetzen,
durch\n
) und Anrufep
.quelle
R,
489474464Das wurde viel größer als ich wollte, aber ich vermute, ich kann es ein bisschen Golf spielen.
Es verwendet eine Brute-Force-Methode, indem alle möglichen Kombinationen der römischen Ziffern und ihre entsprechenden Ziffern berechnet werden.
Sobald dies erledigt ist, vergleicht es die Eingabe mit der Liste der römischen Zahlen und erhält die möglichen Ziffern.
Von dort geht es durch jede Zahlenmatrix und testet auf das magische Quadrat, um schließlich das Ergebnis auszugeben.
Testlauf. Es wartet auf Eingaben, die in das RGui eingefügt wurden.
quelle