Download for Windows Linux-64

Build abstract structures using 6 commands

Design algorithms and watch them getting coded automatically

  • 6 commands (no unnecessary complexity!)
  • 18+ programming languages (no coding needed!)
  • Cycle counts such as 6N²−6N (fewer arbitrary numbers!)
  • Scores as high as 300i (unreal solutions count!)
  • 72+ levels and 42+ achievements (plus hint levels for extra help!)
  • Code archaeology minigame (missing fragments!)
  • Compete with your friends (or globally, unfavorably!)
  • Contribute novel solutions (bring everyone's scores down!)


Top players:


Server stats:


The game is in active development.
For hints, player community is in Discord.
For the developer, comment below.

Selective changelog

v0.8—v0.9: <many changes>
v0.9.1: new level, global histograms in Level Select
v0.9.2: new levels, secondary mouse button in Settings
v0.9.3: new levels and achievements
v0.9.4: new levels and achievements, enhanced leaderboard, more accessible root
v0.9.4.3: bug fix: Leaderboard button replacing game with website (introduced in v0.9.4.2)
v0.9.5: new levels, achievements and programming languages
v0.9.5.4: bug fix: inadvertent File Upload popups for some players (mostly since v0.9.4.2)
v0.9.6: new levels and achievements, Save/Load in private browsing mode
v0.9.7: new levels and achievements, symmetric scoring range (target±120), enhanced Welcome
v0.9.7.27: bug fix: importing big savefiles failing in some browsers (introduced in v0.9.5.5)
v0.9.8: new mechanic, levels, achievements and programming languages, data report in About
v0.9.9: new level, achievements and programming language
v0.9.10: new programming language
v0.9.10.13: new level, worker histograms, histograms also for uncompleted levels
v0.9.11: names in leaderboard, new hints and extra workers for some levels
v0.9.12.9: new level, achievement, programming language and hint levels
v0.9.13.4: new programming language, clipboard import/export
v0.9.13.22: new level, unlimited hint levels, optional inputs, new histogram for some levels
v0.9.14.1: new level and programming language
v0.9.15: new achievements and programming language, new keyboard shortcuts
v0.9.16: new levels, enhanced editor, view/copy solution
v0.9.17: Fill In The Blanks minigame, new achievement, Ctrl+XCV
v0.9.18: performance optimizations, new achievements, minigame histogram
v0.9.19: new levels, enhanced editor
v0.9.20: new programming language (unlockable by minigame)
v0.9.21: languages in Intro
v0.9.22: new level, programming language and histogram, Controls in Options
v0.9.23: compare with Friends, minigame hints
v0.9.24: new achievements and programming language
v0.9.25: new levels, performance optimizations
v0.9.26: new programming language and hint level, keyboard shortcuts
v0.9.27: new level, achievement and programming language
v0.9.28: new hint level, UI enhancements
v0.9.29: context menu, Friends' achievements
v0.9.30: enhanced debugger
v0.9.31: new level, root thresholds
v0.9.32: new level, achievements and programming language
v0.9.33: Sandbox, new hint level and achievement

teiP
golorP
airotcafunaM
lacsaP
RI MVLL
gnalrE
nartroF
emehcS
LPCB
++C
psiL nommoC
oG
J
revenehW
CISAB
htroF
euhT
LACRETNI
nohtyP
egnufeB
teiP
golorP
airotcafunaM
lacsaP
RI MVLL
gnalrE
nartroF
emehcS
LPCB
++C
psiL nommoC
oG
J
revenehW
CISAB
htroF
euhT
LACRETNI
nohtyP
egnufeB
teiP
golorP
airotcafunaM
lacsaP
RI MVLL
gnalrE
nartroF
emehcS
LPCB
++C
psiL nommoC
oG
J
revenehW
CISAB
htroF
euhT
LACRETNI
nohtyP
egnufeB
StatusIn development
PlatformsHTML5
Rating
Rated 4.5 out of 5 stars
(16 total ratings)
Author2020
GenrePuzzle
TagsHistorical, logic, programming, zach-like, zachlike
Average sessionA few minutes
InputsKeyboard, Mouse
AccessibilityInteractive tutorial
LinksHomepage, Leaderboard, Player community (Discord)

Download

Download NowName your own price

Click download now to get access to the following files:

SPOILERS_word_patterns_v0.9.32.txt 4 kB

Comments

Log in with itch.io to leave a comment.

I guess this is the best place to contact. I have some QoL issues, playing on the Windows version.  I would like to be control manipulation of a group of code blocks better. In particular:

The mouse is really sensitive (at least my mouse) in conjunction with CTRL E/D etc, and the group tends to snap to the mouse unexpectedly. I'm not sure if you can some sort of threshold for movement over time on the mouse for it to trigger. (Or just have a way to disable snap to mouse unless your holding LMB).

Page Up/Down. It would be nice if these controls didn't require the mouse. It would be sensible to just rotate the group keeping the top left corner of the selection the same, and float the group in case it no longer fits (Eg, it's non-square and it's off the edge when rotated, or it's a non-rectangular/sparse selection and rotating would overlap other non-selected blocks.)

