Esto es esencialmente lo mismo que esta pregunta, excepto que es más difícil. De nuevo, debe escribir un programa que vaya desde la esquina inferior izquierda de un rectángulo hasta la esquina superior derecha. Sin embargo, esta vez se permiten movimientos diagonales.
El programa aceptará un par ordenado (width, height)
y los usará como las dimensiones de un rectángulo. Luego, su programa creará un arte ASCII de la solución (se usa .
para un cuadrado vacío, #
para parte de la solución y X
para el cuadrado inicial) y contará el número de movimientos necesarios para llegar al punto final.
Ejemplo
Entrada: (5, 6)
Salida:
....#
....#
...#.
..#..
.#...
X....
Move count: 5
¡La respuesta más corta en bytes gana!
Respuestas:
MATL , 38 bytes
Pruébalo en línea!
Explicación
Dejar
m
yn
ser las entradas ordenadas, de modo quem
sea mayor o igual quen
. El código inicialmente construye una matrizm
x den
la siguiente manera:#
. El número de estas entradas menos 1 es el recuento de movimientos.X
..
Si es necesario, la matriz ahora se transpone para que tenga la forma deseada. Tenga en cuenta que la primera dimensión de una matriz es su altura, no su ancho, por lo que corresponde a la segunda entrada.
La matriz se voltea para que
X
aparezca en la parte inferior de la primera columna, y sus entradas se utilizan como índices en la cadena'.#X'
para producir la matriz de caracteres 2D deseada.fuente
Pyth,
464544 bytesPruébalo aquí
Explicación:
fuente
JavaScript (ES6), 132
Editar 2 bytes guardados gracias a @Neil
Prueba
fuente
w--,R=
... almap()
.Javascript (usando una biblioteca externa) (235 bytes)
Por Dios, esto fue difícil! Bueno ... mi biblioteca no era realmente la tarea correcta para esto jaja. Pero me gusto el reto
Enlace a lib: https://github.com/mvegh1/Enumerable
Explicación del código: Crear función de 2 variables. Almacene x-1 e y-1 en variables. Almacene max y min de esos en variables. Cree un rango de números verticalmente descendente desde (y-1) para un recuento de y. Para cada elemento en el rango vertical, escriba una línea para el elemento actual, de acuerdo con el predicado complejo. Ese predicado crea un rango ascendente de enteros desde 0, para un recuento de x. Para cada elemento en ese rango, concatene en 1 cadena de acuerdo con un predicado complejo. Ese predicado verifica si está en la parte inferior izquierda, de lo contrario verifica si está en diagonal, de lo contrario verifica que estamos en el borde X o Y. Finalmente, todo eso se almacenó en una variable. Luego, para obtener el recuento de movimientos, básicamente solo contamos los números. Luego concatene eso con la variable almacenada y devuelva el resultado
Eso fue un bocado jaja. La captura de pantalla tiene un bytecount incorrecto porque encontré una manera de guardar 4 bytes mientras publicaba esto
EDITAR: veo que otras respuestas no están poniendo "Move count:" en su salida, pero la mía sí. Si eso no es un requisito, eso reduce un montón de bytes ...
fuente
Python 3,
161156bytesUna función que toma datos a través de argumentos e imprime el arte ascii, seguido del recuento de movimientos, en STDOUT.
Cómo funciona
El programa primero crea una lista de listas, donde cada lista representa una fila de la cuadrícula y cada elemento de las listas de componentes lo es
.
. Cada elemento que debería ser#
tiene la propiedad de que si la cuadrícula de salida fuera cuadrada, las ordenadas que representan su ubicación serían iguales; por lo tanto, hacer un bucle sobre algún índicei
e insertarlo#
en la ubicación(i, i)
daría el resultado deseado. Sin embargo, la cuadrícula no siempre es cuadrada y, por lo tanto, los índices se sujetan a la cuadrícula tomando el mínimo del índice y el ancho / alto (disminuido debido a la indexación cero) según sea necesario. Si el índice es cero, la posición actual debe ser la entrada inferior izquierda y, por lo tanto,X
se inserta en su lugar. A continuación, los elementos en cada línea se concatenan y cada línea se imprime en STDOUT. El número de movimientos es el máximo del ancho / alto decrementado; Esto también está impreso.Pruébalo en Ideone
fuente