Моя собака лает на меня, но мне лень прогуливать его. У меня есть мысль! Я заставлю людей в Code Golf сделать это для меня!
Ваша задача - смоделировать собачью прогулку. Вот правила выгула собаки:
- Человек (
H
) начнется с0,0
(декартовой) координатной плоскости и будет случайным образом проходить один пробел вверх, влево, вправо или вниз каждую секунду. - Собака (
D
) будет начинаться в том же месте и будет проходить ноль, один, два или три пробела вверх, влево, вправо или вниз каждую секунду (случайным образом, конечно). Собака менее предсказуема и иногда бежит быстрее или останавливается полностью. - Собака никогда не отстанет от человека более чем на определенное количество единиц (на евклидовом расстоянии), что составляет длину поводка (
L
). Например, еслиL
есть6
, допустимая позиция будетH(0,0) D(4,4)
(так как расстояние составляет около 5,65 единиц), но нетH(0,0) D(5,4)
(около 6,4 единиц).- Если, когда собака движется, она будет нарушать требование о расстоянии поводка, она должна идти дальше всего в своем определенном направлении, которое не нарушает требование о расстоянии. Например, если позиция -
H(0,0) D(3,4)
и собака случайно решила переместиться на 3 пробела вправо, она пойдет к нейD(4,4)
, так как это самое дальнее расстояние, которое она может пройти, не убрав более 6 единиц. (Обратите внимание, что это может привести к перемещению на 0 пробелов, то есть к отсутствию движения вообще!)
- Если, когда собака движется, она будет нарушать требование о расстоянии поводка, она должна идти дальше всего в своем определенном направлении, которое не нарушает требование о расстоянии. Например, если позиция -
- Разные правила: человек двигается первым. Человек не должен превышать длину поводка при движении. Если это так, он должен выбрать другое направление. «Случайный» означает «с равномерным распределением и без шаблонов».
Ввод будет дан в следующем формате (может быть STDIN, параметр функции, файл и т. Д.):
"<amount of seconds the walk will last> <leash length>"
Например:
300 6 // a 5 minute walk with a 6 yard leash
Вы должны дать вывод в этом формате (может быть STDOUT, возвращаемое значение функции, файл и т. Д.):
H(0,0) D(0,0)
H(0,1) D(2,0)
H(1,1) D(2,1)
H(1,0) D(2,-1)
...
(Количество выводимых строк будет seconds + 1
, так как H(0,0) D(0,0)
строка не считается.)
Это код-гольф , поэтому выиграет самый короткий код в байтах!