Recientemente ha habido una gran nevada, y mi camino de entrada necesita nieve. Si el quitanieves sobrepasa un área que ya ha nevado, entonces esa área tendrá nieve y tendrá que volver a soplar. Y, por supuesto, el quitanieves no puede comenzar en el medio del camino de entrada, debe comenzar desde mi garaje, donde está almacenado.
Más formalmente:
Su programa toma una forma estándar de entrada como una cadena o matriz multidimensional que se parece a lo siguiente:
XXXXOOOOXXXX
X X
X X
XXXXXXXXXXXX
X
representa un área que no puede ser nevada, O
representa un área donde se puede desplegar el quitanieves y los espacios vacíos representan áreas donde hay nieve. Puede elegir diferentes valores si lo desea.
Su programa debe generar algo como lo siguiente:
XXXX*%OOXXXX
Xv<<<^<<<<<X
X>>>>>>>>>^X
XXXXXXXXXXXX
El quitanieves comienza en el *
. El *
siempre apunta al espacio que no es de garaje más cercano. El <
, >
, v
, y ^
todos representan punteros de la siguiente dirección, donde es. Apuntan al quitanieves a dónde ir. Una vez que un puntero apunta al %
, el soplador ha vuelto al garaje, y toda la entrada debe estar despejada.
El quitanieves debe recorrer todo el camino de entrada. El camino del quitanieves nunca puede solaparse. No se debe dar una entrada imposible.
Como no quiero estar afuera más tiempo del necesario y no necesito pasar mucho tiempo escribiendo, el programa debe ser lo más breve posible. ¡El código más corto gana!
Casos de prueba:
Estos casos de prueba pueden tener múltiples respuestas correctas. He proporcionado posibles soluciones debajo de cada caso de prueba.
Caso de prueba 1: el que se da en el ejemplo.
Caso de prueba 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
Caso de prueba 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
Caso de prueba 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
's siempre estarán en una línea recta continua? 2) que laO
s siempre estará en el borde de la matriz? 3) que no habrá espacios principales? 4) que no habrá espacios finales (es decir, en el caso de prueba 2, algunas líneas son más cortas que otras)?Respuestas:
JavaScript (ES6),
346310299298297296283 bytesMuy hacky en algunos lugares, pero quería sacar el código. Entrada como una matriz de caracteres 2D, salida modificando dicha matriz.
Versión sin golf
Este es el mismo algoritmo exacto, salvo por algunos Truthy / magia Falsy con
+' '
estarNaN
siendo Falsy (y algunas más), algunas variables de golf y el uso deif
s en lugar de?:
,||
y&&
.fuente