Could you please add an achievement for doing X6 with only standard instructions? My solution is proof that it is possible. Alternatively, make it a new level Y1.
Also, it would be nice if there was a community chat other than this comment chain.
Thank you! This is amazing, I didn't imagine anyone would go that route voluntarily, especially not in a level that's already a bit tedious! Would it have been of help if the game had supported search-replace of workers, or maybe copy-paste using the system clipboard?
Your level/achievement suggestions are good, but I actually need to decide about area H first. I intend to dedicate it to reductions (without X), and such a Y1 can be very relevant there, but if I can't
make it fun, a similar achievement for any one of several X levels can
serve as a partial fallback (I'd rather not require it in only one specific level). Meanwhile, I think I'll just adjust the scoring of solutions without X so that they at least grant perfect scores.
As for community chat, I think it's too early but would converting this
comment section to the discussion board that itch.io supports help, or
is community chat needed due to functionality or some kind of
interaction that can't be found or isn't encouraged in the forum format?
It does seem to be a common request.
For search/replace, yes, at some point I would've like to replace workers but only in the selection.
I like the system-clipboard idea, it would allow us to persist different approaches to a level by pasting them into files.
Note that rotating/reflecting was very useful for that level but I don't remember seeing a list of controls that includes this.
A community chat like a Discord server would allow us to have general banter (e.g. about chasing scores on a level, telling people about keyboard shortcuts), whereas posting here, it seems we're doing a general comment about the game rather than having a live discussion. L0laapk3 and I currently do this sort of thing in an #off-topic channel of an unrelated server. I'd be happy to moderate such a chat if you'd prefer to focus on the game rather than managing a community.
It means that the cilent and server give different scores (or metrics) for your solutions to the level. Or in other words, I've just uploaded a new version...
I have found a buggy solution for G3. It triggers loop detection and shouldn't work, but somehow it still does. It's currently an unique best with 72 cost for 355 cycles. Let me know if you need more details. You can contact me on discord at L0laapk3#2010.
By the way, is there a discord server or some sort of community chat for this game? That would be nice :)
Thank you! You've made so many cost-cycles contributions, will you get 1st place already in 2020?
When
loop detection triggers, does it display "will be running
forever" or "may be running forever" (those are different cases)? The
former would imply a bug, the latter would not.
Most importantly,
if you believe that the solution shouldn't work in the general case
(with perfect nondeterminism), I can add larger inputs or improve the
randomness until it is rejected.
In any case, please don't spoil
the solution - while I could technically fetch it from the DB, I play
the game on an equal footing without being exposed to players'
solutions.
As for chat/community, well, I guess I'm still waiting for Web 3.0...
I do believe I'm on track to reach first for now, I still have to optimise X5 and start working on X6, I do think it will take until 2021 tho :)
Many of my contributions are low hanging fruit, however I'm particularly proud of E4 (2 cond) and D7 (2 cond and complete undercut of all existing implementations in both cost and speed).
It does say "may be running forever", however I was under the impression that you implemented loop detection by checking if the current state exactly equals any previous state which it definitely does. The implementation I made has a limit to zero chance of running for infinite duration which I thought the game actively prevented you from making.
Either way feel free to look at my G3 implementation or G3 save board, it contains nothing of significance assuming you've finished G3 once, G3 is a straight forward level and none of the G3 designs I made are ground breaking (best I got with a 'proper' implementation was 3*26 cost for 321 cycles before I converted it to this 'broken' working 3*24 version) and it just contains some rng seed testing otherwise :P
I've just tried to reproduce what I believed you did (the technique seemed obvious from your description), and got a 2*24 "solution" instead... The game does attempt to force you into general solutions that don't rely on randomness, but G3 is not a level I considered when I created the strategies for that (it didn't even exist).
Infinite loop detection is actually an approximation. First, it's implemented more like a solution for level <REDACTED> - comparing against all the preceding states would require me to canonicalize all of them, which would be prohibitive in terms of performance. Secondly, it runs graph isomorphism in a "best-effort" mode - it's possible (though not easy) to generate states that will make it run exponentially. If that happens, the algorithm stops after a few seconds and infinite loop detection is subsequently turned off for the level (the player also gets a message).
Because of this, for consistency, the game doesn't stop you from submitting solutions that have non-zero probability of not terminating even when it knows that this is the case.
By the way, the server receives solutions for verification only in compact form, it doesn't get the entire board.
Edit: should be fixed by now (for this level and 4 others), those solutions no longer qualify.
Im back to complain about G3 :P Its the last level that stands between me and a perfect real score.
This time, I am getting bodied by RNG. I have two near identical setups, where the only difference is that one branch of an if statement has 1 extra instruction. Everything is otherwise completely unchanged. The frustration I am facing is that the setup with the extra instruction in the if branch is actually performing better than the other one. (longer if case: max 301 cycles, shorter if case: 308 cycles on a different input). I can provide more details if you wish, to avoid leaving spoilers in public you can contact me on discord (L0laapk3#2010).
I assume you added more randomness to the test cases to ensure my previous broken solution fails, however it seems also necessary to add plenty of fixed RNG test cases (if such a thing is possible) to ensure the max cycles seems consistent.
Also, as a suggestion, it would be nice to be able to have notifications if your score is beaten, etc. Maybe it would be an idea to set something up for this? Something like a discord server with bot that announces new best solutions would be nice. :)
Edit: messed up the two solutions in my explenation
A quick reply: the phenomenon you describe is inherent, and adding the previous scenarios (which indeed included some "highly-regular" RNGs) won't necessarily help - it all depends on which type of RNG (constant or random) the worst case happens to occur in. I'm probably going to re-add them anyway for UX reasons, but meanwhile, have you tried reviewing the worst case in the profiler (accessible by clicking Cycles in Level Complete)? It may help you optimize for it if you so desire.
I have indeed tried profiling it, which did further frustrate me :P
I have kept spoilers to an absolute minimum in these images: The original version performs worst on input 13 with a max of 301 cycles, where, the A=D:y branch is hit 5 times. The improved version, which simply moves the A=B test up one space to exclude B join A when A=B:y, performs worst on input 26 with a max of 308 cycles, where the A=D:y branch is hit 8 times. This even makes it score 2 points less (357 vs 359..).
As you can probably understand, this makes it very frustrating to hunt for the 'best' 360 solution as it just feels like moving stuff around at random and preying to RNGesus. I'm not sure if this is fixable but I was hoping some of the "highly-regular" RNG's that I did notice in earlier levels could provide a consistent worst case for this level.
You're right about that - the previous RNGs are back, and I believe that this issue is fixed now. Thanks for reporting it!
I've checked the option of a global RSS feed. Specifically, detecting changes in scoring thresholds and filtering the inconsequential ones is tricky to do automatically. There are other changes that are easier to notify of (e.g. to the leaderboards), but I don't think many players will be interested in such a mechanism (it will also be spammy).
I can give a heads up about my intention to reject the brute-force threshold for D8, one way or another. Other than that, it all depends on the people playing the game. Just make sure to save your savefile to a file so as not to rely on the browser's local storage policy for keeping it intact.
Is it possible to lock the desired programming language translation (or disable the screen altogether, reclaiming some much-needed working space)? While the feature is extremely impressive, I find the constant switching distracting, especially whenever the output becomes... abstract art.
It may be twenty years too late to change the art style to use less saturated colors, but there's still hope! Here are a few things you can try:
1. Lock the language for the current level by changing it in the Settings. You may need to repeat the process after switching levels. 2. Make the distracting art smaller by zooming out (ctrl+wheel). 3. Get more horizontal space by dragging the splitters to the right. 4. See more commands in the editing area by zooming out. 5. Get more horizontal space by playing full screen, or alternatively, in a wide window.
I don't mind the art style itself; in fact, I quite like it. My main issue is that Piet is a particularly distracting translation whenever it pops up. That said, I got used to it quicker than I expected. Regardless, I think it would be nice if it was possible to permanently set the language.
I didn't realize ctrl+scroll did anything. I was probably told about it during the tutorial, but I must've forgot... Thanks for the tips.
I actually agree with all the points you made - I just don't have a good solution at the moment. In particular, locking a language indefinitely could have an impact on the unlocking of words. Will update here if I come up with something.
Edit: you can now set the language to persist across levels - follow the instructions in the tooltip.
I have to say I agree with alion here, it would be nice to disable the code window entirely. As he mentions this is quite impressive, but it is also quite distracting. For me personally it does not contribute to the fun of the game in any way, and I can't say I would care much if I wouldn't unlock any words. I don't mean to be offensive in any way, just trying to give you my honest thoughts.
I've pushed a fix that allows you to drag the splitters almost all the way to the right also in wide aspect ratios. With a minimal size, is it still distracting?
The best rewards are populating the leaderboards, contributing new cost-cycles thresholds and giving feedback. You seem to have already done all three! So I'm adding a fourth option...
this is pretty neat! I can't believe you could have implemented a graph isomorphism algorithm without it getting pretty nasty though, so props for that!
The isomorphism algorithm started simple enough when I only needed to ensure that it wouldn't get exponential over the specific outputs of the levels. But once I introduced infinite loop detection that compares arbitrary execution states, it became much more involved. It was pretty fun to implement, actually!
← Return to game
Comments
Log in with itch.io to leave a comment.
This game seems very hard to make. Kudos to the devs.
Thanks! Hopefully it's much easier to play!
Hi. Great game!
Could you please add an achievement for doing X6 with only standard instructions? My solution is proof that it is possible. Alternatively, make it a new level Y1.
Also, it would be nice if there was a community chat other than this comment chain.
Thank you! This is amazing, I didn't imagine anyone would go that route voluntarily, especially not in a level that's already a bit tedious! Would it have been of help if the game had supported search-replace of workers, or maybe copy-paste using the system clipboard?
Your level/achievement suggestions are good, but I actually need to decide about area H first. I intend to dedicate it to reductions (without X), and such a Y1 can be very relevant there, but if I can't make it fun, a similar achievement for any one of several X levels can serve as a partial fallback (I'd rather not require it in only one specific level). Meanwhile, I think I'll just adjust the scoring of solutions without X so that they at least grant perfect scores.
As for community chat, I think it's too early but would converting this comment section to the discussion board that itch.io supports help, or is community chat needed due to functionality or some kind of interaction that can't be found or isn't encouraged in the forum format? It does seem to be a common request.
For search/replace, yes, at some point I would've like to replace workers but only in the selection.
I like the system-clipboard idea, it would allow us to persist different approaches to a level by pasting them into files.
Note that rotating/reflecting was very useful for that level but I don't remember seeing a list of controls that includes this.
A community chat like a Discord server would allow us to have general banter (e.g. about chasing scores on a level, telling people about keyboard shortcuts), whereas posting here, it seems we're doing a general comment about the game rather than having a live discussion. L0laapk3 and I currently do this sort of thing in an #off-topic channel of an unrelated server. I'd be happy to moderate such a chat if you'd prefer to focus on the game rather than managing a community.
Thanks! I'm looking into it. If there's a community chat for this game, consider yourself hired.
You can rotate and flip while dragging with PgUp/PgDn/Home/End. I really need to see how to better communicate all the shortcuts.
You can now export and import the contents of the internal clipboard - see the tooltip. The format is textual and allows for easy search-replace.
What does the "server results for this level may differ" message mean?
It means that the cilent and server give different scores (or metrics) for your solutions to the level. Or in other words, I've just uploaded a new version...
Interesting update :P
Hi there, great game!
I have found a buggy solution for G3. It triggers loop detection and shouldn't work, but somehow it still does. It's currently an unique best with 72 cost for 355 cycles. Let me know if you need more details.
You can contact me on discord at L0laapk3#2010.
By the way, is there a discord server or some sort of community chat for this game? That would be nice :)
Thank you! You've made so many cost-cycles contributions, will you get 1st place already in 2020?
When loop detection triggers, does it display "will be running forever" or "may be running forever" (those are different cases)? The former would imply a bug, the latter would not.
Most importantly, if you believe that the solution shouldn't work in the general case (with perfect nondeterminism), I can add larger inputs or improve the randomness until it is rejected.
In any case, please don't spoil the solution - while I could technically fetch it from the DB, I play the game on an equal footing without being exposed to players' solutions.
As for chat/community, well, I guess I'm still waiting for Web 3.0...
I do believe I'm on track to reach first for now, I still have to optimise X5 and start working on X6, I do think it will take until 2021 tho :)
Many of my contributions are low hanging fruit, however I'm particularly proud of E4 (2 cond) and D7 (2 cond and complete undercut of all existing implementations in both cost and speed).
It does say "may be running forever", however I was under the impression that you implemented loop detection by checking if the current state exactly equals any previous state which it definitely does. The implementation I made has a limit to zero chance of running for infinite duration which I thought the game actively prevented you from making.
Either way feel free to look at my G3 implementation or G3 save board, it contains nothing of significance assuming you've finished G3 once, G3 is a straight forward level and none of the G3 designs I made are ground breaking (best I got with a 'proper' implementation was 3*26 cost for 321 cycles before I converted it to this 'broken' working 3*24 version) and it just contains some rng seed testing otherwise :P
Solutions with few conditions are my favorite!
I've just tried to reproduce what I believed you did (the technique seemed obvious from your description), and got a 2*24 "solution" instead... The game does attempt to force you into general solutions that don't rely on randomness, but G3 is not a level I considered when I created the strategies for that (it didn't even exist).
Infinite loop detection is actually an approximation. First, it's implemented more like a solution for level <REDACTED> - comparing against all the preceding states would require me to canonicalize all of them, which would be prohibitive in terms of performance. Secondly, it runs graph isomorphism in a "best-effort" mode - it's possible (though not easy) to generate states that will make it run exponentially. If that happens, the algorithm stops after a few seconds and infinite loop detection is subsequently turned off for the level (the player also gets a message).
Because of this, for consistency, the game doesn't stop you from submitting solutions that have non-zero probability of not terminating even when it knows that this is the case.
By the way, the server receives solutions for verification only in compact form, it doesn't get the entire board.
Edit: should be fixed by now (for this level and 4 others), those solutions no longer qualify.
Im back to complain about G3 :P Its the last level that stands between me and a perfect real score.
This time, I am getting bodied by RNG. I have two near identical setups, where the only difference is that one branch of an if statement has 1 extra instruction. Everything is otherwise completely unchanged. The frustration I am facing is that the setup with the extra instruction in the if branch is actually performing better than the other one. (longer if case: max 301 cycles, shorter if case: 308 cycles on a different input). I can provide more details if you wish, to avoid leaving spoilers in public you can contact me on discord (L0laapk3#2010).
I assume you added more randomness to the test cases to ensure my previous broken solution fails, however it seems also necessary to add plenty of fixed RNG test cases (if such a thing is possible) to ensure the max cycles seems consistent.
Also, as a suggestion, it would be nice to be able to have notifications if your score is beaten, etc. Maybe it would be an idea to set something up for this? Something like a discord server with bot that announces new best solutions would be nice. :)
Edit: messed up the two solutions in my explenation
A quick reply: the phenomenon you describe is inherent, and adding the previous scenarios (which indeed included some "highly-regular" RNGs) won't necessarily help - it all depends on which type of RNG (constant or random) the worst case happens to occur in. I'm probably going to re-add them anyway for UX reasons, but meanwhile, have you tried reviewing the worst case in the profiler (accessible by clicking Cycles in Level Complete)? It may help you optimize for it if you so desire.
I have indeed tried profiling it, which did further frustrate me :P
I have kept spoilers to an absolute minimum in these images:
The original version performs worst on input 13 with a max of 301 cycles, where, the A=D:y branch is hit 5 times. The improved version, which simply moves the A=B test up one space to exclude B join A when A=B:y, performs worst on input 26 with a max of 308 cycles, where the A=D:y branch is hit 8 times. This even makes it score 2 points less (357 vs 359..).
As you can probably understand, this makes it very frustrating to hunt for the 'best' 360 solution as it just feels like moving stuff around at random and preying to RNGesus. I'm not sure if this is fixable but I was hoping some of the "highly-regular" RNG's that I did notice in earlier levels could provide a consistent worst case for this level.
You're right about that - the previous RNGs are back, and I believe that this issue is fixed now. Thanks for reporting it!
I've checked the option of a global RSS feed. Specifically, detecting changes in scoring thresholds and filtering the inconsequential ones is tricky to do automatically. There are other changes that are easier to notify of (e.g. to the leaderboards), but I don't think many players will be interested in such a mechanism (it will also be spammy).
I can give a heads up about my intention to reject the brute-force threshold for D8, one way or another. Other than that, it all depends on the people playing the game. Just make sure to save your savefile to a file so as not to rely on the browser's local storage policy for keeping it intact.
Is it possible to lock the desired programming language translation (or disable the screen altogether, reclaiming some much-needed working space)? While the feature is extremely impressive, I find the constant switching distracting, especially whenever the output becomes... abstract art.
It may be twenty years too late to change the art style to use less saturated colors, but there's still hope! Here are a few things you can try:
1. Lock the language for the current level by changing it in the Settings. You may need to repeat the process after switching levels.
2. Make the distracting art smaller by zooming out (ctrl+wheel).
3. Get more horizontal space by dragging the splitters to the right.
4. See more commands in the editing area by zooming out.
5. Get more horizontal space by playing full screen, or alternatively, in a wide window.
I don't mind the art style itself; in fact, I quite like it. My main issue is that Piet is a particularly distracting translation whenever it pops up. That said, I got used to it quicker than I expected. Regardless, I think it would be nice if it was possible to permanently set the language.
I didn't realize ctrl+scroll did anything. I was probably told about it during the tutorial, but I must've forgot... Thanks for the tips.
Banner blindness to the rescue!
I actually agree with all the points you made - I just don't have a good solution at the moment. In particular, locking a language indefinitely could have an impact on the unlocking of words. Will update here if I come up with something.
Edit: you can now set the language to persist across levels - follow the instructions in the tooltip.
I have to say I agree with alion here, it would be nice to disable the code window entirely. As he mentions this is quite impressive, but it is also quite distracting. For me personally it does not contribute to the fun of the game in any way, and I can't say I would care much if I wouldn't unlock any words. I don't mean to be offensive in any way, just trying to give you my honest thoughts.
I've pushed a fix that allows you to drag the splitters almost all the way to the right also in wide aspect ratios. With a minimal size, is it still distracting?
This is so good. Is there really no way to reward the creator financially?
Thank you!
The best rewards are populating the leaderboards, contributing new cost-cycles thresholds and giving feedback. You seem to have already done all three! So I'm adding a fourth option...
my middle school brain is too small for this information
but this looks very cool so ima follow you
Thanks! It will grow with practice, just watch out for zombies!
this is pretty neat! I can't believe you could have implemented a graph isomorphism algorithm without it getting pretty nasty though, so props for that!
Thank you!
The isomorphism algorithm started simple enough when I only needed to ensure that it wouldn't get exponential over the specific outputs of the levels. But once I introduced infinite loop detection that compares arbitrary execution states, it became much more involved. It was pretty fun to implement, actually!