Hace mucho tiempo, cuando pasaba más tiempo jugando juegos de rol, uno de los problemas que tenían algunos jugadores era rastrear el movimiento del grupo y dibujar el mapa adecuado. Así que vengo con una idea, para comprobar cómo ustedes lidian con este problema.
La tarea es escribir una función, que toma como parámetro de entrada la lista de direcciones (aprobada como estructura de su elección) ^v<>
, muestra el mapa de la mazmorra. En el ejemplo para input: >>>vvv<<<^^^
output será:
+----+ +----+
| | |>>>v|
| ++ | |^++v|
| ++ | because |^++v|
| | |^<<<|
+----+ +----+
Casos de prueba
>>>>>>vvvvv<<<<^^^>>v
+-------+
| |
+-+---+ |
| | |
| + | |
| +-+ |
| |
+-----+
^^^^^vvv<<<^^vv>>>>>>>>vv>><<^^^^v>>>>v^<^
+-+
+-+| | +-++-+
| || | | ++ ++
| ++ +-+ |
| +-+ |
+--+ +-+ +-+-+
| | | |
+-+ +---+
Como es un desafío de código de golf, gana el código más corto.
Feliz golf.
EDITAR Perdón por la edición tardía, no tuve mucho tiempo recientemente.
El mapa se genera en función del movimiento. Debe contener solo corredores que fueron visitados durante la caminata. Por lo tanto, crear una gran sala no será una respuesta válida.
Hay tres símbolos válidos en el mapa:
|
pared vertical|
pared horizontal+
intersección de pared vertical y horizontal.
La longitud máxima de la ruta es de 255 caracteres (pero si puede, no se limite).
Más casos de prueba:
><><><><
+--+
| |
+--+
>^<v
+--+
| |
| |
+--+
Espero que ahora todo esté claro.
vvv>>^^^<<
produciría (¿cruces? ¿Tuberías?)Respuestas:
Javascript (ES6),
261254243 bytesJSFiddle
fuente
return
reemplazando el;
con,
y el{}
con()
for
bucle que no se puede incrustar de esa manera.{
coneval("
y}
con")
para eliminar el código de'\\n'
si lo hiciera. Si cuento correctamente, eso realmente conduce a +1 byte. ¿O hay una mejor manera de incrustar el salto de línea en la evaluación?\n
ya que las cadenas de plantilla admiten nuevas líneas literales, pero eso aún lo dejaría en el mismo recuento de bytes. Oh bienC, 246 bytes
Toma la entrada como caracteres separados, por ejemplo:
O más convenientemente, este formato (¡intencionalmente sin comillas!):
O para una entrada aleatoria (bastante ineficiente):
Y finalmente, usar
awk
para recortar el resultado significa que podemos crecer mucho más:Salidas a stdout. Utiliza el hecho de que se permite el relleno alrededor del mapa (produce un mapa que tiene una longitud de borde 2 * n + 1, colocando la posición final en el medio).
Descompostura
Esto funciona al recorrer los argumentos en reversa y moverse en reversa. En realidad, utiliza el hecho de que arg 0 es el nombre del programa; no importa cuál sea el nombre, pero nos permite visitar tanto la celda inicial como la última (así como todas las celdas intermedias) sin necesidad de un manejo especial.
fuente