TIS-100

TIS-100

View Stats:
semitones Dec 25, 2019 @ 7:41pm
Puzzle-Solving Tips?
Hi TIS-100 programming enthusiasts,

I wasn't sure about this game and the manual at first, but I'm really getting into it! It does have a steep learning curve though, and while I could figure out the first row of puzzles, I'm having trouble with Signal Multiplexer and Sequence Generator.

It was easier to understand the logic of the earlier puzzles: how to test values and pass them to outputs. But I'm at a loss for figuring out things like how to sync the timing of many nodes at once, and involve multiple nodes in a larger loop, like what I need to figure out for Sequence Generator.

I'm wondering what puzzle-solving strategies you all use to make sense of these problems. I know I could look at solutions for ideas, but I'd still like to figure this out on my own, with a more general guide for how to think about this game.

I did get Signal Multiplexer in the end, but my solution is pretty slow compared to the community, so I think there's something I don't understand.

Signal Multiplexer



With Sequence Generator, I'm struggling to conceptualize how to synchronize the nodes, and transport the values where they need to go, and count to 3 so I know when to put a zero in at the end. It is a pretty big jump forward after signal multiplexer.

Sequence Generator logic so far


Thanks! For any hints and ideas that help me figure it out and make it farther in the game!
Last edited by semitones; Dec 25, 2019 @ 7:47pm
< >
Showing 1-3 of 3 comments
phillip_lynx Dec 29, 2020 @ 7:18am 
I will give it a try. Have not played this for a long time (but have to do it again :) ).

Signal Multiplexer : Maybe :)

In the first row, give S left and rigth and ...
... decide in A and B if you give A or Zero (B or Zero) down.

In the second row add The outcome of row 1 (the A and B part) in the middle node (Will be A+B or Zero+B or A+Zero).

Then pass the outcome to the exit.

Sequence Generator : I have to think about that (or peek in my Solution ;) )

[edit] Sorry, can not look at my Solutions. Have deleted them last year [/edit]

[edit2]
So, your start is not bad.
My Tip is :

The node in the middle row under the IN.B gets 3 inputs (Left, Right and up).
And the Up Input decides, which (Left or Right) is first put to down. And do not forget to send a Zero :).
[/edit2]

[edit3]
Got all three counts even lower when i pushed the decider in the up slot and the B number after that in the up slot.
[/edit3]
Last edited by phillip_lynx; Dec 29, 2020 @ 10:35am
phillip_lynx Dec 29, 2020 @ 10:22am 
I do not know your stats, but with the idea from me for the Signal Multiplexer I get to
203 Cycles / 7 Nodes / 21 Instr
Sio Jan 3, 2021 @ 1:29am 
EDIT: apologies for the formatting. Not sure how to get inline monospaced fonts in the steam forums.

In Signal Multiplexer:
- you can reduce node usage by just moving all three of your nodes up top, then having a center
mov up down
cascade
- in your center node you can omit
jgz g
as you'll just fall through both the
jez
and
jlz
to there.
- you can move your
mov left nil
and
mov right nil
lines to your center node

In Sequence Generator: you can have one node do the comparison and decide in which order to output the two numbers. This is especially easy if your input nodes do something like this:
mov up acc mov acc down mov acc down

This way you don't have to save the numbers you're working on since you just get them twice anyway, so you can use the first inputs to do the comparison, and the second ones can be used for output.

As for synchronizing nodes: all communication blocks until the node can get or send what it's communicating. So if you
mov reg left
the node will stall until the node left of it actually does a
mov left bla
or
jro left
or something to that effect.

Counting: will often involve counting down instead of up, and saving your current value to bak so you can do stuff with acc, then swp at the end of the loop, decrement, save, jump. If you know C or a similar language, you're trying to replicate the following:
for ( int i = n; i != 0; i-- )
.
Also since you're early in: having a node that just does moves values back to where it got them from is really useful when you're trying to for example do something like
acc - bak
because you just move one of them to that node,
swp
and then do a
sub direction
.
General strategy: I first try to assign each node a job that needs done, like "this compares two values and passes an offset down for another node to jump to", or "keep track of length", then go from there.
Last edited by Sio; Jan 3, 2021 @ 1:30am
< >
Showing 1-3 of 3 comments
Per page: 1530 50