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

Yeah, the image ones I really need to look at again. Those and the pattern detector were where I really couldn't understand how to improve on my time, and I got the former now (until someone shows up with sub-125, at which point I'm well and truly out of options). By the way, Gotchaye is even faster than you at the images ;)

But can you (or anyone) build an 11 instruction (or less of course) image test pattern 2 solution?
(The closest on my friend list is at 14)

I am at 4% idle on the checkerboard image by the end of the run. So there is a small amount of improvement to be made. The problem (it's all coming flooding back to me) is that at this point optimization is about very fine timing issues to keep the output fed, and I can no longer just optimize greedily. Basically it's become hard :(

Here's my current attempt.
 
Edit: You really should at the very least spoiler tag that. Or better link it. Personally I don't want to see anyone's solution :P
(Just for the record, I posted this below before seeing the above)

I'm pleased to see even after friending the great Durante, I'm still top on the first two image puzzles. I spent a long time optimizing those last year.

Physics/CS doctorate here by the way.

I'm Hexanol on steam if anyone wants to add me.
Matched your cycle count exactly in both image programs now.

I think reaching Gotchaye's score requires a fundamentally different approach.
 
This game is great, but unfortunately, it reminds me too much of a previous job where I spent days programming a many core DSP in assembly. The cores were connected with an on-chip network. The cool thing was the network ports could be used as operands just like here.

hopefully, i find some more time to work on this.
 
This game is great, but unfortunately, it reminds me too much of a previous job where I spent days programming a many core DSP in assembly. The cores were connected with an on-chip network. The cool thing was the network ports could be used as operands just like here.

hopefully, i find some more time to work on this.

I program in my job and if I find myself playing games like this or Spacechem it means I'm not finding my job very fulfilling at the moment. A programmer's need for puzzle games ought to be satisfied by his/her work.

Fortunately I have a lot of fun stuff to do at work so I don't feel the need to play this at the moment.
 
Heyo. I picked this up a while ago but didn't start it until just now after Stump and Durante talked about it on steamgaf.
I could use some people on the leaderboards though, there's only 3 people in the self diagnostic test and one of them is me and other one is Durante. I bet the third one will fall off after couple levels.
So I added a bunch of you.
 
Man, reading about all your scores, I'm feeling really stupid.
I guess I'm missing some fundamental "trick" here, I can't explain the score difference any other way.

For my defense, I'm no CS, studied assembler for like one 16 hours course years ago, and am no programmer either :D
 
Matched Gotchaye's 202 in "Sequence Counter" exactly.

I wonder if his program is the same, because it's nontrivial (9 nodes, 47 instructions).

Edit: scratch that. 29 instructions, there was a lot of premature (non-)optimization in there.
 
Great seeing this thread explode and having a bunch of friends requests.

I know what I'm doing on my flights back home now :D Hope to optimize and complete the puzzles I have left.

Some of those scores I'm seeing on my leaderboard look insane though...
 
After the migraine the later levels of SpaceChem induced in me, i'm not playing anything else by these guys ever again.

Okay... i caved... again.
Please gods of migraine, don't hurt me again.
 
Just picked this up in the sale, and really enjoying the little I've played of it. None of my friends on steam play it, though, so I'd appreciate a bit of competition, if anyone wants to add me:

http://steamcommunity.com/id/johanvonstrahlenberg/

My scores at the moment are probably pretty crap, as I've been spending most of my time on Infinifactory (which I also picked up recently), but once I get going it'll be good to know what I need to beat.
 
So, which is the hardest puzzle you have come across? For me it is easily the "sequence sorter", which I had to give up on.

The next hardest is probably the "sequence indexer". There are so many moving parts in my design that I have a difficult time understanding how it works. This also means that I am out of luck trying to optimize it ... I don't understand how some people get a cycle count under 1000. Just moving the sequence between the memory stacks is quite expensive ...
 
I thought I held my own against most people well enough without a formal CS background. Getting clowned on by people with a deep background doesn't make me feel bad. Although maybe getting beaten by a linguistics major should make others feel bad, I don't know.
 
I decided to go back and try to tweak some of my earlier solutions to ease myself back into the game. Managed to get my Signal Comparator cycle score down to 266 (from 278) with a pretty simple fix. Good for third on my friends list. I have no idea how Durante managed 245 though.
 
Is there a better way to end/close a loop than to just jump to an end label?

Ex:
Code:
MOV LEFT, ACC
MOV ACC, RIGHT
JGZ TRUE
FALSE:
MOV 0, DOWN
JMP END
TRUE:
MOV 1, DOWN
END:

Another idea I just thought of that works is to use JRO -15, which will always set you back to the very beginning of the execution, but I don't much like that either.
 
Is there a better way to end/close a loop than to just jump to an end label?

Ex:
Code:
MOV LEFT, ACC
MOV ACC, RIGHT
JGZ TRUE
FALSE:
MOV 0, DOWN
JMP END
TRUE:
MOV 1, DOWN
END:

Another idea I just thought of that works is to use JRO -15, which will always set you back to the very beginning of the execution, but I don't much like that either.

You can put labels and code on the same line. Absolutely necessary for optimizing number of instructions.

Code:
START: MOV LEFT, ACC
MOV ACC, RIGHT
JGZ TRUE
FALSE: MOV 0, DOWN
JMP START
TRUE: MOV 1, DOWN
 
You can put labels and code on the same line. Absolutely necessary for optimizing number of instructions.

Code:
START: MOV LEFT, ACC
MOV ACC, RIGHT
JGZ TRUE
FALSE: MOV 0, DOWN
JMP START
TRUE: MOV 1, DOWN

Labels don't actually count as instructions for the instruction count stat. If you mean just so you can fit more lines of code in a node, then yeah that is absolutely huge to know.
 
Nice to see this game has somewhat sizable community here!

I picked the game up during the holiday sales. So far I've only completed 5 puzzles and already I'm having some real head scratching moments during the newer ones. It's kinda weird to have a good time with a game about assembly programming when I've never really liked it before.

Feel free to add me for some filler on your leaderboards. I'll add some people from here myself too. I'll probably be on the bottom end of the list, but whatever :P
http://steamcommunity.com/id/0kAmui0/

Also, thanks for the tip that you can put labels and code on the same line!
 
I just spent two hours doing and then optimizing Signal Pattern Detector :p

Two of my solutions, that handles the problem differently, if anyone interested. Going below will be hard for me :) I will need to rework the concept to parallize more.

203 cycles, 37 instructions
http://i.imgur.com/0nPJTJw.png

238 cycles, 16 instructions
http://i.imgur.com/SBF9mI7.png

I had third one with 303, which was my first passed solution, but i messed it up while experimenting :P

Ps. Damn, i will again go to bed too late, because of this ;p
 
Woah, playing it and optimizing really makes You better at this.

I've just got back to my old score for Sequence Counter, because it was really bad.
In about 15-20 minutes, i wrote the new version that is not using swap and is much faster.
Old version was 419 (i had also slightly better 365 or smth), then i created version with 260 cycles and then parallelized it to 204 cycles.
Game is awesome ;p

Ps. Still 2 cycles behind Durante ;p
 
Whaaaaaaaat

yvJGUev.png


nbd

That's what I think when I look at your differential converter score.

For now at least

I've seen Cyan's Differential Converter solution. It's really neat. We did completely different things with it. Same for Multiplication. Interesting how close our cycle counts are for them.
 
When you've been working on a solution for a while, start running it, everything is going ok and you start smiling because you know you beat it... and then you hit the fast forward button and end up on the result screen only to see how someone else has several hundred fewer cycles than your solution.



It's an emotional roller coaster.
 
I wish the stats showed more than the top 8 because yall are great at making me feel bad about myself.

I feel like I should just push forward with getting solutions because I'm getting hung up on early ones thinking "I could do fewer nodes. I could have less instructions."
 
18 instructions done on Sequence Reverser, and I'm thinking for 10 minutes straight on how Durante got it with 2 instructions less. :( Haven't played it for months since I dropped the ball on my 4th playthrough against interrupt handler.

I like this game more than HRM because I don't like looking at spaghetti code.
 
I just spent two hours doing and then optimizing Signal Pattern Detector :p

Two of my solutions, that handles the problem differently, if anyone interested. Going below will be hard for me :) I will need to rework the concept to parallize more.

