fix: module 08 review round 1 (Q4 board, OPEN reading, citations)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
bd80cefbef
commit
e339788e64
@@ -43,7 +43,7 @@ Write your answers down before you open the discussion, for example in `notes/08
|
||||
1. Baba, three PUSH rocks and a STOP wall, in a row, with one empty tile beyond the wall. Baba moves toward the wall. What moves?
|
||||
2. Your first idea for code: walk along the chain from Baba, moving each object as you reach it. What goes wrong in question 1?
|
||||
3. Baba pushes a `PUSH`+`OPEN` key into a `STOP`+`SHUT` door. What is left on the board, and where is Baba?
|
||||
4. Same as 3, but a second door, `STOP` and not `SHUT`, sits on the same tile as the first. What happens?
|
||||
4. Same as 3, but `WALL IS STOP` is also written, and a wall sits on the door's tile. What happens?
|
||||
5. Baba pushes the word `ROCK` into place so that `ROCK IS PUSH` reads down a column. Is a rock pushable during this move? After it?
|
||||
6. A rock sits on the right edge of the level, and Baba pushes it right. What should happen? Do the sources say?
|
||||
7. `BABA IS YOU` and `BABA IS PUSH`, and two Babas side by side. You press right. What do you want to happen, and what does your engine do?
|
||||
@@ -56,7 +56,7 @@ Write your answers down before you open the discussion, for example in `notes/08
|
||||
|
||||
3. Baba alone, on the key's former tile. Key and door are destroyed during the move. That Baba lands on the key's former tile, and not on the door's, is the course's inference (see Observe).
|
||||
|
||||
4. Nothing moves and nothing is destroyed. The second door blocks the key, and "this will also prevent the destruction from OPEN SHUT since no movement actually occurs." Your plan has to be able to find the unlock, then discover the move fails anyway, and forget the unlock.
|
||||
4. In the course: nothing moves and nothing is destroyed. The [OPEN](https://babaiswiki.fandom.com/wiki/OPEN) page says that after an unlock "the normal obstruction of movement by STOP PUSH PULL does not apply", and also that "other obstructing objects may still prevent the movement, and this will also prevent the destruction from OPEN SHUT since no movement actually occurs." The course reads "other obstructing objects" as any object on the tile other than the unlocked partner: the wall still blocks the key. That is the course's reading; the page doesn't settle whether a separate STOP object counts. Under that reading, a planner finds the unlock, then discovers the move fails anyway, and forgets the unlock. No Module 8 test sets up this board; the reference handles it by restoring the plan, and you can check yours by hand.
|
||||
|
||||
5. Not during: every check in this move uses the rules in force when it started. After: the rules are reparsed once, when movement ends. The [Order of Operations](https://babaiswiki.fandom.com/wiki/Order_of_Operations) lists a "(rule parsing)" right after `domovement()`.
|
||||
|
||||
@@ -186,7 +186,7 @@ Run `cargo test` or `npm test`. The Module 8 tests fail to compile (Rust) or fai
|
||||
Make the five tests pass, and keep Modules 1–7 green. Where code goes:
|
||||
|
||||
- **Plan, then commit.** A move has two phases. The first reads the board and builds a plan: which objects step one tile, which are destroyed. It changes nothing. The second applies the plan. If the plan fails, there is nothing to undo.
|
||||
- **A failed branch leaves no trace.** While planning, an attempt can fail halfway: question 4's key finds its unlock, and then the second door blocks it. Whatever that attempt added to the plan (the destruction of key and door) must go. Decide how your planner forgets.
|
||||
- **A failed branch leaves no trace.** While planning, an attempt can fail halfway: question 4's key finds its unlock, and then the wall blocks it. In the course's reading, whatever that attempt added to the plan (the destruction of key and door) goes too. Decide how your planner forgets.
|
||||
- **The edge blocks.** A step that would leave the level fails, like a step into STOP.
|
||||
- **Rules from before the move.** Every question asked while planning ("is this rock PUSH?") uses the rules in force when the move began. Reparse once, after all movement.
|
||||
- **Several YOU objects.** Plan and commit them one at a time. Pick an order, and make sure a YOU object that is also PUSH doesn't move twice.
|
||||
@@ -258,8 +258,9 @@ Decisions in the reference that the tests don't force:
|
||||
> - **The edge of the level.** No source read says in so many words that the edge blocks ordinary movement. The [Rule](https://babaiswiki.fandom.com/wiki/Rule) page lists `LEVEL IS STOP` among the base rules, and the [PULL](https://babaiswiki.fandom.com/wiki/PULL) page says "If LEVEL IS PULL, the overall level can be pulled at the border", which suggests the border is where the level object's STOP applies; that is an inference. The [Esolangs wiki](https://esolangs.org/wiki/Baba_Is_You) says "If an object is to leave the bounds of the level, it is immediately destroyed", about objects that leave by other means. The course has no level object: the edge is a wall in the engine.
|
||||
> - **Several YOU objects.** The sources read don't say in which order they move. Furthest-ahead first is the course's choice.
|
||||
> - **Float levels.** OPEN/SHUT needs both objects on the same float level ("a same-float SHUT object", [OPEN](https://babaiswiki.fandom.com/wiki/OPEN)); PUSH and STOP ignore it ("FLOAT does not allow bypassing STOP", [STOP](https://babaiswiki.fandom.com/wiki/STOP)). The course has no `FLOAT` yet, so every object is on the same level.
|
||||
> - **The rest of the movement checks.** The game also checks WEAK, EAT, SWAP and PULL on every step, and SAFE and HAS change what OPEN/SHUT destroys and leaves behind ([OPEN](https://babaiswiki.fandom.com/wiki/OPEN)). The course has none of these words.
|
||||
> - **Only YOU moves.** The game's `domovement()` moves objects in stages: YOU first, then MOVE, AUTO and CHILL, then NUDGE, FEAR and SHIFT ([Order of Operations](https://babaiswiki.fandom.com/wiki/Order_of_Operations)). The course has YOU only, and reparses after every move, where the game reparses only when text has moved.
|
||||
> - **The rest of the movement checks.** The game also checks WEAK, EAT, SWAP and PULL on every step ([Order of Operations](https://babaiswiki.fandom.com/wiki/Order_of_Operations)), and SAFE and HAS change what OPEN/SHUT destroys and leaves behind ([OPEN](https://babaiswiki.fandom.com/wiki/OPEN)). The course has none of these words.
|
||||
> - **An object on the tile next to an unlock.** When OPEN/SHUT destroys a mover and its partner, the reference still runs the other checks for that step: a separate STOP object on the tile blocks (and undoes the unlock), and a separate PUSH object there is pushed. That is the course's reading of the OPEN page's "other obstructing objects may still prevent the movement"; the page doesn't say how a separate STOP or PUSH object is treated.
|
||||
> - **Only YOU moves.** The game's `domovement()` moves objects in stages: YOU first, then MOVE, AUTO and CHILL, then NUDGE, FEAR and SHIFT ([Order of Operations](https://babaiswiki.fandom.com/wiki/Order_of_Operations)). The course has YOU only, and reparses after every move, where the game reparses only when text has changed: "Rules parse when any parsable object changes position or is destroyed, or an object is transformed to text" ([Rule](https://babaiswiki.fandom.com/wiki/Rule)).
|
||||
|
||||
## Name it
|
||||
|
||||
@@ -392,4 +393,4 @@ If the check fails, fix your engine (a normal commit, outside the drop), then re
|
||||
- The Baba Is You Wiki's [PUSH](https://babaiswiki.fandom.com/wiki/PUSH), [STOP](https://babaiswiki.fandom.com/wiki/STOP), [OPEN](https://babaiswiki.fandom.com/wiki/OPEN) and [SHUT](https://babaiswiki.fandom.com/wiki/SHUT) pages: every rule in this module and the ones it leaves out (SAFE, HAS, float levels). Then [PULL](https://babaiswiki.fandom.com/wiki/PULL) for the drop.
|
||||
- The [Esolangs wiki's Baba Is You page](https://esolangs.org/wiki/Baba_Is_You): the game read as a cellular automaton, with a table of words. Its PUSH, STOP and OPEN/SHUT entries are the shortest statement of this module.
|
||||
- The Baba Is You Wiki's [Order of Operations](https://babaiswiki.fandom.com/wiki/Order_of_Operations): the movement checks in order, and where movement sits in the turn you build in Module 9.
|
||||
- baba-is-auto, `Game::CanMove`, `Game::ProcessMove` and `Game::ProcessPush` in [`Sources/baba-is-auto/Games/Game.cpp`](https://github.com/utilForever/baba-is-auto/blob/2305a3d/Sources/baba-is-auto/Games/Game.cpp) (from line 1756): validate, then commit, in C++. It is an example, **not an authority** on the game: it hard-codes text as pushable and its float handling is partial ([`rule-language.md`](https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md)).
|
||||
- baba-is-auto, `Game::CanMove`, `Game::ProcessMove` and `Game::ProcessPush` in [`Sources/baba-is-auto/Games/Game.cpp`](https://github.com/utilForever/baba-is-auto/blob/2305a3d/Sources/baba-is-auto/Games/Game.cpp) (from line 1756): validate, then commit, in C++. It is an example, **not an authority** on the game: it hard-codes text as pushable and its float handling is partial ([`rule-language.md`](https://github.com/utilForever/baba-is-auto/blob/2305a3d/Documents/rule-language.md)).
|
||||
|
||||
@@ -195,6 +195,7 @@ Inference status: this follows directly from the documented order. The wiki give
|
||||
- Anything the key HAS spawns on the key's former tile.
|
||||
- Only one SHUT is destroyed per OPEN in a movement check.
|
||||
- The interaction fails if the two are on different float levels, if both are SAFE, or if another obstructing object is on the door tile.
|
||||
- **Reading, not stated (added 2026-10-29, Module 8).** After an unlock, "the normal obstruction of movement by STOP PUSH PULL does not apply", yet "other obstructing objects may still prevent the movement". The OPEN page doesn't say whether a *separate* STOP (or PUSH) object on the door tile still obstructs. The course reads it as yes: only the unlocked partner stops obstructing, and any other STOP object blocks the move and cancels the destruction.
|
||||
|
||||
- **The edge of the level (added 2026-10-29, for Module 8).** No source read says in so many words that the edge blocks ordinary movement.
|
||||
- The Rule page lists LEVEL IS STOP among the base rules, and the PULL page says "If LEVEL IS PULL, the overall level can be pulled at the border". Together they suggest the border is where the LEVEL object's base STOP applies. This is an inference.
|
||||
|
||||
Reference in New Issue
Block a user