Push every box onto a goal. Reading a standard level format, sets for walls and goals, the pushing rules, levels, and undo with a history of snapshots.
What we are doing
Sokoban: a warehouse worker pushes boxes onto goals. Its levels have been shared for decades in a tiny text format,
one character per tile. We write the first level that way.
```js
// The classic Sokoban text format: # wall, . goal, $ box, * box on a goal, @ player, + player on a goal.
const LEVELS = [
[
'#####',
'#@$.#',
'#####',
],
]
```
What it means
The comment explains the six characters.
A level is an array of strings, one string per row: here a corridor with the player, a box and a goal.
LEVELS is an array of levels (so an array of arrays). For now it has one.
Your turn
Write the comment and the list under the three comment lines, then press Run.