203 cycles, 37 instructions
http://i.imgur.com/0nPJTJw.png

238 cycles, 16 instructions
http://i.imgur.com/SBF9mI7.png

I had third one with 303, which was my first passed solution, but i messed it up while experimenting :P

Ps. Damn, i will again go to bad too late, because of this ;p

Signal Pattern Detector seems like the hot topic, and I hadn't done it yet as it replaced one of the EA puzzles so I went ahead and gave it a go.

First working attempt is 175/4/14, so, not bad. Now I gotta see if I can parallelize it.

Solution here
 
Was sitting at work wondering what the bug is in my interrupt handler. Got a solution going at 195 cycles. I dunno what I'd do to speed it up.

Reopened my signal multiplier program and it's like hieroglyphs to me now. There's no space for comments and the 1-2 character ones I left in there make no sense.
huh.gif
 
Decided to pick this up today. I'm pretty inexperienced at programming, so I'm still getting used to this way of solving problems, but I managed to finish the first 4 levels without too much difficulty...

edit - My brother just showed me the last level, the sequence sorter... I wouldn't even know where to start. Damn..
 
Decided to pick this up today. I'm pretty inexperienced at programming, so I'm still getting used to this way of solving problems, but I managed to finish the first 4 levels without too much difficulty...

The difficulty picks up pretty quickly in the second row of problems. At least from my viewpoint as a novice programmer.
 
