Газон определяется как прямоугольное поле с одним символом, окруженное двумя слоями видимого пробела. Это означает две строки выше и две строки внизу, а также два пробела слева (справа есть видимый пробел, поэтому вам не нужно его включать).
|||||
|||||
|||||
Скошенный газон имеет аналогичную структуру, за исключением того, что главный герой является укороченной версией первого персонажа.
.....
.....
.....
Газонокосилка - это два разных персонажа, отличных от двух газонных персонажей. Вот пример с =
задней частью косилки и o
передней частью :
=o
Газонокосилка будет двигаться вокруг газона вертикально, а также может вращаться вперед. Вышеуказанная косилка может выглядеть как любая из нижеприведенных во время анимации:
=o
o=
o
=
=
o
Газонокосилка может запускаться в любом из указанных ниже положений на нижнем газоне. Газонокосилки o
будут ездить по газону по часовой стрелке. Газонокосилки 0
будут ездить по газону против часовой стрелки.
= =
0 o
=o|||||0=
|||||
=0|||||o=
o 0
= =
Анимация начинается в секунду 0. Каждую секунду газонокосилка движется вперед на одну позицию и подстригает траву впереди. Когда газонокосилка освобождается от места, она кажется отрезанной. Когда передняя часть косилки достигает последнего неразрезанного предмета на линии (и все еще остается необрезанная трава), задняя часть косилки вращается один раз, чтобы продолжить текущую косу (оставаясь по часовой стрелке / против часовой стрелки в зависимости от исходного положения). Когда косилка будет закончена, он продолжает прямо (косить уже подстриженную траву) до тех пор, пока полностью не выйдет из газона.
С косилкой, начинающейся слева вверху, это показывает основной прогресс для газона 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.... =.... ..... ..... ..... ..... ..... ..... .....
=
вход
В качестве входных данных будут использоваться размеры газона (два целых числа).
Выход
Распечатайте газон и газонокосилку в выбранном вами положении. Вы можете выбрать четыре символа для травы, косить траву, косить спереди и косить сзади. Вам нужно только достаточно пробелов, чтобы показать содержание текущей секунды спецификациям, но дополнительное пробел полностью разрешено, если оно выглядит одинаково.
Поскольку это анимация , вы можете либо очищать вывод каждую секунду, либо печатать достаточно новых строк, чтобы отобразить анимацию в кадре просмотра (вы можете предположить, что размер рамки просмотра соответствует размеру анимации).
Допускается согласованный интервал времени, отличный от одной секунды (т. Е. 999 миллисекунд, чтобы сэкономить байт, или две секунды по какой-то причине), но он должен быть таким, чтобы газонокосилка все еще двигалась естественным образом.
Если возможно, предоставьте визуальную информацию (TIO, Snippet, GIF и т. Д.)
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Ответы:
JavaScript (ES6 / Node.js),
664525523 символаУнифицировано с комментариями:
примечание: я полагаю, что я должен получить пакет 'sleep' и переписать с setTimeout, чтобы он был независим от nodejs
источник