The mouse sensitivity issue should hopefully be fixed in the new version. Thank you for reporting it!

It's tricky to rotate even-sized bounding boxes in place in a way that's reversible without using Undo, and I'd also like to maintain consistency with Home/End. I'm also not sure about conditionally entering Move mode, given that pressing Enter/Space while not in that mode would start executing the solution.

Now that mouse sensitivity has been lowered, please retry using the Ctrl+E - PgUp/PgDn - Enter sequence; if it's still too much of a hassle, I can consider having PgUp/PgDn/Home/End + modifier key (Shift or Ctrl) perform an implicit Ctrl+E.

Ok, I think I can get used to that, now that it isn't being grabbed by the mouse.  Having to go into move move first isn't really an issue, there was just no mention of PgUp/PgDn at all in the keyboard controls so I didn't know it was possible.  I do have one other issue with the Windows version. Tooltips will appear for a second, and then disappear, rapidly repeating like that. Rarely, they are stable, and there's no problems in the browser version, so not sure what's going on.

That's probably this. Is it fixed now?

Most keyboard shortcuts that are available while dragging the mouse are also enabled while "dragging" with the keyboard. The next version will list PgUp/PgDn explicitly to make that clearer.

I do have a wireless mouse, and as mentioned before, it does produce some spurious activity, although at least in this case wasn't causing visible movement. Whatever you changed seems to have fixed the issue though, thanks.

Deleted 35 days ago

Hint 1 (ROT13 encoded): Gur pbybef bs gur abqrf va gur vachgf/bhgchgf ner n yvggyr zvfyrnqvat.

Hint 2: Fcrpvsvpnyyl, gubfr bs gur prageny abqr.

Hint 3: Vg qbrfa'g arrq gb or gur fnzr abqr.

Minor feature request – a UI scale setting. Everything is too large in Firefox on my Linux workstation, such that I can’t see the full regular program grid and full program text in the main UI (probably some weird interaction of HIDPI scale settings somewhere), and the browser display scale (ctrl +/-) is not respected by the game.

The game negates the browser's zoom settings actively in order to achieve pixel-perfect text, so changing it wouldn't help.

A few questions:

  1. Do you play in windowed mode or fullscreen? If fullscreen, is it activated in the game (Options > Fullscreen) or by the browser (F11 or View > Full Screen)?
  2. Do you get the same issue when playing the Intro here on itch.io? Normally, you should see "Done" and "Skip" buttons on the top-right and bottom-right corners.
  3. In about:config, has any of the following settings been modified (appear in bold): layout.css.devPixelsPerPx, layout.css.dpi, privacy.resistFingerprinting ?
  4. Most importantly, do you currently have any workaround?
  1. Windowed. Things do all fit in fullscreen, but on a 32” 4K display that’s pretty huge.
  2. Starting from itch.io launches the graphomata site which is where I’ve been playing.
  3. devPixelsPerPx was 1.4, but setting it to 1.0 or resetting it to default does not seem to make a difference
  4. The game is playable (either fullscreen or with the code pane squished off to the side), so it’s not a critical issue, just a QoL thing.

I've temporarily added two special modes, would you be able to check whether any of the following fixes the issue?

1. https://graphomata.com/game/play-online.html?wndopt=1

2. https://graphomata.com/game/play-online.html?wndopt=2

