Thanks for the tip. I managed to solve everything, including the bonus. It's a really nice game. I have one question: was the entire game supposed to be solved by hand? I used python to solve all the levels (it was a fun challenging problem; thank you so much for this experience).
It’s cool that you used your programming skills to aid you! I wonder how much code you had to write to solve it, which libraries were used, etc.
Well, it is possible to solve the puzzles by hand. A “terminal” panel gets upgraded as the story levels are cleared. It gives the player hints about the level that should help in manual hacking. It might require a text document for some levels with ambiguity (there are only a few) so you can track multiple branches.
The game was created for a game jam (although a long and chill-paced one), so the game lacks the polish. The difficulty curve is also all over the place.
The first couple of levels I solved by hand, but after that I thought about automating it :).
The code is plain python + a library to check if a word is valid english word (there are around 1000 lines of code; half of the code are levels definitions). A level is defined by the chains of possible transformations from input to output (I either define them by hand or I can define the entire graph of nodes and have an algorithm generate all the possible transformations chains; there are some corner cases: 5b+ component 1 and 6b+ component 1: these levels have variable length loops in them; for these I just limited my generator to a max number of loops and it did the job). For example, 1b component 3 is defined as 2 chains with 1 transformation each: the first chain has decrement, the second chain has increment.
Each transformation represents a function with string in, string out. Each transformation has an associated inverse transformation (inverse of increment is decrement, etc). Because not all transformations are bijective functions, the inverse transformation produces a list of possible inputs based on the output word. From here, given the output word, I go through the chain (backwards direction) and apply each inverse transformation. This results in multiple possible inputs and I then filter only the english words.