Erheller... you are always 2-3 cycles better than me... how?

I assume you're talking about Signal Comparator? I don't know either, everyone on my friends list is at 278 (except for Durante at 245, dammit) while I'm at 275.

FWIW, here's my solution:



Related: what exactly is the difference between an instruction and the cycle count? I'm doing a CS minor, but everything has been really high level so far so I'm completely new to assembly.

Edit: misread your post, I actually don't know. I'm only ahead of you in like two nodes, though.
 
instruction count: how many lines of code your wrote
cycle count: how many instructions were executed (actually how many "ticks" of time the processor uses, since some instructions take multiple ticks)
 
Decided to pick this up today. I'm pretty inexperienced at programming, so I'm still getting used to this way of solving problems, but I managed to finish the first 4 levels without too much difficulty...

edit - My brother just showed me the last level, the sequence sorter... I wouldn't even know where to start. Damn..
hahahaha that's not the last level, that's not even close
 
instruction count: how many lines of code your wrote
cycle count: how many instructions were executed (actually how many "ticks" of time the processor uses, since some instructions take multiple ticks)

I see, thanks. What does the idle statistic in each node mean, and is it useful to look at?
 
I assume you're talking about Signal Comparator? I don't know either, everyone on my friends list is at 278 (except for Durante at 245, dammit) while I'm at 275.

When you folks bring up specific levels if I have them available I tend to look at them and since this was one I completed awhile back I figured I'd check about optimizing it (since I'm at like 294/6/25 which is above the seemingly standard 278/6/20). I had an "aha!" moment for how I handled jumps so I fixed that up and excitedly ran it. Now it's 308/6/22. I must really be missing something obvious. I'll look at it more later since today and tomorrow are moving days and my room is torn apart and I have to be up early to finish that.

I'd love to just come out middle of the pack on some of these.
 
I see, thanks. What does the idle statistic in each node mean, and is it useful to look at?

Idle is the percentage of total cycles that the node spends waiting instead of completing instructions. Gives you an idea of what possible choke points exist in your program.

LEvZCNB.png


Second to last? Are there more levels?

ndTvhn6.png

invoker-laugh.gif
invoker-laugh.gif
invoker-laugh.gif


i haven't actually seen what they're like i've been stuck staring down the pattern detector for a while now
 
Signal Pattern Detector seems like the hot topic, and I hadn't done it yet as it replaced one of the EA puzzles so I went ahead and gave it a go.

First working attempt is 175/4/14, so, not bad. Now I gotta see if I can parallelize it.

Solution here

I suppose I'll post my current Signal Pattern Detector, but I'm currently trying to figure out the best way to reduce cycles.

179/4/13

My Solution

Hmm, seems like i completely tackle it from different perspective than most of You guys.
But I wont look at Your solutions until i'll go below 200 by myself :P
 
I don't understand people who use code like "JRO -3" instead of "JMP A". Stump does this too - actually ISTR him explicitly commenting that you could use JRO and a number instead of JMP so as to avoid using labels (???????).

First, this is much harder to read. JMPs are much easier to follow, especially if you've got room for descriptive labels. With JRO you have to count. There is no command that won't fit on the same line as a one-symbol label and a colon, not even "MOV RIGHT, RIGHT" (also note that you don't need commas).

Second, you have to change the number after "JRO" if you change the number of lines between the jump statement and the target. Much more work when optimizing. JMP works no matter what you add or remove or move around.

Cut it out. JRO is only to be used when you need the number of lines jumped to be variable.
 
Well, now I know what I'll do this weekend.

Oh, and I agree on the JRO. It's bad enough that you can't really structure/comment code in most cases due to the space limit, no need to make it even harder to follow by using jro for fixed jumps :P
 
Only played spacechem, and enjoyed it a lot but it did fry my brain after a while. Should I jump on this or infinifactory? This looks interesting - I did a little assembly programming on 6502/68000 but that was 25 years ago so probably long gone from my brain,
 
I'm kind of interested in this, downloaded it in the sale but I'm not even sure where to start. Is there a tutorial or a decent pointer to figure out what to do this first?
 
I don't understand people who use code like "JRO -3" instead of "JMP A". Stump does this too - actually ISTR him explicitly commenting that you could use JRO and a number instead of JMP so as to avoid using labels (???????).

First, this is much harder to read. JMPs are much easier to follow, especially if you've got room for descriptive labels. With JRO you have to count. There is no command that won't fit on the same line as a one-symbol label and a colon, not even "MOV RIGHT, RIGHT" (also note that you don't need commas).

Second, you have to change the number after "JRO" if you change the number of lines between the jump statement and the target. Much more work when optimizing. JMP works no matter what you add or remove or move around.

Cut it out. JRO is only to be used when you need the number of lines jumped to be variable.

Hmm, when You started to talk about JRO, i agree completely with You btw, i just realized that You can use JRO ACC :O
 
Top Bottom