Una organización quiere crear un pequeño robot capaz de dibujar en un lienzo. Entre otros propósitos, se quiere que el robot ayude a personas a aprender a programar en el ensamblador de sistemas computacionales como éste. Su propósito es crear un intérprete del ensamblador propuesto del robot, de tal forma que permita ejecutar programas y ver su efecto sobre los lienzos.
Su intérprete recibirá en la primera línea las dimensiones del lienzo en filas y columnas, seguido por un carácter de relleno. Después de una línea en blanco vendrán las instrucciones del programa en el ensamblador del robot. Se sabe que el segmento de código del robot está limitado a 4096 instrucciones de máximo 16 caracteres cada una.
Ejemplo de entrada 1:
|
Ejemplo de salida 1:
|
Ejemplo de entrada 2:
|
Ejemplo de salida 2:
|
El robot funciona similar a la tortuga del lenguaje Logo, que puede desplazarse y dibujar sobre el lienzo, pero con capacidades nuevas que la tecnología moderna permite, como poder volar. Al iniciar la ejecución de un programa el robot se encuentra en la fila 1 y columna 1 del lienzo. Si el robot se desplaza (camina) sobre el lienzo, deja un rastro de tinta. Naturalmente, este rastro no queda si el robot vuela sobre el lienzo. El conjunto de instrucciones que el robot comprende son las siguientes (en orden alfabético).
# | Instrucción | Efecto |
---|---|---|
1 |
|
El robot camina la cantidad |
2 |
|
El intérprete dibuja el lienzo completo en la salida estándar. Las celdas que no tienen tinta se imprimirán con el carácter de relleno indicado en la primera línea. Si ya previamente había dibujado otro lienzo en la salida estándar, los separa por una línea vacía. Esta es una instrucción para el intérprete de computadora que no es necesaria para el robot físico, por lo que se decidió iniciarla con guión bajo para indicarlo. |
3 |
|
El robot usa sus capacidades de dron para elevarse y dirigirse a la celda ubicada en la fila |
4 |
|
Cambia la tinta del robot al carácter |
5 |
|
El robot camina la cantidad |
6 |
|
El robot camina la cantidad |
7 |
|
El robot camina la cantidad |
Si se pide desplazar al robot 0
celdas en una dirección, la acción no tendrá efecto, el robot seguirá en su misma celda sin dejar rastro de tinta. Si el robot está en una celda (a,b)
y se solicita desplazarlo 1
unidad en alguna dirección, el robot marcará la celda (a,b)
con tinta y luego tratará de moverse a la celda vecina (x,y)
. Si la celda vecina (x,y)
existe en el lienzo, el robot se moverá a (x,y)
sin marcarla con tinta y se quedará en (x,y)
. Si la celda vecina (x,y)
no existe (está fuera de los bordes), el robot permanecerá en la celda original (a,b)
. Si se pide mover el robot n
unidades en alguna dirección, se aplicará el este mismo comportamiento n
veces, una celda a la vez.
Evaluación
En cada uno de los rubros siguientes se evalúan las buenas prácticas de programación que influyen en la calidad, eficiencia, y reutilización del código. Nota: no es necesario que documente con Doxygen.
-
[30%] Diseña un algoritmo solución usando los 8 tipos de instrucciones (pseudocódigo).
-
[10%] Hace buen uso de la memoria. Crea y destruye matrices en memoria dinámica.
-
[20%] Interpreta (ejecuta) las instrucciones ensamblador en la entrada estándar o se detiene si hay desconocidas.
-
[10%] Imprime el estado del lienzo (
_draw
) separada de impresiones previas. -
[10%] Cambia el robot de lugar (
fly
) a una celda existente. Cambia el tipo de tinta (ink
). -
[20%] Mueve el robot en las cuatro direcciones (
top
,down
,right
,left
) dejando rastro de tinta sobre el lienzo sin salirse de él. -
[10% extra] Transcribe y corrige su solución en HackerRank para que pase los casos de prueba.