Um gramado é definido como um campo retangular com um caractere cercado por duas camadas de espaço em branco visível . Isso significa duas linhas acima e duas linhas abaixo e um preenchimento de dois espaços à esquerda (a direita tem espaço em branco visível, portanto você não precisa incluí-lo).
|||||
|||||
|||||
Um gramado aparado é uma estrutura semelhante, exceto que o personagem principal é uma versão abreviada do primeiro personagem.
.....
.....
.....
Um cortador de grama tem dois caracteres diferentes, diferentes dos caracteres do gramado. Aqui está um exemplo, com =
a parte de trás do cortador e o
a frente:
=o
Um cortador de grama se moverá verticalmente no gramado e também poderá girar de frente. O cortador de grama acima pode se parecer com qualquer um dos itens abaixo durante algum momento da animação:
=o
o=
o
=
=
o
O cortador de grama pode iniciar em qualquer conjunto das posições abaixo no gramado abaixo. Os cortadores de grama rodavam o
pelo gramado no sentido horário. Os cortadores de 0
grama dirigiam pelo gramado no sentido anti-horário.
= =
0 o
=o|||||0=
|||||
=0|||||o=
o 0
= =
A animação começa no segundo 0. A cada segundo, o cortador de grama avança um espaço e corta a grama de frente. Quando o cortador desocupa um local, ele aparece cortado. Quando a frente do cortador de grama atinge o último item sem cortes de uma linha (e ainda há grama cortada), o cortador de grama gira uma vez para continuar o corte atual (permanecendo no sentido horário / anti-horário com base na posição original) Quando o cortador estiver terminado, continua em linha reta (cortando a grama já cortada) até sair completamente do gramado.
Com um cortador de grama começando no canto superior esquerdo, isso mostra a progressão básica de um gramado 5x3:
Second 0 Second 1 Second 2 Second 3 Second 4 Second 5 Second 6 Second 7 Second 8 Second 9 Second 10 Second 11 Second 12 Second 13 Second 14 Second 15 Second 16 Second 17 Second 18 Second 19 Second 20 Second 21 Second 22
=
=o||||| =o|||| =o||| .=o|| ..=o| ...=o ....o ....= ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... ..... .....
||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||o ||||= ||||. ||||. ||||. ||||. ||||. ||||. o|||. =o|||. =o||. .=o|. ..=o. ...=o ....=o .....=o
||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||| ||||o ||||o= |||o= ||o=. |o=.. o=... o.... =.... ..... ..... ..... ..... ..... ..... .....
=
Entrada
Sua entrada será as dimensões do gramado (dois inteiros).
Resultado
Imprima o gramado e o cortador na posição escolhida. Você pode escolher os quatro caracteres para grama, grama cortada, frente do cortador e cortador de grama. Você só precisa de espaço em branco suficiente para mostrar o conteúdo do segundo atual às especificações, mas um espaço em branco extra é completamente permitido, desde que pareça o mesmo.
Como se trata de uma animação , você pode limpar a saída a cada segundo ou imprimir novas linhas suficientes para aparecer para animar no quadro de visualização (você pode assumir que o quadro de visualização é o tamanho necessário para aparecer para animar).
É permitido um intervalo de tempo consistente diferente de um segundo (ou seja, 999 milis para salvar um byte ou dois segundos por algum motivo), mas deve ser tal que o cortador de grama ainda pareça estar se movendo naturalmente.
Se possível, forneça um visual (TIO, Snippet, GIF etc.)
Isso é código-golfe , então a resposta mais curta em bytes vence.
Respostas:
JavaScript (ES6 / Node.js),
664525523 caracteresDesminificado com comentários:
note: Suponho que eu deveria pegar o pacote 'sleep' e reescrever com setTimeout para ser nodejs independente
fonte