A lawn is defined as a rectangular field with of one character surrounded by two layers of visible whitespace. This means two lines above and twos lines below, and a two space padding on the left (the right has visible whitespace, so you do not need to include it).
|||||
|||||
|||||
A mowed lawn is a similar structure, except that the main character is a shortened version of the first character.
.....
.....
.....
A mower is two different characters, different than the two lawn characters. Here is an example, with =
as the back of the mower and o
as the front:
=o
A mower will move around the lawn vertically, and can also rotate on its front. The above mower may look like any of the below during some point in the animation:
=o
o=
o
=
=
o
The mower can start on any set of the below positions on the below lawn. Mowers with o
would drive around the lawn clockwise. Mowers with 0
would drive around the lawn counterclockwise.
= =
0 o
=o|||||0=
|||||
=0|||||o=
o 0
= =
The animation starts at second 0. Each second, the mower moves forward one space, and cut the grass on its front. When the mower vacates a spot, it appears cut. When the mower front reaches the last uncut item on a line (and there is still uncut grass), the mower back rotates once so as to continue the current mow (staying in clockwise/counterclockwise based on original position) When the mower is finished, it continues straight (mowing already cut grass) until it is completely off the lawn.
With a mower starting in the left top, this shows the basic progression for a 5x3 lawn:
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.... =.... ..... ..... ..... ..... ..... ..... .....
=
Input
Your input will be the dimensions of the lawn (two integers).
Output
Print the lawn and the mower in your chosen position. You may chose the four characters for grass, cut grass, mower front, and mower back. You only to need enough whitespace to show the current second's content to specs, but extra whitespace is completely allowed, as long as it looks the same.
Since this is an animation, you may either clear the output each second, or print enough newlines to appear to animate in the viewing frame (you may assume the viewing frame is the size needed to appear to animate).
A consistent time interval other than one second is allowed (i.e. 999 millis to save a byte, or two seconds for some reason), but it should be such that the lawn mower still appears to be moving naturally.
If possible, provide a visual (TIO, Snippet, GIF, etc.)
This is code-golf, so shortest answer in bytes wins.