Su trabajo es escribir un programa que encuentre el número óptimo de movimientos necesarios para llegar desde la esquina inferior izquierda de un rectángulo a la esquina superior derecha directamente opuesta.
Su programa aceptará entradas como un par ordenado (width, height)
. Estas serán las dimensiones del rectángulo con el que trabajará. Su programa creará un arte ASCII de la solución (use .
para el cuadrado vacío y #
para parte de la solución, X
para el cuadrado inicial) y contará el número de movimientos que se necesitan para llegar al punto final. Los movimientos diagonales no están permitidos. Si hay varias soluciones, elija una para generar.
El programa más corto en bytes gana.
Ejemplo
Entrada: (4, 5)
Salida:
..##
..#.
.##.
.#..
X#..
Recuento de movimientos: 7
#
"la solución óptima" (que es cualquier solución que nunca se mueve hacia la izquierda o hacia abajo)?#
porque es ilógico ir hacia la izquierda o hacia abajo.Respuestas:
05AB1E ,
2724 bytesCódigo:
Explicación:
Pruébalo en línea! . Utiliza la codificación CP-1252 .
fuente
Retina ,
5453 bytesToma la entrada separada por un salto de línea y genera la cuadrícula de la solución seguida del recuento de movimientos.
Pruébalo en línea!
Explicación
Convierta ambos enteros en esa
.
s, es decir, conviértalos en unarios.Esto crea una cuadrícula de
.
s, haciendo coincidir cada uno.
en la altura unaria y capturando la representación unaria del ancho. LaS
activa el modo de separación que devuelve las cadenas capturadas, y el|\D
y_
juntos aseguran que todo lo demás se elimina de la cadena.Esto convierte el último carácter de cada línea, así como toda la última línea en
#
s.Utiliza una tonelada de opciones para convertir solo la primera
#
en la última filaX
(necesitamos asegurarnos de que solo la última fila se vea afectada debido a las entradas de ancho-1).m
activa el modo multilínea que hace^
coincidir el comienzo de las líneas.-1=
le dice a Retina que realice la sustitución solo en el último partido. Finalmente,:
desactiva el modo silencioso predeterminado de modo que la cuadrícula se imprima en STDOUT como resultado intermedio.Finalmente, simplemente contamos el número
#
en la cadena, que corresponde al número de movimientos.fuente
Pyke, 26 bytes
Pruébalo aquí
O 34 bytes no competitivos, agregue el nodo de aplicación con un ast)
Pruébalo aquí!
O 30 bytes si se permiten espacios como relleno
fuente
Pyth,
322924 bytesPruébalo en línea!
Entrada de muestra:
Salida de muestra:
Cómo funciona:
Intento anterior:
Pruébalo en línea!
Entrada de muestra:
Salida de muestra:
Cómo funciona:
fuente
AtMQ
. Esto asigna los dos valores aG
yH
.CJam,
3533 bytesToma datos en el formulario
width height
y genera el recuento de movimientos en la primera línea, seguido de la cuadrícula de la solución.Pruébalo aquí.
Esto también funciona para el mismo número de bytes:
fuente
Ruby, 48 bytes
Esta es una función anónima, que según esta meta publicación es aceptable a menos que la pregunta indique "programa completo". Normalmente no sería pedante con esto, pero el problema es muy simple y hacer un programa sería un aumento significativo del% en la puntuación.
La entrada es dos argumentos. El valor de retorno es una matriz que contiene la cadena de arte ASCII y el número de
#
en la ruta.En programa de prueba
Salida
Es solo una cadena de h-1 filas de puntos w-1, seguidas por una
#
y nueva línea. Puse el#
al final para usar un solo#\n
literal para ambos#
y nueva línea (el código contiene una nueva línea real en lugar de una secuencia de escape). La fila final es luegoX
seguida por w-1#
.Fue más corto disminuir los valores de w y h durante la generación de arte ASCII, por lo que el cálculo final es simple
w+h
.fuente
JavaScript (ES6), 60 bytes
Uso
fuente
MATL ,
282625 bytesEDITAR (10 de junio de 2016): el siguiente enlace incluye una modificación (
5L
se reemplaza porIL
) para adaptarse a los cambios en el idiomaPruébalo en línea!
Explicación
fuente
Scala, 118 bytes
fuente
Haskell, 64 bytes
Ejemplo de uso:
Cómo funciona:
fuente
Java,
137132 bytesfuente
Lua, 81 bytes
Pruébalo en línea!
Golfizado:
Sin golf:
fuente
Python, 48.
Para usarlo, agregue
f=
antes de la línea de arriba y llámelo así:Resultado:
fuente