Figure I should post this here for anyone who wants to give it a go: 204 in 1 is possible! You need to hardcode solutions to the test cases in a level or two, before you get enough tools to allow you to do slightly less hardcoding. (Thanks to vpumeyyv for figuring out the main trick that makes it work. If you want the solution idea: Gur pubfra jbeq vf Ercynpr. Vg pna or hfrq gb uneqpbqr Genafyvgrengr, gura lbh pna znxr jbeqf yvxr Gnp hfvat pnershyyl cynprq punenpgref naq n genafyvgrengr vagb (()). (Lbh pna oernx vagb gur Qb-yvxrf jvgu Noqhpr.))
Made a solutions sheet for least symbols used (the metric shown in the logbook) highscores on every verb. Has full solutions freely visible, so only look if you're fine with spoilers. Editing is allowed, pls no grief link
Thank you for providing this resource! Regarding this annotation:
It is possible to solve nearly every level with an appropriate Narcissus/Hero/Leander definition and a level definition like "(narcissus) 2 dip dig do", which I'm opting to not allow for this sheet.
For a useless example, here's a solution to Caesar: (narcissus) 3 dip 3 dig (16) (23) between do
A definition of Narcissus that makes this solve work is: 3 zap(3 zap(?)(3 caesar)zap copy format)(3 caesar)zap copy format
You could imagine applying this to something with a long solution like Thirteen to save some symbols on Thirteen, though of course at the cost of making Narcissus longer. You can also construct an even better definition of Narcissus that can detect the input (especially for levels where it is significantly different than those in Narcissus) so you don't need the between.
If you haven't solved Narcissus yet on the savefile, I'm pretty you can just put some code in and it can be used in other levels despite not actually being a quine, so you could just throw a "3 caesar" in Narcissus' textbox with no problem. Once the level is solved once this seems to not work anymore though.
P.S. I removed a bunch of the solutions you added to the side because this isn't a resource for casual solves; it's specifically for symbol optimization. The multiply solution was cool though, so I optimized it a bit and left it in.
Thank you for the explanation! So you literally embed a solution in the narcissus quine then use that invocation that extracts the solution back out.So you will get a size optimization "cheese" in the case that the solution embedded in narcissus is longer than the invocation code that extracts it.
So narcissus, hero and leander can be used as some data storage if you can craft a quine or a double quine in the case of hero/leander that can embed your data!
No worries about removing the solutions I added, that's completely your prerogative. Thanks to your sheet, I was about to study and learn a whole bunch of solving tricks I wasn't aware of, such as using do after a bracketed number to unbracket it and put it in the execution stack as a prefix for an X verb. Or the fact that a bunch of unbracketed numbers together get added by the interpreter for "free" before being interpreted as a prefix for an X verb.
Nothing was spoiled for me, because I really just wanted to learn these very clever stack manipulating techniques, see them in action and appreciate all the meta programming possibilities and expressiveness of stack programming. Prior to this, whenever I saw Forth, I couldn't look past the limitations that stack manipulations seemed to impose. So many very interesting things to learn from the solutions.
OK, bugs notwithstanding, I'm enjoying the heck out of this. I love the presentation so much.
But speaking of bugs...
After adding a second definition to a word, you can only click on its first letter to open it from the Dictionary. (Which is better than I thought, i.e. that you couldn't click it at all.)
I seem to have lost my Lielow board. [EDIT: never mind, there it is, totally forgot where I found it.]
Is the test case in Filterling that must exceed 400 symbols intended? It feels like a weird edge case to require (and is the only one where I hardcoded a test case's output since I have no idea how to change my solution to work properly on invalid input).
Not every level is possible to solve with only the words you have. You should use Choice in your definitions, but you can't define it until words from later sections.
Does the computer opponent (the term "AI" has been tainted) play a perfect game of "Lielow"? I guess I'm asking because I suck at the game and haven't managed to win. Is it like a 2D version of Nim? ie, keep your king a specific number of cells away, or something like that - a calculation the computer player is already making - or is it just a well implemented minmax opponent with good heuristics?
I love all the stylistic touches!
I love all the words in the style of old English that you generated and curated
I love all the typographic glyphs
I love the animation at the start
Thanks again for a great game!
I LOVE THE ZACHLIKE GENRE for inspiring awesome games like this!
You're right that it is a minimax, but the search depth is about 3 moves and the heuristics are a bit random (some opponents will try to maximise pieces on the edges, others may try to minimise king height, for example).
Kind of curious what words you ended up going for.
do, maycopy, zap, swap, buryd, cat, between (you can define head ((1) (1) between) and behead ((2) (99) between) easily, so there's no reason to use anything else), same (or equivalent? pretty sure any of like replace or the substring searches can pull it off too) are all seemingly obvious choices, but it feels like nothing else should actually be necessary and making everything is awful. or is it possible to go without even all of those (or equivalent that ends up being the same amount of words)? I also haven't unlocked all the words yet, so there might be something useful in the later ones that can replace multiple of these.
Or some weird behavior you can't replicate using these somehow; I haven't made all the earlygame words either, since I was too lazy to work on fundimentals and just wanted to find the silliest solutions to the words that don't use loops... but I'll probably have to give this a go sometime. Or I might've just forgotten some behaviors you need that are pretty obviously not replicable with that list (I added the Same equivalent in an edit lol)
what section are you at? I imagine at some points you have to have some word to create other words. idk if you found some cheese, but behead at least is definitely cheesed, so you couldn't really do that "intended".
I have titlecase because I was too lazy to do it manually (I know it's easy I'll get to it)
I have two may verbs, mostly because I didn't want to worry about the logic atm.
I have box because at the time I couldn't figure it out, but I have some ideas when I get to it.
I have dig, digd, and flip, but I think I can get that to 1 word using X dig later
head, cat, and behead for other word stuff
differ for logic
superinduce, because it felt like the best "do" verb to me
I'm at 15 right now. And I don't see anything as being "cheese" for an optimization challenge like this, anything that the game allows is fair for me. Like, I have a proper solution to behead, but there's no reason why I'd pick behead as a fundamental word (as you did) over between when between exists.
Simplest Box I know is ((?)) format. (edit: wrong word lmao) (well, for the golf metric it's something else with fewer chars, but you're not going to define split without some sort of box already defined.)
Actually, Tac is just ?? format. I suppose that one can be used in place of cat as a fundamental.
wow you've made some great progress! Good luck on future sections :)
Now that I think about it, there are levels that I cheesed and "conveniently" ignored the cheese so I see your reasoning. I bet the lowest amount needed is probably around 6. That sounds crazy but hear me out:
1 moving such as X swap
2 delete such as zap
3 copy such as... copy
4 altering words such as head
5 continual loops like if
6 bonus word because I probably forgot one (edit: it was cat)
1 2 3 could probably be combined into only two separate words.
even 4 or 5 total words wouldn't surprise me, but a minimum of 8 would.
Thank you! I guess I'll have to implement some of the arithmetic words then - I don't know what was stopping me from making a utility block as you've described that wasn't explicitly presented as a word to be defined. Probably because stack based programming, as powerful and minimal and beautiful as it is, is still alien and daunting to the way I've always written software - it would have taken me a while to formulate the solution you've shown. Learning this and getting better at it is something I'm compelled to continue trying because I know deep down that there is something to what all the Forth people are on about.
Thanks for reading my long winded blog post, and thanks again for the help!
it looks like your starting to figure it out! Btw, I recently learned that instead of "(A B choice) copy do" you can have "(B if) copy do A" and it's slightly faster.
Brilliant game! I've played for hours and have I've defined everything up to the May Verbs except for CHOICE, VOTE and SOME? and in Connexion I've defined CAT, KITTEN, PUMP and TAC.
Can the May Verbs be defined only using verbs in the previous sections?
You took the passion I have for stack-based programming languages, nice typography, and oldish book styles and made something that I will lose myself in for untold hours! Thank you so very much :D
Your comment says it best! I've already spent a few hours. Its a brilliant way to get into Forth, which I've been meaning to do - the way this presents the programming puzzles is so wonderfully self contained and brilliant!
← Return to game
Comments
Log in with itch.io to leave a comment.
is this a bug
Figure I should post this here for anyone who wants to give it a go: 204 in 1 is possible! You need to hardcode solutions to the test cases in a level or two, before you get enough tools to allow you to do slightly less hardcoding.
(Thanks to vpumeyyv for figuring out the main trick that makes it work. If you want the solution idea: Gur pubfra jbeq vf Ercynpr. Vg pna or hfrq gb uneqpbqr Genafyvgrengr, gura lbh pna znxr jbeqf yvxr Gnp hfvat pnershyyl cynprq punenpgref naq n genafyvgrengr vagb (()). (Lbh pna oernx vagb gur Qb-yvxrf jvgu Noqhpr.))
Of course...
Great game! I've managed to do 204 in 1 with some extremely heavy test case abuse.
Interesting game. I found out about it via Bluesky and have got to 204 in 4.
Chrome and Edge both detect a virus when I try to download the Windows version...
yeah you need to explicitly tell your computer it's safe.
The scholars sought a set of which the count of verbs producing all other verbs was less than 24.
Why the number 24? what was the set you had in mind?
Made a solutions sheet for least symbols used (the metric shown in the logbook) highscores on every verb. Has full solutions freely visible, so only look if you're fine with spoilers. Editing is allowed, pls no grief link
Thank you for providing this resource! Regarding this annotation:
It is possible to solve nearly every level with an appropriate Narcissus/Hero/Leander definition and a level definition like "(narcissus) 2 dip dig do", which I'm opting to not allow for this sheet.
Could you demonstrate with an example?
For a useless example, here's a solution to Caesar: (narcissus) 3 dip 3 dig (16) (23) between do
A definition of Narcissus that makes this solve work is: 3 zap(3 zap(?)(3 caesar)zap copy format)(3 caesar)zap copy format
You could imagine applying this to something with a long solution like Thirteen to save some symbols on Thirteen, though of course at the cost of making Narcissus longer. You can also construct an even better definition of Narcissus that can detect the input (especially for levels where it is significantly different than those in Narcissus) so you don't need the between.
If you haven't solved Narcissus yet on the savefile, I'm pretty you can just put some code in and it can be used in other levels despite not actually being a quine, so you could just throw a "3 caesar" in Narcissus' textbox with no problem. Once the level is solved once this seems to not work anymore though.
P.S. I removed a bunch of the solutions you added to the side because this isn't a resource for casual solves; it's specifically for symbol optimization. The multiply solution was cool though, so I optimized it a bit and left it in.
Thank you for the explanation! So you literally embed a solution in the narcissus quine then use that invocation that extracts the solution back out.So you will get a size optimization "cheese" in the case that the solution embedded in narcissus is longer than the invocation code that extracts it.
So narcissus, hero and leander can be used as some data storage if you can craft a quine or a double quine in the case of hero/leander that can embed your data!
No worries about removing the solutions I added, that's completely your prerogative. Thanks to your sheet, I was about to study and learn a whole bunch of solving tricks I wasn't aware of, such as using do after a bracketed number to unbracket it and put it in the execution stack as a prefix for an X verb. Or the fact that a bunch of unbracketed numbers together get added by the interpreter for "free" before being interpreted as a prefix for an X verb.
Nothing was spoiled for me, because I really just wanted to learn these very clever stack manipulating techniques, see them in action and appreciate all the meta programming possibilities and expressiveness of stack programming. Prior to this, whenever I saw Forth, I couldn't look past the limitations that stack manipulations seemed to impose. So many very interesting things to learn from the solutions.
When you clear one of Hero or Leander, the code in the expected output of the paired level is wiped, which makes it impossible to have both complete.
Also wtf is Thirteen can i have a hint lol. I'd LUT the level but 400 characters isn't enough to fit an LUT.
Wow, you're quite far in!
Hero bug should be fixed now! As for thirteen, gur ireo anzr znl or fvtavsvpnag
Thanks, and useful hint! Saw the FINIS now.
OK, bugs notwithstanding, I'm enjoying the heck out of this. I love the presentation so much.
But speaking of bugs...
I seem to have lost my Lielow board.[EDIT: never mind, there it is, totally forgot where I found it.]Thanks for the kind words and the feedback!
Fix to multi-definition bug uploaded!
Is the test case in Filterling that must exceed 400 symbols intended? It feels like a weird edge case to require (and is the only one where I hardcoded a test case's output since I have no idea how to change my solution to work properly on invalid input).
Oops - funny bug! Removed idle (a do-nothing verb) and forgot to update this testcase...
Thanks for reporting!
I thought this was purposeful because it was weird.
My game crashed and i lost a day of progress :( I think the game should try to save more often.
It crashed when I tried pasting something that isn't text into the game.
yeah I wished it saved upon every word completion
Sorry!
Updated downloads to save on successful word definitions.
text is way too small, is there a way to fix that?
Oops, forgot to consider this. Updated downloads with cobbled together zoom in/out (mapped to Ctrl + PLUS/MINUS) key.
This game is amazing. Really clever game concept and design.
I'd suggest two features:
1. A built-in note system. It is hard to remember every word's meaning when it grows more and more.
2. Click a word in logbook should open its page. Scrolling is inconvenient.
Can somebody give a hint about Sect V? I don't understand how to use predicates
(An example sentence is also fine)
Not every level is possible to solve with only the words you have. You should use Choice in your definitions, but you can't define it until words from later sections.
In SUB, this is one of the test cases:
(sucket) (9) (520)
...is that a message? :)
(Particularly if the definition being tested is (decrement) for, in which case this test case will keep running for a while)
Hi qwtyest,
Does the computer opponent (the term "AI" has been tainted) play a perfect game of "Lielow"? I guess I'm asking because I suck at the game and haven't managed to win. Is it like a 2D version of Nim? ie, keep your king a specific number of cells away, or something like that - a calculation the computer player is already making - or is it just a well implemented minmax opponent with good heuristics?
I love all the stylistic touches!
Thanks again for a great game!
I LOVE THE ZACHLIKE GENRE for inspiring awesome games like this!
Hi!
It's tricky to win in Lielow!
You're right that it is a minimax, but the search depth is about 3 moves and the heuristics are a bit random (some opponents will try to maximise pieces on the edges, others may try to minimise king height, for example).
I noticed the different play styles! I'll pay attention to the player names next time I play!
Found a small bug:
Thanks for catching this bug (and the detailed repro)!
Updated downloads should fix this.
I can confirm the update fixes the issue.
Thank you!
pretty good so far, I could probably remove one or two, but this is good pace.
Holy crap have you finished? Is that shown when you've defined everything?
no, just when you've defined about 60 or so.
It's a challenge to see how few words you need to define all other words.
Kind of curious what words you ended up going for.
do, maycopy, zap, swap, buryd, cat, between (you can define head ((1) (1) between) and behead ((2) (99) between) easily, so there's no reason to use anything else), same (or equivalent? pretty sure any of like replace or the substring searches can pull it off too) are all seemingly obvious choices, but it feels like nothing else should actually be necessary and making everything is awful. or is it possible to go without even all of those (or equivalent that ends up being the same amount of words)? I also haven't unlocked all the words yet, so there might be something useful in the later ones that can replace multiple of these.
Or some weird behavior you can't replicate using these somehow; I haven't made all the earlygame words either, since I was too lazy to work on fundimentals and just wanted to find the silliest solutions to the words that don't use loops... but I'll probably have to give this a go sometime. Or I might've just forgotten some behaviors you need that are pretty obviously not replicable with that list (I added the Same equivalent in an edit lol)
what section are you at? I imagine at some points you have to have some word to create other words. idk if you found some cheese, but behead at least is definitely cheesed, so you couldn't really do that "intended".
I have titlecase because I was too lazy to do it manually (I know it's easy I'll get to it)
I have two may verbs, mostly because I didn't want to worry about the logic atm.
I have box because at the time I couldn't figure it out, but I have some ideas when I get to it.
I have dig, digd, and flip, but I think I can get that to 1 word using X dig later
head, cat, and behead for other word stuff
differ for logic
superinduce, because it felt like the best "do" verb to me
and finally, sub, for arithmetic.
I'm at 15 right now. And I don't see anything as being "cheese" for an optimization challenge like this, anything that the game allows is fair for me. Like, I have a proper solution to behead, but there's no reason why I'd pick behead as a fundamental word (as you did) over between when between exists.
Simplest Box I know is ((?)) format. (edit: wrong word lmao) (well, for the golf metric it's something else with fewer chars, but you're not going to define split without some sort of box already defined.)
Actually, Tac is just ?? format. I suppose that one can be used in place of cat as a fundamental.
wow you've made some great progress! Good luck on future sections :)
Now that I think about it, there are levels that I cheesed and "conveniently" ignored the cheese so I see your reasoning. I bet the lowest amount needed is probably around 6. That sounds crazy but hear me out:
1 moving such as X swap
2 delete such as zap
3 copy such as... copy
4 altering words such as head
5 continual loops like if
6 bonus word because I probably forgot one (edit: it was cat)
1 2 3 could probably be combined into only two separate words.
even 4 or 5 total words wouldn't surprise me, but a minimum of 8 would.
zap is (0) till cat, so you don't actually need an explicit word for that at all.
Also I just realized you didn't even include something that can do Same and I have no idea how you managed to replicate it...
Now it's 141 in 13
I wonder what the last 4 words are going to be!
I'm at 73 in 49 lol I'm just happy to define the words at this stage!
Update: now I'm at 4, thanks slabdrill for some tips. Hopefully I can lower it some more
Section XX always crashes upon opening
Do you have a solution for Join?
Yes, do you want it or just a hint, Add is running right now so it might be a bit before I answer.
What do you mean by "Add is running right now"? Do you mean your definition for Add in the game?
yeah I was submitting it
Apologies for the crash!
Updated downloads with attempt at fix
It works, thanks for the quick response!
Is choice possible without words from future sections?
I implemented it using one of the May Verbs. There be some juicy puzzles ahead.
Yeah I used that as well.
I have found a small gem in the programming world. Adding to my collection.
This is where I'm currently at with JOIN:
() bury copy bury ( ) swap cat cat ( ) split do copy buryd swap cat cat swap copy (copy (copy buryd swap cat cat swap copy (copy (copy buryd swap cat cat swap copy (copy (copy buryd swap cat cat) do) if do) if do) if do) if do) if
please help
The best way makes loops is (copy do) copy do and add extra, for example
(10) (swap copy some (nip) (decrement swap copy do) choice do) copy do
or more general
Setup (Condition (Fail) (Succeed copy do) choice do) copy do
Thank you! I guess I'll have to implement some of the arithmetic words then - I don't know what was stopping me from making a utility block as you've described that wasn't explicitly presented as a word to be defined. Probably because stack based programming, as powerful and minimal and beautiful as it is, is still alien and daunting to the way I've always written software - it would have taken me a while to formulate the solution you've shown. Learning this and getting better at it is something I'm compelled to continue trying because I know deep down that there is something to what all the Forth people are on about.
Thanks for reading my long winded blog post, and thanks again for the help!
Here is my slow, long, but functioning solution for join:
() bury ( ) swap cat cat ( ) split do copy buryd swap cat cat (digd peek some (zap zap nip) (buryd bury copyd buryd cat digd cat swap copy do) choice do) copy do
it looks like your starting to figure it out! Btw, I recently learned that instead of "(A B choice) copy do" you can have "(B if) copy do A" and it's slightly faster.
Brilliant game! I've played for hours and have I've defined everything up to the May Verbs except for CHOICE, VOTE and SOME? and in Connexion I've defined CAT, KITTEN, PUMP and TAC.
Can the May Verbs be defined only using verbs in the previous sections?
Thanks again for this great game!
yes, including mayverbs themselves
You took the passion I have for stack-based programming languages, nice typography, and oldish book styles and made something that I will lose myself in for untold hours! Thank you so very much :D
Your comment says it best! I've already spent a few hours. Its a brilliant way to get into Forth, which I've been meaning to do - the way this presents the programming puzzles is so wonderfully self contained and brilliant!