Die Einrichtung
Stellen Sie sich eine seltsam geformte Box mit 29 nummerierten Zellen vor, wie in Abb. 1 unten gezeigt.
In dieser 2D-Box befinden sich zwei Arten quadratischer Tiere: Shubbles und Smoles. Fig. 1 (a) zeigt einige blaue Flecken und einige smoles in rot. Jede Kreatur belegt genau eine Gitterzelle. Die Box kann zwischen 0 und 26 Shubbles enthalten, enthält aber immer genau zwei Smoles.
Da sie der Schwerkraft ausgesetzt sind, sitzen Trümmer und Smoles auf dem Boden der Kiste und stapeln sich über allem, was sich unter ihnen befindet. Beide Arten sind außergewöhnlich faul und bleiben ständig bewegungslos.
Die Box enthält auch einen Stot, der als schwarzes Quadrat dargestellt ist und genau eine Gitterzelle belegt. Der Stot ist nicht der Schwerkraft ausgesetzt .
Die Box hat eine Öffnung am Boden der Zelle 28, wie in der Abbildung dargestellt.
Um die Konfiguration von Shubbles, Smoles und dem Stot in der Box in Textform darzustellen, verwenden wir eine Zeichenfolge mit 29 Zeichen, ein Zeichen pro Gitterzelle, in der aufgezählten Reihenfolge, wobei .
eine leere Zelle, o
ein Shubble, x
ein Smole dargestellt wird. und @
Darstellen des Stots. Zum Beispiel wird die Konfiguration von Fig. 1 (a) durch die Zeichenkette dargestellt .........@...o....ooo..xox...
.
Manipulationen
Die Box kann um ein Vielfaches von 90 ° gedreht werden. Während die Box gedreht wird, bleiben die Shubbles und Smoles in ihren Gitterzellen stationär. Sobald eine Drehung abgeschlossen ist, fallen sie direkt nach unten, bis entweder i ) sie durch eine Wand darunter blockiert werden, ii ) sie durch ein Shubble, Smole oder Stot darunter blockiert sind oder iii ) sie durch das Loch in Zelle 28 fallen und verlassen Sie die Box. Der Stot fällt nicht; Es bleibt in seiner aktuellen Zelle fixiert, auch wenn Kreaturen darauf ruhen.
Die Box kann erst wieder gedreht werden, wenn die Kreaturen gefallen sind und eine neue stabile Konfiguration erreicht haben.
Textuell werden Boxdrehungen +
für eine Drehung um 90 ° im Uhrzeigersinn, |
für eine Drehung um 180 ° und -
für eine Drehung um 90 ° gegen den Uhrzeigersinn bezeichnet.
Zusätzlich kann der Stot in Schritten von einer Gitterzelle in die vier Kompassrichtungen bewegt werden . Eine Bewegung darf nicht: i ) eine Kollision zwischen dem Stot und einer Kreatur verursachen (dh die Zielgitterzelle muss leer sein), ii ) eine Kollision zwischen dem Stot und einer Wand verursachen, noch iii ) den Stot durch die Box verlassen das Loch in Zelle 28.
Außerdem kann sich der Stot nicht bewegen, wenn Kreaturen darauf ruhen (in Bezug auf die aktuelle Schwerkraft).
Textuell werden Stot-Moves <
für links, >
rechts, ^
oben und v
unten bezeichnet. Stot-Bewegungen werden immer in Bezug auf den in den Figuren dargestellten "Standard" -Rahmen (nicht gedreht) angegeben . Wenn sich der Stot in Zelle 10 befindet, wird er durch Verschieben ^
immer in Zelle 5 und durch Verschieben >
immer in Zelle 11 verschoben. Die Ausrichtung des Felds hat keinen Einfluss auf die Bewegungsrichtung.
Manipulationssequenzen werden mit Zeichenfolgen von links nach rechts codiert. Beispielsweise zeigt die Zeichenfolge +<<^-
an, dass die Box um 90 ° im Uhrzeigersinn gedreht wurde, der Stot zweimal nach links und einmal nach oben bewegt wurde (in Bezug auf den Standardrahmen) und die Box dann um 90 ° gegen den Uhrzeigersinn zurück in ihre ursprüngliche Ausrichtung gedreht wurde.
Die Herausforderung
Aus ganz guten Gründen (die ich nicht offenlegen kann) möchten wir alle Trümmer aus der Schachtel herausholen, ohne einen einzigen Smole herauszulösen. Um dies zu erreichen, können wir die oben speziell beschriebenen Manipulationen verwenden.
Bevor wir dieses Problem lösen, müssen wir simulieren, wie sich unsere verschiedenen Manipulationen auf den Inhalt der Box auswirken, auf die sich diese Herausforderung konzentriert.
Sie müssen ein Programm schreiben, das zwei Argumente von stdin
(oder einem gleichwertigen) akzeptiert :
- Eine Zeichenfolge, die den Anfangszustand der Box beschreibt
- eine Folge von Manipulationen
Sie können davon ausgehen, dass beide Argumente syntaktisch gültig sind, dass die Box in der Standardausrichtung beginnt und dass der Anfangszustand der Box stabil und legal ist.
Das Programm muss stdout
entweder (oder gleichwertig) ausgeben :
( Fall 1 ) Der Endzustand der Box, ausgedrückt als Zeichenfolge, wenn die Reihenfolge der Bewegungen legal ist (sie verstößt nicht gegen die Regeln für Stot-Bewegungen) und keine Smoles dazu veranlasst, die Box zu verlassen. Die endgültige Ausrichtung der Box ist unwichtig.
( Fall 2 ) ein einzelnes Ausrufezeichen
!
, wenn die Reihenfolge der Bewegungen unzulässig ist oder Smoles die Box verlassen
Wertung
Das Gewinnerprogramm ist das kürzeste Programm nach Byteanzahl , vorbehaltlich einiger äußerst lukrativer Bonusmultiplikatoren:
beanspruchen Sie einen Multiplikator von 0,65, wenn das Programm anstelle des Druckens der codierten Ausgabe für Fall 1 ein ASCII-Bild der Box in ihrem endgültigen Zustand und ihrer Ausrichtung ausgibt, wobei die Spezifikationszeichen für Shubbles, Smoles, Stots und leere Zellen verwendet werden und a platziert wird
*
in der Zelle direkt außerhalb des Lochs in Zelle 28. Führende und nachfolgende Leerzeichen werden ignoriert.Wenn zum Beispiel Fig. 1 (a) um 90º gedreht wird, wäre die Ausgabe
. . ..... .o... xo.@. *ooo.. x .
beanspruchen Sie einen Multiplikator von 0,22, wenn das Programm anstelle der codierten Ausgabe für Fall 1 eine Bilddatei ausgibt oder ein GUI-Fenster mit einem Bild der Box in ihrem endgültigen Zustand und ihrer Ausrichtung anzeigt. Das Bild sollte im Stil von Abb. 1 (a) sein und die Gitterzellen, Wände und Kreaturen / Stots mit farbigen Kästchen zeigen.
beanspruchen Sie einen Multiplikator von 0,15, wenn das Programm anstelle der codierten Ausgabe für Fall 1 ein animiertes GIF- oder animiertes GUI-Fenster ausgibt, das alle Zwischenzustände in der Simulation in Intervallen von 1 Sekunde anzeigt. Es gelten die gleichen Bildregeln wie für den 0,22-Multiplikator. Das erste Bild der Animation sollte den Anfangszustand der Simulation darstellen. Zusätzlich sollte die Animation "versteckte" Zwischenzustände anzeigen, die sind
Die Shubbles / Smoles fallen nach einer Drehung um eine Zelle pro Animationsframe in eine stabile Konfiguration
der um 90 ° gedrehte Zwischenzustand der Box in einer 180 ° -Drehung
Fordern Sie einen Multiplikator von 0,12 an, wenn das Programm ein animiertes GIF- oder animiertes GUI-Fenster des oben genannten Stils erstellt, das jedoch mit 20 fps und Shows ausgeführt wird
glatte, kontinuierliche Animationen der Box rotieren
sanfte, kontinuierliche Animationen des sich bewegenden Stots und der in eine stabile Konfiguration fallenden Shubbles / Smoles
Durch das Loch in Zelle 28 fallende Blasen sollten aus der Box austreten und einmal ganz draußen verschwinden. Sie können Ihr eigenes Timing für die Animation auswählen, solange nicht mehr als 1 Manipulation / Sek. Ausgeführt wird.
Gesamtpunktzahl ist floor( base score * multiplier )
. Es kann nur ein Multiplikator beansprucht werden.
Es ist doch eine smole Welt. ;)