Herausforderung
Bei einer ASCII-Kunstform müssen Sie herausfinden, ob die Form ein reguläres Sechseck ist oder nicht.
Sechsecke
Ein reguläres Sechseck wird nach zwei Regeln definiert:
- Es hat sechs Seiten
- Jede Seite hat die gleiche Anzahl von Zeichen
Die folgende Form ist beispielsweise regelmäßig, hat jedoch keine sechs Seiten und ist daher kein reguläres Sechseck :
B a a h
s a i d
y o u r
g a o t
In ähnlicher Weise hat die folgende Form sechs Seiten, hat jedoch Seiten unterschiedlicher Länge und ist daher kein reguläres Sechseck:
* *
* * *
* * * *
* * *
* *
Die folgende Form hat jedoch sechs Seiten und alle Seiten haben die gleiche Anzahl von Zeichen, sodass es sich um ein reguläres Sechseck handelt:
T h e
h e x a
g o n s a
r e c o
m i n
Regeln
Die Ausgabe sollte ein wahrer oder falscher Wert sein (wahr, wenn die Form ein reguläres Sechseck ist, falsch, wenn nicht).
Die Formen enthalten immer nur druckbare ASCII-Zeichen.
Der Rand der Form wird niemals Leerzeichen enthalten. In diesem Fall können Sie Falschgeld zurückgeben.
Vor und / oder nach der Form können beliebig viele Leerzeichen eingefügt werden.
Möglicherweise sind nicht alle Winkel in der Form gleich. Die folgende Form ist eine gültige Eingabe:
. . .
. . .
. . . . .
. . . .
. . .
Es wird ein falscher Wert zurückgegeben.
Alle Form-Eingaben erfolgen in einem durch Leerzeichen getrennten Raster. Die hexagonale Eingabe erfolgt in einem versetzten Raster (jede Zeile ist von der nächsten versetzt).
Beispiele
Wahrheit
Die folgenden Formen sollten wahrheitsgemäße Werte zurückgeben:
# _
+ + +
9 :
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
t h i s
i s
a h
e x
a g
o n
! ! ! !
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
Falsey
Das Folgende sollte falsche Werte zurückgeben
r e c t a
n g l e s
h e l l o
w o r l d s
t h i s i s b
e t a d e c
a y n o w
*
* *
* * *
.....
.......
.........
.......
.....
Diese Form befindet sich nicht in einem durch Leerzeichen getrennten Raster und ist nicht versetzt.
* * * *
---------
* * * * * *
-------------
* * * * * *
---------
* * * *
5 6 7
8 9 0 1
2 3 4 5 6
7 8 9 0
1 2 3
Bei der Eingabe einzelner Zeichen kann Ihr Programm entweder "Wahr" oder "Falsch" ausgeben:
&
Gewinnen
Das kürzeste Programm in Bytes gewinnt.
quelle
5 6 7\n8 9 0 1\n2 3 4 5 6\n7 8 9 0\n1 2 3
und eines mit einem zusätzlichen Raum für eine der Zeilen führt:ss5 6 7\nss8 9 0 1\n2 3 4 5 6\ns7 8 9 0\nss1 2 3
(führende Leerzeichen ersetzt werden mits
ihm klarer in dieser unformatierten Form etwas zu machen) . Alle 10 Ihrer Testfälle werden derzeit mit meinem Code korrekt validiert, aber diese beiden Fälle würden mit der von mir verwendeten Methode fehlschlagen.Antworten:
R, 184 Bytes
Golf gespielt, könnte wahrscheinlich von ein paar Bytes golfen werden
Ungolfed, sehr chaotisch, eher auf halbem Weg golfen
Da das Eingabeformat nicht angegeben ist, muss Input in einem R-Array-Format angegeben werden, das ungefähr so aussieht.
Hier ist eine Generatorfunktion, die die Eingabe generiert. Der Generator generiert kein Objekt, das in die Hexagon-Check-Funktion eingespeist wird, sondern den Code, der das Array angibt (praktisch dasselbe). Dies sollte also nicht als Syntaxanalyse des Texts gelten. Denken Sie daran, dass ich keinen Text eingebe, sondern eine Array-Struktur.
Zum Beispiel wäre der generierte Code:
structure(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), .Dim = c(5L, 9L ))
der identisch ist mitarray(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9))
Hoffentlich entspricht diese Eingabemethode den Regeln.
Hier sind die Testfälle
Eingabearrays generieren
Auf Sechseck prüfen
quelle
f(array(c(" ", " ", "2", " ", " ", " ", "8", " ", "7", " ", "5", " ", "3", " ", "1", " ", "9", " ", "8", " ", "6", " ", "4", " ", "2", " ", "0", " ", "9", " ", "7", " ", "5", " ", "3", " ", "1", " ", "0", " ", " ", " ", "6", " ", " "), dim = c(5, 9)))
JavaScript (ES6), 214 Byte
Wobei
\n
ein buchstäbliches Newline-Zeichen darstellt. Ungolfed:quelle
" x\n g g\ng g g\n g g"
sollte falsch, aber wahr sein.x
?SnakeEx , 200 Bytes
Die richtige Sprache für den Job ... irgendwie.
SnakeEx ist eine Sprache aus der 2-D Pattern Matching Challenge. Es sollte bei dieser Aufgabe wirklich gut sein, aber leider haben alle Eckfälle den Code wirklich aufgebläht. Ich habe auch ein paar Dolmetscherfehler entdeckt. Trotzdem war es eine lustige Herausforderung.
m
ist die Hauptschlange, die alle anderen dazu aufruft, die eigentliche Arbeit zu erledigen. Es beginnt in der oberen rechten Ecke des Sechsecks und geht im Uhrzeigersinn. Nummerierte Gruppen werden verwendet, um sicherzustellen, dass alle diagonalen Seitenlängen gleich sind und die horizontale Seitenlänge mit der Höhe der gesamten Figur übereinstimmt. Ich könnte eine ausführlichere Erklärung schreiben, aber ich habe die letzten zwei Tage damit verbracht, mich mit Eckfällen zu befassen. Probieren Sie es einfach hier aus . : ^)quelle
Perl,
127125124121 BytesBeinhaltet +4 für
-0p
Geben Sie eine Eingabe für STDIN ein
quelle