TIS-100 | Programming puzzle game from SpaceChem dev & GAF's 77th Best GOTY 2015

I guess. But are classes actually teaching Assembly over something like C or Java or more "modern" languages?

I've learnt 3 assembly languages over the course of my education: PIC assembly, x86 and PowerPC. I've also touched on 68k in my own free time. It's still important to learn these things now.
 
I completely misunderstood what I was doing with the pattern detector for several hours. Time well spent.

nOOYJ1O.png


Go my signal comparator, go!
 
Anyone trying to get the HIGHEST number of cycles on the first "Self Test Diagnostic" challenge? There was a steam achievement to get more than 100,000 cycles which was pretty easy but got me thinking how high I could go...
kL2CZuh.png

That's as far as I went. Don't think I'd try to raise it more because it took most of a weekend to wait for that result.

Popped to steam to check prices and found I'd already bought it (was it in a sale last year?).
Looks like it was the same price during the autumn sale.
 
Write your labels and codes on the same line and you won't have to use JRO.
Hum ... IIRC I didn't do this because I used too long labels, but that might be a luxury not afforded in the cycle wars (plus the nodes are short enough that it shouldn't be an issue).

I'll add some people in the thread tonight and hack out some improvements this weekend. I'm expecting to be completely rolled, though, hah. My id is toppform if anyone wants to add me.
 
Geez, I thought my 232 on Comparator was going to hold up better than that.

I have no idea how you guys actually get that low... Any hint maybe? (Might look on my solution posted above)
Edit: I initially had more obvious solutions but this got me in the 300s
Edit2: thinking about it ... I have an idea.
 
I have no idea how you guys actually get that low... Any hint maybe? (Might look on my solution posted above)
Edit: I initially had more obvious solutions but this got me in the 300s
Edit2: thinking about it ... I have an idea.

The main thing that jumps out at me about your solution is:
your input node takes 6 cycles to handle an L or E input and 5 to handle a G while your output nodes take 6 to handle a G or E and 5 to handle an L. Once you get down to the ~240 range the solution's speed can be pretty sensitive to which kind(s) of input you can handle in 5 cycles and whether you're consistent in that handling throughout the process. Note that your "JLZ 3" is not doing much work.
 
I have no idea how you guys actually get that low... Any hint maybe? (Might look on my solution posted above)
Edit: I initially had more obvious solutions but this got me in the 300s
Edit2: thinking about it ... I have an idea.

Your solution is pretty similar to mine if that helps lol.

One thing I can say in general is that if you're comparing an input to be less than zero and equal to zero, then you don't need to check if it'll be greater than zero.

edit: There's probably a better way to do it though... Reddit high score for Signal Comparator is 195/6/71
 
Spent like 3 hours on Signal Comparator and cant get below the simplest, standard solution (278 cycles), but was far from it. I tried like 5 different approaches. I'm giving up on this one and i'll spoil myself with some posted solution here. I think i'm missing something obvious, we'll see in a second.

Ps. This game is killing me. I spent 8 hours on PC at work, i came home and after like 30minutes sit down to TIS and now its 11pm ;p
 
I noticed everyone else was faster than me on that but everything I tried just made it slower. ¯\_(ツ)_/¯

Yeah, exactly the same.

I looked up the solution from ekim and I didnt know You could do for example JRO LEFT, without going through ACC. This changes everything.
 
Your solution is pretty similar to mine if that helps lol.

One thing I can say in general is that if you're comparing an input to be less than zero and equal to zero, then you don't need to check if it'll be greater than zero.

Sometimes I could punch myself. Makes sense. This will probably just save me a few cycles tho. I have the feeling I could optimize the equal zero out more.

71 instructions for the high score on Reddit? That's sounds fishy.
 
I subconsciously realized but just consciously acknowledged that leaderboards for each challenge take best per program.

As in, cycle count, node count, and instruction count aren't necessarily all the same program.

I feel like this is something I KNEW, but every time I was looking at leaderboards it wasn't clicking until just now. I feel WAY better about some of my results now.
 
do all instructions take 1 cycle? Something isn't quite right.
Why does a MOV UP, ACC \ MOV ACC, DOWN take 50% longer, and not 100% longer, than MOV UP, DOWN?

e: okay... starting to get the hang of this. Can't wait to see the record slaughtered when more people accept the friend request @_@
3875efd72a.png
 
RE: Signal Comparator

