Given a level from a simple platform game, your task is to make a program or function to determine if a level is winnable. Platform game levels are 4 characters tall and any number of characters wide. There is exactly one platform for each horizontal space in a level:
======= =
== = =
=== =====
= ==== ===
The game consists of jumps. Jumps start from the space above the platform which is being jumped from, and end in the space above the platform which is being jumped to (these can be above the 4 platform height levels). To complete a jump, it must be possible to move from the start point to the end point in four or less (including the start/end points) up, down, left, and right moves which do not pass through a platform. Here are some examples (marked with A for start platform and B for end platform):
>>>
^ B
=A
=
>>>>
=A B=
>>
^B
A
Horizontal moves along a platform are just jumps which only move in one direction:
>>
==AB===
The player would start on the leftmost platform, and wins by standing on the rightmost one (marked with v
s):
v === v
=== ==
Test cases
Winnable:
=== ==
= =====
=
==
= ==
=== ====
==== =
===
=
===
== == =
=
= == == =
Unwinnable:
======
======
======= =
= =
=
=
=
=
= =
== == ====
Rules
Your program should output one distinct value if a level is winnable, and a different one if it isn't. It can take input in any reasonable form, such as an ASCII art with any two distinct characters, a matrix, or a 2d array.
Code golf, so shortest answer per language wins.