Wie Sie höchstwahrscheinlich jetzt wissen, gibt es 2339 Lösungen für Pentomino-Rätsel in einem 6x10-Raster. Es gibt verschiedene Markierungsschemata für die 12 Pentominos. Zwei davon sind in der folgenden Abbildung dargestellt:
Bildnachweis: Wikipedia
Für die Zwecke der aktuellen Aufgabe werden wir sagen, dass eine normalisierte Pentominolösung eine Lösung ist, die das zweite Markierungsschema (Conways) verwendet.
Beispiel:
O O O O O S S S Z Z
P P R R S S W W Z V
P P P R R W W Z Z V
U U X R T W Y V V V
U X X X T Y Y Y Y Q
U U X T T T Q Q Q Q
Das Stück mit 5 Quadraten in einer Reihe wird O
laut Schema mit Buchstaben bezeichnet . Gleiches gilt für alle Teile.
Aufgabe:
Bei einer Lösung für das 6x10-Pentomino, bei der die Teile mit einem zufälligen Schema gekennzeichnet sind, normieren Sie es so, dass alle Teile in Conways Kennzeichnungsschema gekennzeichnet sind. Sie müssen die Teile erkennen und jedes Quadrat eines bestimmten Teils mit dem Symbol des Teils markieren.
Eingang:
Die zu normalisierende Lösung in jedem für Sie passenden Format, zum Beispiel:
Eine mehrzeilige Zeichenfolge
Eine Liste von Zeichenfolgen
Eine Liste mit Listen von Zeichen
und so weiter
Ausgabe:
Dieselbe Lösung (alle Positionen und Ausrichtungen der Teile bleiben erhalten), aber jedes Teil wird gemäß dem Beschriftungsschema von Conway beschriftet. Hinweis: Die Ausgabe MUSS als 6x10-Zeichenraster gedruckt werden. Führende und nachfolgende Zeilenumbrüche und Leerzeichen sind zulässig. Sie können auch ein Leerzeichen zwischen den Zeichen (aber keine Leerzeilen) drucken, wie im obigen Beispiel.
Testfälle:
1. Eingabe:
6623338888
6222344478
66A234BB70
1AAA94B770
11A99BB700
1199555550
Ausgabe:
UURTTTQQQQ
URRRTVVVSQ
UUXRTVZZSY
PXXXWVZSSY
PPXWWZZSYY
PPWWOOOOOY
2. Eingabe:
45ookkkk00
455ooogk00
4a55gggdd0
4aaa3gnnd.
4am333ndd.
mmmm3nn...
Ausgabe:
OWSSQQQQPP
OWWSSSRQPP
OTWWRRRUUP
OTTTXRZZUV
OTYXXXZUUV
YYYYXZZVVV
Gewinnkriterien:
Die kürzeste Lösung in Bytes in jeder Sprache gewinnt. Lassen Sie sich von den Golfsprachen nicht entmutigen. Erklärungen zu den Algorithmen und Implementierungen sind willkommen.
quelle
Antworten:
APL (Dyalog Classic) ,
545350 BytesProbieren Sie es online!
Berechnen Sie eine Invariante für jedes Pentomino in der Eingabe: Messen Sie (∆x, ∆y) von jedem seiner Quadrate bis zu seinem Schwerpunkt, nehmen Sie abs (∆x) und abs (∆y), addieren Sie die x-Komponenten und separat das y Komponenten und multiplizieren Sie die beiden Summen. Dies ergibt 12 unterschiedliche Ergebnisse. Dann finden Sie den Index der Invarianten jedes Pentominos in der sortierten Sammlung aller Invarianten. Ersetzen Sie 0 durch
'O'
, 1 durch'X'
, 2 durch'R'
usw.quelle
Jelly , 37 Bytes
Ein vollständiges Programm, das eine Liste von Zeichenfolgen erstellt (weil wir drucken müssen - andernfalls entfernen Sie die nachfolgenden Zeichenfolgen
Y
und Sie haben eine Monade, die eine Liste von Zahlen- oder Zeichenlisten erstellt, die eine Liste von Zeichenlisten zurückgibt).Probieren Sie es online!
Wie?
Ich glaube, dies funktioniert mit der gleichen Kategorisierung von Pentominos wie die APL-Lösung von ngn , wenn auch auf etwas andere Weise (ich kenne APL auch nicht, daher bin ich mir nicht sicher, wie ähnlich die Methode jenseits der Kategorisierung ist).
(Beachten Sie, dass dies
“æṂ⁾+’Œ?¤+78Ọ
nur eine Ein-Byte-Speicherung ist“XRPTZWUYSVQO”
!)quelle
Wolfram Language (Mathematica) , 103 Byte
Nimmt die Eingabe als Liste von Zeichenlisten.
Probieren Sie es online!
Die Hauptidee dabei ist, dass wir für jedes Zeichen in der Eingabe die Koordinaten finden, wo es auftritt, die Kurtosis nehmen und seine Koordinaten summieren. Dies gibt uns eine Invariante für jedes Stück.
(Die Kurtosis ist ein meist irrelevanter Operator aus der Statistik - der Schlüssel ist, dass sie bei der Translation invariant ist, während Reflexion und Rotation die Reihenfolge der Koordinaten höchstens ändern können. Wir addieren die Koordinaten, sodass sich die Invariante nie ändert.)
Abgesehen von der seltsamen Invariante ähnelt diese Lösung den anderen: Wir sortieren die Zeichen und die Teile nach jeder Invariante und ersetzen dann jedes Zeichen durch das entsprechende Zeichen aus
"UPSWZVRTQXYO"
: den Teilen, sortiert nach Kurtosis-Summe.Schließlich
""<>Riffle[...,"\n"]
ist der Print-as-a-Grid-Code.quelle
Sort@Variance
fand stattTr@Kurtosis
, und wahrscheinlich haben mehr Menschen von Varianz gehört. Funktioniert aberTr@Variance
nicht, da mehrere Pentominos (wie P und X) die gleiche Summe aus x-Varianz und y-Varianz haben. Also habe ich in Mathematics Dokumentation nach etwas ausgefallenerem gesucht.Python 2 , 191 Bytes
Probieren Sie es online!
Nimmt eine mehrzeilige Zeichenfolge mit einer nachgestellten Zeile und führt sechs verschachtelte Listenerfassungen durch.
Ungolfed Version
quelle