||:@include: lib/rpn.nv

|:rewind: yes? :playfield: _ | :behind: _
	:: increment playfield size

| :rewind: yes? :playfield: (pacman dot) |
    :behind: _
	:: increment playfield size
	:ahead: pacman
	:: increment playfield size

|:rewind: yes? :playfield: (pacman wall) | :status: done
	:ahead: (wall pacman)
	:: increment playfield size
	:: increment playfield size

|:rewind: yes? :playfield: pacman | :ahead: pacman
	:: increment playfield size
|:rewind: yes? :playfield: dot | :ahead: dot
	:: increment playfield size
|:rewind: yes? :playfield: ghost | :ahead: ghost
	:: increment playfield size
|:rewind: yes :playfield: wall | :ahead: wall
	:: increment playfield size

|:: increment playfield size :@rpn data: $id |
	:playfield size: $id
|:: increment playfield size? :playfield size: $id |
	:@rpn: ($id 1 +)

|:: :ahead: wall? :playfield size: $limit |
	:layout: ahead
	:full run: $limit

| :layout: ahead :ahead: pacman |	:playfield: pacman
	:layout: behind
	:: decrement playfield size
| :layout: ahead? :ahead: $a | :playfield: $a
	:: decrement playfield size
| :layout: behind? :behind: $b | :playfield: $b
	:: decrement playfield size

|:full run: $x |:playfield size: $x
|:: decrement playfield size :@rpn data: $id |
	:playfield size: $id
|:: decrement playfield size? :playfield size: $id |
	:@rpn: ($id 1 -)

| :playfield size: 0? :layout: $x :status: done | :rewind: no 
| :playfield size: 0? :layout: $x | :rewind: yes 

|| :playfield: (_ _ pacman dot dot dot dot dot wall) 
|| :playfield size: 0
|| :rewind: yes