(If so, I'll make it the default.)

(1 edit)

The difference is minimal – in the both opt 1 and 2 the code pane extends under the right side of the window rather than not in the default. See attached (screenshots of a ~2/3 display width firefox window, level D5, devPixelsPerPx at default setting)

default game url

wndopt 2 game url

edit: actually they appear to behave the same, the new version just started with slightly different positions for the pane dividers

Thanks for all the details!

The latest version adds a UI scaling option. It may not be much improvement over normal zoom (Shift+9/0 or Ctrl+wheel), but I'll improve it over time.

It lets me fit everything on screen comfortably without having to use fullscreen mode, which is great. Thank you!

Hi all!
I can't view the global scores on my copy of graphomata, seems like it is perpetually "connecting to the server" before eventually giving up. I'm on windows 10 and am assuming TLS v1.2 is enabled.

Does it only happen in the Windows version, and the HTML5 version connects successfully (can be tested in About > Server Data)?

If only in the Windows version, does running

curl --http1.1 -I https://graphomata.com/game/

(pre-installed on Windows 10+) produces "HTTP/1.1 200 OK" as the first line?

If also on the browser, what relevant errors do you get in the Developer Tools (Console and Network tabs)?

(1 edit)

Hi there !

I completed G5 with root, and now it's stuck with i scores even though I completed it again without root mode activated (and with only legit instructions...) Did I do something wrong ? Did anyone else have this issue ?


Is it possible to know on which level one got the snowflake achievement ? I didn't notice when I got it and am kind of curious about what was so original in what I did... ^^

That's pretty normal! When your root score for a level is higher than the normal score, you get both components.

If you've gone this far, you already have many solutions that would unlock the achievement. Based on this (yellow vs. green), I'd guess that most players unlock it even before C1.

That's the thing, I don't get a normal score with my non root solutions, they're graded as if the root mode was still on :(

In that case, you may want to carefully review the results in the Testing screen...

a puzzle game that have a working highscore... its going to be complex

It'll be as complex as you want it to be!

Level E3 feels like it wasn't well tested, as it is a mess of figuring out how to know who is in the center of a fan, its such a mess that I got the achievment for only failing on the edge cases on that level, but it was because of movement and not size, so I had no idea how to fix it, and I accidently erased that solution, which is my fault. But that solution was kind ugly anyway, so I didn't like it that much.

also the sandbox should have a mode where you can just place commands and mess around, which would use an on-screen button, as the game works shockingly well on mobile, and I would like to mess around on my phone, or just mess around without knowing how to code in general.

Well, that achievement is not as smart - it employs heuristics that's not concerned with the reason for the failures, only that they're few.

I'm glad to hear that mobile works for you! The latest version has an additional example (Empty) that should provide an empty sandbox.

Really loving this game so far!
I do have a piece of feedback however: For level E2. Plus, I was able to solve it with an incorrect solution, where when walking a worker at the intersection of the two chains always went down the newly created link when I expect that there should be a failing case there where it instead goes to the link of the original chain, which would cause the algorithm I solved it with to fail.

That should be fixed now, thank you for reporting!

What a great game

Thank you!

How do i make a loop with only 3 instructions?

Unfortunately, you can't...

(2 edits)

You technically can, but you need to add a "waste instruction". I usually use W=W (W is any worker) and make it a 2x2 like this.


Condition blocks cost more than normal blocks. If you are aiming for better scores use something `A join A`.

<3 lovely

Thanks!

nice game!

Thank you!

Suggestion: add a sandbox level so we can test out algorithms for our levels, with a nice structure editor so we can test it out on practically everything.

(1 edit)

That's a nice idea, but the nondeterminism can make it tricky. I need to think about it. How big would the inputs be? Could they be created with N/L commands instead?

A sandbox level has just been added, where you can define arbitrary inputs programatically. Thank you for the suggestion!

But how to get the sandbox level

It's currently unlocked together with E4.

Finally, I came up with an approach for G4! Here it is in base64: SSBmaXJzdCBnZXQgQiB0byB0aGUgZW5kIG9mIGEgcm93LCB0aGVuIHJlbW92ZSBlYWNoIGluZGl2aWR1YWwgc3RyaXAgb2ZmIG9mIHRoZSBncmlkLCB3aGlsZSBkZXN0cm95aW5nIHRoZSB0b3Agcm93IHRvIGltcHJvdmUgY3ljbGVzIGZ1cnRoZXIuIFRoZW4gd2hlbiBJIHJlYWNoIEEncyBzdHJpcCwgSSBzdHJpcCBsaW5rcyBvZmYgb2YgaXQsIGdpdmluZyBtZSBhIGNoYWluLg==

Go for it!

QWN0dWFsbHksIGRvbid0Li4uIEtlZXAgbG9va2luZyBmb3Igc2ltcGxlciBzb2x1dGlvbnMh

I ran graphomata on linux offline (without an internet connection), and later, when connected, it fails to connect to the server to get (and submit) stats.


(I later loaded the save on the web version, so you should get the improved C10 solution.)

(discord is demanding a phone number.)

Thanks for your contribution! The new threshold is now included in the latest version.

If the game fails to connect at startup, it retries every minute. Does restarting the game fix the issue?

Additionally, did you by any chance export the savefile from the HTML5 version after you started seeing histograms?
If you didn't overwrite the Linux savefile with the updated one, connecting from it will create a duplicate user and your "unique contribution" mark will temporarily vanish from the leaderboard until I delete your HTML5-submitted solutions from the server (not a big deal, I just need to be aware of the need to do it).

Re: platforms, itch.io is really the best, so welcome!

Restarting doesn't fix the issue.

I didn't export the web save file. You should be able to identify my solutions by the C10 improvement, and I'll try to re-upload it next week.

I've deployed a new Linux version with upgraded dependencies (libcurl and mbedTLS).
If it still doesn't work, does running

curl --http1.1 -I https://graphomata.com/game/

produce "HTTP/1.1 200 OK" as the first line?

I re-uploaded, and this time exported and reloaded.

Upgrading didn't help.

The curl command did work.

Are you willing to share the save file format and/or the upload format?

(Assuming you can see all my uploaded solutions, you'll see the clear transition from trying to optimize every puzzle, to structured solutions and trying to use function like design.)

Thanks, old user has been deleted.

I've deployed another version that skips SSL certificate verification and outputs errors to the terminal.
What error do you get? Additionally, what's the OS version?

The best way to get all your solutions, achievements etc. is using About > Data > Export. No documentation yet.

I'm not exposed to player solutions - this way I can enjoy the game also as a player, on an equal footing. At least in my case, I've found that the more modular a solution is (and especially at later levels), the lower score I get...

For months I wanted to get to the X area, but I just need to solve G4. Any help?

Area X will spoil you, but if you insist... There are quite a few approaches to solving G4. It's not necessarily the simplest, but you can (ROT13 encoded) fgneg ol ryvzvangvat gur svefg "ebj".

Did I just contribute to another hint level? Look.

I got 606 cycles, but the optimal threshold is 607.

You certainly did, thanks!

Actually, was the update just to put my contribution in?

Oh that was a fruitful weekend - the update included 10 new cost-cycles thresholds for 4 levels, contributed by 2 players. One of them is you...

Who is the other player?

I don't know. If they solved enough levels, they're somewhere on the leaderboard. I've added the thresholds in two rounds so it could also be two other players not one.

Ah yes, more improvements to γ9.

Nice! You outdid yourself...

(1 edit)

I can create an IRC channel if you want to chat with me.

Can you give me a hint for G4?

It's a little difficult to give hints for this level as there seem to be more strategies to solving it than are known to me. It's easier with root, even if that won't necessarily lead to a non-root solution.

(1 edit)

I'm doing a non-root solution which is VERY inefficient, more than 1000000 cycles on some inputs. I will improve tho.

THANK GOD the game reminds me of new updates. Otherwise I would have been stuck with one version.

I'm glad that feature was of help!

(1 edit)

Can you add a level in area A that leads to area X?

Because i need to plan more levels out.

With all the clutter on the level map I'm not sure that it would be possible! The newly-added Befunge will be waiting for you on the royal road, then...

I told you that I'm not good at planning out...

Also, brainfuck has 8 commands! Can you add it as a programming language?

(1 edit)

Incidentally, without I/O that would be the same number of commands!

I don't think Turing tarpits are a good fit for this game (too low SNR), but I have at least one more esoteric language on my radar - we'll see!

I can't think of a way of solving C10 without root. Please add more workers to this level.

Solving with root is completely legitimate, and may be the first step towards a non-root solution anyway so don't feel bad about it :-)

Yeah, I totally get your point. I rooted D4 and it still made the arrow to D5.

How you do G1 without the rng screwing you over?

Since this forum doesn't support spoilers, would it be possible for you to join the Discord channel?

ROT13 encoded:

Hint 1:
Cbfvgvba O naq P npebff N. Ubj pna lbh qrgrezvar juvpu jbexre erfvqrf ba juvpu abqr?

Hint 2:
Jung qb gubfr abqrf qvssre va?

Hint 3:
Znlor va gur ahzore bs bhgtbvat yvaxf?

Guess what! I contributed to γ9 by total luck! I guess I have to take it!

Some of the greatest inventions were discovered by luck, so you're in good company!

And my contribution was removing 1 cycle.

Great. This game has some interesting parts / concepts which I haven't seen in other programming games. Moreover, the difficult curve is quite smooth here.

Looking forward to some new features / interesting achievements.

Thank you! Esoteric programming calls for esoteric features!

Can you please add the option to delete save data on the web version?

The savefile is stored locally as a cookie for the domain graphomata.com, so deleting it will reset all progress.

Alternatively, you can start from this empty savefile (equivalent to deleting the cookie and reloading the page).

Instructions for the former (for desktop browsers):

  • Chrome: Settings -> Privacy and security -> Site Settings -> graphomata.com -> Clear data
  • FireFox: Options -> Privacy & Security -> Manage Data -> Cookies and Site Data -> Manage Data -> graphomata.com -> Remove Selected
  • Edge (newer versions): Settings -> Cookies and site permissions -> Manage and delete cookies and site data -> See all cookies and site data -> graphomata.com -> expand icon -> trash icon
  • Edge (older versions): More tools -> Developer Tools -> expand icon -> either Debugger or Storage -> Indexed DB -> graphomata.com -> context menu -> Delete cookie
  • Safari (not tested): Safari -> Preferences -> Privacy -> Manage Website Data -> graphomata.com -> Remove
  • IE 11: Tools -> Internet options -> General -> Settings -> Caches and databases -> graphomata.com -> Delete

Has something changed to the root scoring algorithm in last update?

No, it just included lots of new threholds for many levels, and rooted solutions are scored against them just like real ones so they're affected.

I had a bunch of rooted solutions on F3 that all gave me 360i points, i was quite unhappy/confused about getting 360i on them as they were significantly faster, in todays update they all seemingly inexplicably went up significantly to as much as 397i for one (basically the score that I originally expected to get), but what triggered this is beyond me as no new non-root optimal solutions appeared. Its hard to try to get the most amount of points if I don't know what rewards points and what doesnt :P

Before the update, optimal solutions required ~1200 cycles and 20-24 cost. After the update, we know that we can achieve ~1200 cycles with costs in a wider range 20-112 and still be optimal - that is, cost plays a lesser role in achieving optimal solutions. Consequently, rooted solutions that are faster at the expense of having higher cost get better scores now.

Getting 360i for a rooted solution suggests that it was treated equivalently to an optimal solution. Is the cost*cycles product of your solution around 24*1200?

It is higher than that :P ofcourse if you want to lower the cycles, cost often grows exponentially

I see. Since your solution is neither superior nor inferior to any of the optimal solutions, it's scored based on cost*cycles. The product was greater than 24*1200, so it was given the score of an optimal solution, but rooted. Now it's compared against 112*1200, so it gets a higher-than-optimal score - because its cost*cycles is better than that of the newly-added optimal solution.

(1 edit)

I'm not a fan of shadowbanning the 'extreme' solutions from the tradeoffs view. I spent quite a while trying to figure what the 875 cycles solution could have possibly been in D7, before I finally realised that because its not on the cost tradeoff list (which by the way is quite hard to find, only showing from hovering over some parts of the dotted lines, I think it would be much better if it was just a static part of the stats page), and therefore is probably one of those solutions you deemed 'extreme' and filtered out. And the fact that this happened to me even helped me figure this out, if I wasn't already aware of this I wouldn't be any wiser seeing the 875 solution in the cycles graph :P Maybe I would have never figured it out.

I also don't think removing them outright would be a nice solution, they definitely deserve some recognition :P

Also, having one set treshold where you just start shadowbanning them does have its own set of problems, such as deciding the exact treshold, for example levels E7 (I had a nice back and forth with someone but I couldnt see their cost yet and also couldnt communicate with them, ties into my other questions :P) and G4(not exactly sure if this qualifies as extreme or whats going on here) currently have such extreme solutions that kind of ruin the treshold graph.


Overall, I am still in favor of having a logarithmic cost graph rather :P It makes the most sense IMO, especially with how much the cost grows as you add conditions. I think a log(cost)-cycles or a log(cost)-log(cycles) might even be a nice fit for the game, similar to viewing a 2-parameter front for a genetic design algorithm.

Lastly, I've already mentioned this a couple times but I do have to agree with domnomnom, a community where people can chat with eachother about the game would be very nice :P You mention the possibility of a forum but live chatroom(s) where you can go back and forth quickly is more appealing (to me at least), hence the reason I proposed creating a discord server earlier :P

The UI issue in the charts should be fixed by now - extreme values of scoring thresholds will affect scaling only to a limited extent. After this change, do you still feel that log scale is important for conveying the information?

By some parts of the dotted lines, do you mean that tooltips don't activate when you hover anywhere over the bar or the line chart? Or did you try hovering the space between them (which indeed doesn't currently have a tooltip)? These tooltips should list all accepted thresholds (were added a month ago, together with a 'show: max' option).

Regarding blacklisted thresholds, I've just added them back in order to validate the UI, but the roadmap is to treat brute-force solutions as rooted - for scoring and in the histograms. It will take a while to get there, so for now I guess they're here (despite their effect on the scores of nearby nonoptimal solutions).

(3 edits)

(Edited: added section on the bottom)
The new scale seems to help for the most part except when you have 'extreme' solutions of your own :P Thats not really a problem I guess, while it does still mess with the other solutions it is also quite satisfying to see an absolutely huge cost :P Overall I think its fine currently, and while I personally still am a fan of log plots I don't think it is necessary at this point.

About the treshold list tooltip: I was referring to the part inbetween the two graphs. Overall I think they deserve to be promoted to a permanent spot on the stats page, considering their importance.

For marking the 'extreme' solutions as rooted.  I don't think it will be that simple, since it's not really a black and white thing. It can span the whole range from unrolling one iteration with 1 extra command all the way to some pretty extreme cases (I have seen dom's E7 no-longer-optimal intermediate scores that scale pretty well all the way until where he is now.

Edit: it would also be nice to be able to see the achieved tradeoffs in root (I'm not 100% sure that makes any sense in the current context). Currently you can kind of guess what happened based on the other graphs, but theres no guarantee. Particularly on G4 I am struggling, I even ended up finding a new best non-root solution that made my rooted solution take quite a hit on the upgrade but it feels like the highest root solution wasn't affected as much as mine, it would be nice to see its tradeoff as to know in what direction to search :

Edit edit: the dotted lines turn green when you've achieved them. It would be a nice touch to make them gold when they are an unique best since there is currently no way to tell which are unique :)

The plan is to detect non-general solutions that assume some limit on input sizes. This will be done by adding larger inputs as I used to do before, except that they'll be hidden and failure on them will just make the solution rooted.

Since players can't select those extra inputs, I can use only a few and make them exceedingly large without slowing down rendering or testing. Note that loop unrolling, as long as it supports arbitary input sizes, will not make a solution rooted.

Regarding your suggestions: uniqueness information can't be overlaid on the existing charts as is, because the client and the server may have different thresholds. And as you implied, best-known rooted solutions don't affect scoring so they don't contribute thresholds. Technically everything can be presented (maybe in a new screen), but it's going to be tricky to explain the meaning of this information to players.

(2 edits)

Why does it take a while before all solutions are upgraded when a new best is found (rather than just triggering an upgrade right away)? Whats the upgrade schedule? It feels like its been 2 days since the last upgrade.. :P

Also, upgrade might not be the best name for what usually equals to taking away peoples score :P maybe score normalisation or something might be a better term

Cost-cycles thresholds are part of the game's version. This ensures that they are always in sync with the level definitions (including the number and sizes of inputs) and that perfect scores are attainable even if you play an earlier version. The downside of that is, updating them requires some human involvement...

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.

Deleted 3 years ago

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

(1 edit)

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.

(2 edits)

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.

(1 edit)

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.

(1 edit)

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.

(1 edit)

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!