Take the standard solution and change the JEZ to JNZ for the node where you are testing for 0. This will cut a few cycles since most numbers are not zero and you can skip reading the JMP command on the != 0 cases.

I have no idea how people are getting 230 or lower though. Tried to revise my code for an hour, and all I did was cut 266 to 265. On to something else!
 
do all instructions take 1 cycle? Something isn't quite right.
Why does a MOV UP, ACC \ MOV ACC, DOWN take 50% longer, and not 100% longer, than MOV UP, DOWN?

Most instructions take one cycle. Instructions that move something to L/R/U/D take at least two. The first cycle pushes the source to the destination port and then the instruction completes simultaneously with the receiving instruction in the other node.
 
Most instructions take one cycle. Instructions that move something to L/R/U/D take at least two. The first cycle pushes the source to the destination port and then the instruction completes simultaneously with the receiving instruction in the other node.

Ah, so all instructions which push a value to I/O are blocking until the value is consumed?
That makes sense.

1142fa009d.jpg

Hey, this is holding. I may actually be able to sleep.
I think i can get it down some more, though...

Wait, you can optimize the differential converter? How the hell did durante do that.
No, really.
160 means no node that goes over 4C, which means no read + 2x write, which means no 2x write. Ever. How do you split data? I parallelized the split, but that has just gotten it to 180, and even if i could somehow thread to x3 that's be 170, not 160... argh.
 
Ah, so all instructions which push a value to I/O are blocking until the value is consumed?
That makes sense.

1142fa009d.jpg

Hey, this is holding. I may actually be able to sleep.
I think i can get it down some more, though...

Wait, you can optimize the differential converter? How the hell did durante do that.
No, really.
160 means no node that goes over 4C, which means no read + 2x write, which means no 2x write. Ever. How do you split data? I parallelized the split, but that has just gotten it to 180, and even if i could somehow thread to x3 that's be 170, not 160... argh.

frdICWO.png


There's a lot you can do with this one.
 
This game is great for teaching all kinds of concepts related to parallelization.
Often I made a much more involved, parallel version of something, only to have it end up slower due to synchronization overhead. Just like real life!


In unrelated news, I built an 18 instruction solution for "Histogram Viewer". And I see that Cyan got a lot closer to my instruction count in the second image test pattern.
 
This'll run on a toaster, right? Wondering whether to drag out my crappy Windows tablet to be able to play this on the sofa
 
Got my Differential Converter Cycle count down to 165 by using two threads. I'm happy now! :)

Here my solution if anyone is interested.
http://abload.de/img/unbenanntksszr.png

No idea how Gotchaye got to 127 though

edit: and down to 164. lol
edit: 163 - both outputs are now fed the same time. 127 seems impossible?!
 
I spent 2 hours making a fast histogram viewer to go with my tiny one. It's ... not tiny.

histogramckb9g.png


I have an idea of how to build a faster one yet, but the implementation effort is a deterrent.
 
Often I made a much more involved, parallel version of something, only to have it end up slower due to synchronization overhead. Just like real life!

This is basically 90% of my efforts to "optimise" solutions in this game. Completely refactor the code the spread the load across as many nodes as possible only to end up a few hundred cycles slower.
 
This is basically 90% of my efforts to "optimise" solutions in this game. Completely refactor the code the spread the load across as many nodes as possible only to end up a few hundred cycles slower.

I'm starting to find that what needs optimization is usually I/O buffers <.<
 
This is basically 90% of my efforts to "optimise" solutions in this game. Completely refactor the code the spread the load across as many nodes as possible only to end up a few hundred cycles slower.

Thats my world,
- hey lets try rework it to use more nods and start it from completely different side
30 minutes later result is 150-200 cycles,
- lets optimize it more
1.5 hour later result - is 100 cycles slower from the simplest solution
WTF?!

---
I spent 2 hours making a fast histogram viewer to go with my tiny one. It's ... not tiny.

histogramckb9g.png


I have an idea of how to build a faster one yet, but the implementation effort is a deterrent.
Ok, now i'm in blank how exactly leaderboards are working. I should be there with 3516 cycles, but i'm not ;p

--
Ps. I need to stop optimizing early levels and do ones i have not done yet ;p
 
I'm starting to find that what needs optimization is usually I/O buffers <.<

