A aplicação é uma simulação de um robô de brinquedo movendo-se em um tampo de mesa quadrado, com dimensões de 5 unidades x 5 unidades. Não há outras obstruções na superfície da mesa. O robô pode se mover livremente pela superfície da mesa. Qualquer movimento que resultaria na queda do robô da mesa é prevenido, no entanto, comandos de movimento válidos adicionais ainda são permitidos. A aplicação lê um arquivo usando um nome passado na linha de comando, os seguintes comandos são válidos:
PLACE X,Y,F
MOVE
LEFT
RIGHT
REPORT
- PLACE colocará o robô de brinquedo na mesa na posição X,Y e voltado para NORTH, SOUTH, EAST ou WEST.
- A origem (0, 0) é o canto mais SUDOESTE.
- Todos os comandos são ignorados até que um PLACE válido seja feito.
- MOVE moverá o robô de brinquedo uma unidade para frente na direção em que ele está atualmente virado.
- LEFT e RIGHT giram o robô 90 graus na direção especificada sem alterar a posição do robô.
- REPORT anuncia o X, Y e F do robô.
Presume-se que o arquivo tenha codificação ASCII. Presume-se que o comando PLACE tenha apenas um espaço, ou seja, PLACE 1, 2, NORTH é um comando inválido. Todos os comandos devem estar em maiúsculas; todos os comandos em minúsculas ou com letras mistas serão ignorados.
Em última análise, esta descrição quer que construamos uma aplicação que receba uma lista de comandos, como:
commands.txt
PLACE 0,0,NORTH
MOVE
RIGHT
MOVE
LEFT
MOVE
REPORT
Assim que a aplicação receber esses comandos, ela deve executar uma simulação para um robô de brinquedo que obedeça a esses comandos e, se a lista de comandos incluir um comando REPORT, a aplicação nos informará onde o robô está:
$ toyrobot.py commands.txt
Robot is currently at (1, 2) and it's facing NORTH
Neste exemplo, as duas coordenadas referem-se às coordenadas EAST e NORTH do robô, respectivamente. O robô começou em (0, 0) e estava virado para NORTH. O robô então se move (para (EAST=0, NORTH=1) ou (0, 1) para abreviar), vira à direita, move-se novamente (para (1, 1)), vira à esquerda e se move uma última vez (para (1, 2)) antes de relatar sua localização. O robô nos informa que possui as coordenadas de (EAST=1, NORTH=2), pois se moveu para EAST uma vez e para NORTH duas vezes, dados os comandos que fornecemos a ele.