Vor kurzem hat es viel geschneit, und meine Auffahrt muss schneebedeckt werden. Wenn die Schneefräse über einen Bereich fährt, den sie bereits verschneit hat, wird auf diesen Bereich Schnee geblasen und muss erneut geblasen werden. Und natürlich kann die Schneefräse nicht in der Mitte der Auffahrt starten, sondern muss von meiner Garage aus starten, wo sie gelagert wird.
Formeller:
Ihr Programm verwendet eine Standardeingabe als Zeichenfolge oder mehrdimensionales Array, die wie folgt aussieht:
XXXXOOOOXXXX
X X
X X
XXXXXXXXXXXX
X
stellt einen Bereich dar, der nicht schneebedeckt werden kann, O
stellt einen Bereich dar, in dem die Schneefräse eingesetzt werden kann, und leere Räume stellen Bereiche dar, in denen Schnee liegt. Wenn Sie möchten, können Sie verschiedene Werte auswählen.
Ihr Programm muss Folgendes ausgeben:
XXXX*%OOXXXX
Xv<<<^<<<<<X
X>>>>>>>>>^X
XXXXXXXXXXXX
Die Schneefräse startet am *
. Das zeigt *
immer auf den nächsten Nicht-Garagenplatz. Die <
, >
, v
und ^
repräsentieren alle Zeiger , wo die nächste Richtung. Sie zeigen der Schneefräse, wohin sie gehen soll. Sobald ein Zeiger auf zeigt, %
ist das Gebläse wieder in der Garage angekommen, und die gesamte Auffahrt sollte frei sein.
Die Schneefräse muss über die gesamte Auffahrt fahren. Der Weg der Schneefräse kann sich niemals überlappen. Unmöglicher Input darf nicht gegeben werden.
Da ich nicht länger draußen sein möchte als nötig und nicht viel Zeit mit dem Tippen verbringen muss, sollte das Programm so kurz wie möglich sein. Der kürzeste Code gewinnt!
Testfälle:
Diese Testfälle können mehrere richtige Antworten haben. Ich habe unter jedem Testfall mögliche Lösungen angegeben.
Testfall 1: Der im Beispiel angegebene.
Testfall 2:
XOOOOOX
X X
X X
X XXXXXXXX
X X
X X
XXXXXXXXXXXXXX
X*OOO%X
Xv>>>^X
Xv^<<<X
Xv>>>^XXXXXXXX
Xv^<<<<<<<<<<X
X>>>>>>>>>>>^X
XXXXXXXXXXXXXX
Testfall 3:
XOOOOX
X X
X X
X XXX
X X
X X
XXXXXX
XOO%*X
X>>^vX
X^v<<X
X^vXXX
X^>>vX
X^<<<X
XXXXXX
Testfall 4:
XXXXXXXXXXXXX
O X
O X X
O X X
O X
XXXXXXXXXXXXX
XXXXXXXXXXXXX
*>>>>>>>>>>vX
Ov<v<Xv<<<<<X
Ov^v^X>>>>>vX
%<^<^<<<<<<<X
XXXXXXXXXXXXX
O
immer in einer geraden durchgehenden Linie liegen? 2) dass dasO
s immer am Rand des Arrays sein wird? 3) dass es keine führenden Räume geben wird? 4) dass es keine nachgestellten Leerzeichen gibt (dh in Testfall 2 sind einige Zeilen kürzer als andere)?Antworten:
JavaScript (ES6),
346310299298297296283 ByteAn einigen Stellen ziemlich hackig, aber ich wollte den Code da rausbringen. Eingabe als 2D-Zeichenarray, Ausgabe durch Modifizieren des Arrays.
Ungolfed Version
Dies ist exakt der gleiche Algorithmus, außer für einige truthy / falsy Magie mit zu
+' '
seinNaN
falsy zu sein (und einige mehr), einige Golfgrößen und mitif
s statt?:
,||
und&&
.quelle