Meu cachorro está latindo para mim, mas estou com preguiça de levá-lo para passear. Eu tenho uma ideia! Vou pedir às pessoas do Code Golf que façam isso por mim!
Seu desafio é simular a caminhada de um cachorro. Aqui estão as regras para passear com o cachorro:
- O humano (
H
) começará0,0
em um plano de coordenadas (cartesiano) e aleatoriamente percorrerá um espaço para cima, esquerda, direita ou baixo a cada segundo. - O cão (
D
) começará no mesmo local e aumentará zero, um, dois ou três espaços para cima, esquerda, direita ou baixo a cada segundo (aleatoriamente, é claro). O cão é menos previsível e às vezes corre mais rápido ou para completamente. - O cão nunca se afastará mais do que uma certa quantidade de unidades do humano (à distância euclidiana), que é o comprimento da trela (
L
). Por exemplo, seL
for6
, uma posição válida seriaH(0,0) D(4,4)
(já que a distância é de cerca de 5,65 unidades), mas nãoH(0,0) D(5,4)
(cerca de 6,4 unidades).- Se, quando o cão se mover, viole o requisito de distância da trela, ele deve ir o mais longe possível em sua direção determinada, que não viole o requisito de distância. Por exemplo, se a posição for
H(0,0) D(3,4)
e o cão decidir aleatoriamente mover 3 espaços para a direita, ele irá paraD(4,4)
, pois é o mais longe que pode ir sem afastar mais de 6 unidades. (Observe que isso pode resultar em um movimento de 0 espaços, ou seja, nenhum movimento!)
- Se, quando o cão se mover, viole o requisito de distância da trela, ele deve ir o mais longe possível em sua direção determinada, que não viole o requisito de distância. Por exemplo, se a posição for
- Regras diversas: o humano se move primeiro. O humano não deve exceder o comprimento da trela em movimento. Se isso acontecer, ele deve escolher outra direção. "Aleatório" significa "com uma distribuição uniforme e sem padrões".
A entrada será fornecida neste formato (pode ser STDIN, parâmetro de função, arquivo etc.):
"<amount of seconds the walk will last> <leash length>"
Por exemplo:
300 6 // a 5 minute walk with a 6 yard leash
Você deve fornecer a saída neste formato (pode ser STDOUT, valor de retorno da função, arquivo etc.):
H(0,0) D(0,0)
H(0,1) D(2,0)
H(1,1) D(2,1)
H(1,0) D(2,-1)
...
(A quantidade de linhas de saída será seconds + 1
, pois a H(0,0) D(0,0)
linha não conta.)
Isso é código-golfe , então o código mais curto em bytes vencerá!