Su programa tiene que tomar una cadena de líneas múltiples, como esta:
#############
# #
# p #
# #
#############
p
es el jugador y #
es un bloque.
Ahora debajo de eso en la terminal debería haber una línea de entrada que diga:
How do you want to move?
Si el jugador escribe l
que tiene que caminar hacia la izquierda cuando no hay un bloque, de lo contrario, cuando hay un bloque, no puede pasar y no se mueve, por supuesto, ahora la salida en la terminal debe actualizarse ( y la salida anterior borrada / sobrescrita):
#############
# #
# p #
# #
#############
Puede escribir l
para izquierda, r
para derecha, u
para arriba y d
para abajo.
La entrada siempre será multilínea, pero no siempre se rellenará con espacios en un rectángulo perfecto. Además, los hash pueden estar en cualquier parte de la cadena y no siempre estarán conectados entre sí. Por ejemplo:
## ##
# #
## p
#
Es una mazmorra válida. (tenga en cuenta la falta de espacios finales en cada línea)
Si el jugador sale de la cadena, no tiene que mostrarse. Pero si regresa más tarde, debe mostrarse nuevamente.
Y los límites de "fuera" de la cadena son length(longest_line)
por number_of_lines
rectángulo, por lo que incluso si una línea no se rellena con espacios a la derecha, esa ubicación no se considera fuera de los límites. Ejemplo usando la mazmorra anterior:
## ##
# #p
##
#
La segunda línea no tenía un espacio donde ahora está la p, pero eso no importa.
Finalmente, su programa debe recorrer siempre para siempre la entrada.
Casos de prueba
Caso de prueba 1:
####
# p#
#
####
How do you want to move?
d
####
# #
# p
####
Caso de prueba 2:
####
p#
#
####
How do you want to move?
l
####
p #
#
####
How do you want to move?
d
####
#
p #
####
How do you want to move?
l
####
#
p #
####
How do you want to move?
l
####
#
#
####
How do you want to move?
r
####
#
p #
####
Por supuesto, estos no están completos. Su código debe repetirse para siempre y borrar la pantalla entre cada salida .
Su salida puede solicitar la entrada como How do you want to move?\n<input>
o How do you want to move?<input>
(es decir, no necesita la entrada en una línea en blanco), y no necesita una línea vacía entre la línea final de la mazmorra y la solicitud. (Sin embargo, no pueden estar en la misma línea)
¡Las lagunas estándar no están permitidas! Este es el código de golf, por lo que gana el código más corto en bytes.
l
,r
,u
, od
) puede ser cualquier cosa, no sólo "¿Cómo se quiere mover"? Realmente no afecta las respuestas excepto por el golf.Respuestas:
MATLAB,
268247246 bytesProbablemente no competitivo, pero fue divertido. Versión de golf:
Versión legible:
Los
try
bloques son para evitar que la función falle en errores fuera de límites. Estoy seguro de que dos de ellos son excesivos, pero no puedo jugar golf mejor que eso.Vale la pena señalar que MATLAB expandirá la matriz hacia abajo y hacia la derecha, pero el jugador desaparecerá cuando se mueva a un área 'inexplorada' por primera vez. Por ejemplo, si te mueves fuera de los límites actuales de la mazmorra hacia la derecha en un espacio, desaparecerás, pero el próximo giro MATLAB expandirá la matriz para incluir la nueva columna (o fila, si te mueves hacia abajo).
'#'==d(y,x)
ahorra un byte en comparación cond(y,x)=='#'
, ya que no necesita un espacio entreif
y'#'
fuente
Escritura de café: 580 bytes
He exprimido todo lo que pude de este algoritmo en particular y mi cerebro cansado. Necesito unas vacaciones.
fuente