Trawnik jest zdefiniowany jako prostokątne pole z jednym znakiem otoczone dwiema warstwami widocznych białych znaków. Oznacza to dwie linie powyżej i dwie linie poniżej oraz dwie spacje po lewej stronie (po prawej widoczna biała spacja, więc nie trzeba jej uwzględniać).
|||||
|||||
|||||
Koszony trawnik ma podobną strukturę, tyle że główny bohater jest skróconą wersją pierwszego znaku.
.....
.....
.....
Kosiarka to dwie różne postacie, inne niż dwie postacie trawnika. Oto przykład, z =
tyłu kosiarki i o
przodu:
=o
Kosiarka porusza się wokół trawnika pionowo, a także może obracać się z przodu. Powyższa kosiarka może wyglądać jak niżej w pewnym momencie animacji:
=o
o=
o
=
=
o
Kosiarka może uruchomić się w dowolnym zestawie niżej położonych pozycji na trawniku poniżej. Kosiarki zo
po trawniku zgodnie z ruchem wskazówek zegara. Kosiarki poruszałyby się 0
po trawniku w kierunku przeciwnym do ruchu wskazówek zegara.
= =
0 o
=o|||||0=
|||||
=0|||||o=
o 0
= =
Animacja rozpoczyna się od sekundy 0. Co sekundę kosiarka przesuwa się o jedno pole do przodu i kosi trawę z przodu. Gdy kosiarka opuści miejsce, wydaje się być odcięte. Kiedy przód kosiarki dotrze do ostatniego nieciętego przedmiotu na linii (i nadal jest nieoszlifowana trawa), kosiarka obraca się raz, aby kontynuować bieżącą kosiarkę (pozostając w kierunku zgodnym z ruchem wskazówek zegara / przeciwnie do ruchu wskazówek zegara na podstawie pierwotnej pozycji) Po zakończeniu kosiarki, kontynuuje jazdę prosto (koszenie już skoszonej trawy), aż całkowicie wyskoczy z trawnika.
W przypadku kosiarki rozpoczynającej się w lewym górnym rogu, pokazuje to podstawowy postęp dla trawnika 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.... =.... ..... ..... ..... ..... ..... ..... .....
=
Wejście
Twój wkład to wymiary trawnika (dwie liczby całkowite).
Wynik
Wydrukuj trawnik i kosiarkę w wybranej pozycji. Możesz wybrać cztery postacie na trawę, ścinać trawę, przód kosiarki i tył kosiarki. Potrzebujesz tylko wystarczającej ilości białych znaków, aby wyświetlić specyfikację bieżącej sekundy, ale dodatkowe białe znaki są całkowicie dozwolone, pod warunkiem, że wyglądają tak samo.
Ponieważ jest to animacja , możesz albo wyczyścić wyjście co sekundę, albo wydrukować wystarczającą liczbę znaków nowej linii, aby pojawiały się w animowanej ramce (możesz założyć, że ramka ma rozmiar potrzebny do animacji).
Dopuszczalny jest stały odstęp czasu inny niż jedna sekunda (tj. 999 milisów, aby zaoszczędzić bajt lub dwie sekundy z jakiegoś powodu), ale powinien być taki, aby kosiarka nadal poruszała się naturalnie.
Jeśli to możliwe, podaj grafikę (TIO, Snippet, GIF itp.)
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Odpowiedzi:
JavaScript (ES6 / Node.js),
664525523 znakówUnminified with comments:
Uwaga: Przypuszczam, że powinienem pobrać pakiet „sleep” i napisać ponownie z setTimeout, aby być niezależnym od nodejs
źródło