Yeah, once you understand the timings of reads and writes it seems to become a matter of making sure your vital nodes are never waiting on I/O and making minimal writes. Poorly parallelized code (in my experience) generally gets stuck on nodes that make too many writes. One of my solutions is currently stuck on a node with nothing more than:

Code:
MOV UP, ACC
MOV ACC, LEFT
MOV ACC, DOWN

No I/O waits, but two writes means five cycles to execute, which turns an seemingly simple node into the program's main bottleneck.
 
Yeah, once you understand the timings of reads and writes it seems to become a matter of making sure your vital nodes are never waiting on I/O and making minimal writes. Poorly parallelized code (in my experience) generally gets stuck on nodes that make too many writes. One of my solutions is currently stuck on a node with nothing more than:

Code:
MOV UP, ACC
MOV ACC, LEFT
MOV ACC, DOWN

No I/O waits, but two writes means five cycles to execute, which turns an seemingly simple node into the program's main bottleneck.

Is that Signal Multiplexer? He. I had run into that bottleneck =\
 
So count me in as another who's been swept up by TIS-100. Although I was only currious after some chat about it in the Steam thread but about 3 hours after picking it up on Steam (and at a time my lower back was about to give way) I (un)fortunately noticed it got released on iOS yesterday. So that's the last 4 hours spent prodding the grey matter led flat out on my back in agony then. Still I still getting the smug sense of satisfaction when everything comes together even if I am 8 quid out of pocket buying it twice!
 
So count me in as another who's been swept up by TIS-100. Although I was only currious after some chat about it in the Steam thread but about 3 hours after picking it up on Steam (and at a time my lower back was about to give way) I (un)fortunately noticed it got released on iOS yesterday. So that's the last 4 hours spent prodding the grey matter led flat out on my back in agony then. Still I still getting the smug sense of satisfaction when everything comes together even if I am 8 quid out of pocket buying it twice!
Its not wasted money though. You can still use Steam version to check leaderboards.
I personally think that this game loses a lot of 'playability and charm' without leaderboards.

I really hope that game will do reasonably well for Zachtronics and they will make sequel or at least spiritual successor. For example, better UI would be a starter. I'm really annoyed by a fact that You cant save and swap program versions on the fly and there are only 3 slots. Proper Steam Workshop integration would also do wonders to this game, as better leaderboards and for more aspects of code. Better debugging etc :)
 
I just built a solution to "Signal Pattern Detector" which actually uses every single available node, in an effort to break below the 3 cycles / output barrier.

After I finally got it to work It actually runs at 5 cycles / output :/

On the other hand, I'm pretty happy with my new & improved exposure mask viewer:
exposure62lz8.png


I really do like the image stuff best.
 
So count me in as another who's been swept up by TIS-100. Although I was only currious after some chat about it in the Steam thread but about 3 hours after picking it up on Steam (and at a time my lower back was about to give way) I (un)fortunately noticed it got released on iOS yesterday. So that's the last 4 hours spent prodding the grey matter led flat out on my back in agony then. Still I still getting the smug sense of satisfaction when everything comes together even if I am 8 quid out of pocket buying it twice!
Wait, what? TIS released on mobile? Got a link?
How the hell did I miss that?
 
Its not wasted money though. You can still use Steam version to check leaderboards.
I personally think that this game loses a lot of 'playability and charm' without leaderboards.

I really hope that game will do reasonably well for Zachtronics and they will make sequel or at least spiritual successor. For example, better UI would be a starter. I'm really annoyed by a fact that You cant save and swap program versions on the fly and there are only 3 slots. Proper Steam Workshop integration would also do wonders to this game, as better leaderboards and for more aspects of code. Better debugging etc :)

Oh for sure and despite being well off the pace it does certainly give me some food for thought about where I'm being inefficient and where I need to improve on.

Wait, what? TIS released on mobile? Got a link?
How the hell did I miss that?

Well the release date was yesterday :p

https://itunes.apple.com/us/app/tis-100p/id1070879899?mt=8
 
So count me in as another who's been swept up by TIS-100. Although I was only currious after some chat about it in the Steam thread but about 3 hours after picking it up on Steam (and at a time my lower back was about to give way) I (un)fortunately noticed it got released on iOS yesterday. So that's the last 4 hours spent prodding the grey matter led flat out on my back in agony then. Still I still getting the smug sense of satisfaction when everything comes together even if I am 8 quid out of pocket buying it twice!

Oh on iPad? Screw it, double dipping.
 
Top Bottom