Eines der Lieblingsspielzeuge meines Kindes ist ein Set wie dieses . Eigentlich ist es eines meiner Lieblingsspielzeuge - ich habe damit gespielt und mir einige Ideen für PPCG-Herausforderungen gegeben. Hier ist eine:
Schreiben Sie ein Programm oder eine Funktion, die eine ASCII-Strichzeichnung als Eingabe verwendet und entscheidet, ob sie in einen Würfel gefaltet wird oder nicht.
Eingang
Die Eingabe besteht aus genau einem Hexomino aus Quadraten wie folgt:
+-+
| |
+-+
Ein gültiges Eingabe-Heximino ist zum Beispiel:
+-+
| |
+-+-+-+-+
| | | | |
+-+-+-+-+
| |
+-+
Ausgabe
- Ein wahrer Wert, wenn das Hexomino in einen Würfel gefaltet werden kann, oder
- Ein falscher Wert sonst.
Um uns ein bisschen Arbeit zu ersparen, hat Wikipedia schöne Grafiken von:
- Alle 35 Hexominos:
- Alle 11 Hexominos, die sich in Würfel falten lassen:
Anmerkungen
- Eingangshexominos können eine beliebige Drehung oder Reflexion aufweisen, nicht nur die in den obigen Bildern gezeigten
- Eingabehexominos können führende Leerzeichen enthalten, werden jedoch in Bezug auf sich selbst korrekt ausgerichtet
- Eingabe-Hexominos können am Ende von Zeilen Leerzeichen und am Ende von Eingaben Zeilenumbrüche enthalten
code-golf
ascii-art
kolmogorov-complexity
geometry
Digitales Trauma
quelle
quelle
Antworten:
PMA / Schnecken , 130
oder mehr "lesbar",
Ungewöhnlich ist ein Problem aufgetreten, das durch die begrenzte Anzahl der bisher implementierten Funktionen behoben werden kann. Das
!(z\ )
Muster bestimmt, dass sich die aktuelle Position auf dem Feld in der Mitte eines Quadrats befindet, wobei die negative Behauptung verwendet wird, dass ein Feld in einer "oktilinearen" Richtung vorhanden ist. Die allgemeine Idee ist, nach einem Muster zu suchen, bei dem ein Quadrat an jeder der 5 erforderlichen Stellen relativ zu dem Quadrat platziert wird, auf dem die Übereinstimmung beginnt. Es muss auch überprüft werden, dass es sich nicht in einem 2x2-Quadratblock befindet. Bevor das Programm funktionieren würde, musste ich einen Fehler beim Parsen von Klammern beheben.Wenn das Hexomino keinen Würfel abbildet,
0
wird gedruckt. In diesem Fall wird eine positive Ganzzahl ausgegeben (Anzahl der Übereinstimmungen).Ich habe diesen Polyomino-Generator angepasst , um alle möglichen Testfälle zu erstellen:
quelle
Ruby,
173 148 145143 BytesLetzte Änderung:
/2
rechts von<
ersetzt durch*2
links. Ermöglicht die Beseitigung eines Satzes von()
Erläuterung
Der Code besteht aus zwei Teilen: einer unbenannten Hauptfunktion, die das Parsen ausführt, und einer unbenannten Hilfsfunktion, die der Variablen zugewiesen ist
h
, die die Prüfung durchführt.Die Hauptfunktion durchsucht den String nacheinander und addiert die x- und y-Koordinaten
i,j
aller+
gefundenen Symbole zux[]
undy[]
. Es ruft dannh
zweimal an. Beim ersten Mal wird davon ausgegangen, dass das Hexomino horizontal ist (x[]
enthält die Längen undy[]
Breiten), und beim zweiten Mal wird davon ausgegangen, dass es vertikal ist.Die Funktion
h
nimmt dieb
Längskoordinaten im Array und dann die Breitenkoordinaten im Arrayc
. Es berechnet die Länge (in Quadraten) nach dem Ausdruck(b.max.b.min)/2
. Wenn dies kleiner oder gleich 3 ist, sollte das Hexomino in die andere Richtung ausgewertet werden, damit esh
zurückkehrtfalse
.Die Überprüfung der Hexominos zeigt, dass die Hexominos, die sich zu einem Würfel falten, bei einer
+
Länge von 4 nicht mehr als 2 Quadrate (3 Symbole) in der ersten und letzten Reihe haben . Die meisten Quadrate konzentrieren sich auf die mittlere Reihe, die zum Äquator des Würfels wird. Diese Bedingung erweist sich als notwendig und ausreichend für ein Hexomino der Länge 4, das sich zu einem Würfel falten wird.Es gibt nur ein Hexomino der Länge 5, das sich zu einem Würfel falten lässt. Es hat 3 Quadrate (4
+
Symbole) in seiner ersten und letzten Reihe. Alle anderen Hexominos der Länge 5 haben 5 oder mehr+
Symbole in der ersten oder letzten Reihe.Es gibt nur ein Hexomino der Länge 6. Es enthält 7
+
Symbole in jeder Zeile.Zusammengenommen genügt es zu überprüfen, ob die Länge des Hexominos größer als 3 ist und die Anzahl der
+
Symbole in der ersten und letzten Zeile (je nachdem, welcher Wert höher ist) kleiner als die Länge ist.Ungolfed im Testprogramm
quelle
JavaScript (ES6), 443
431Bearbeiten Bug - Fix, Fehler bei der Eingabe Parse, Entfernen leere Spalten
Das ist sehr lang und noch länger, da das Parsen von Eingaben einen großen Teil der Aufgabe ausmacht.
Ich überprüfe nur, ob der angegebene Eingang einer der 11 faltbaren Hexominos ist.
Jedes faltbare Hexomino kann auf eine 5x5-Bitmap abgebildet werden (bis zu 8 verschiedene, mit Simmetrie und Rotation). Die Bitmaps als 25-Bit-Zahl genommen, habe ich die minimalen Werte für die 11 notierten Hexominos unter Verwendung des folgenden Codes gefunden (mit sehr einfachem Eingabeformat).
Das gibt
[1505,2530,3024,4578,252,6552,2529,4577,2499,4547,7056]
Angesichts der eingegebenen Zeichenfolge muss ich dasselbe tun, um die min-Bitmap zu finden, und dann true zurückgeben, wenn diese Nummer in meiner Precalc-Liste vorhanden ist.
Führen Sie das Snippet aus, um es in Firefox zu testen
Code-Snippet anzeigen
quelle
,\nt=t
am Ende der zweiten Zeile / am Anfang der dritten Zeile?