Let's start at the [[beginning]]. <img src="Vague_EduJam_TitleImage.jpg"> (set: $totalLetters to 1000) <!-- Total number of letters --> (set: $characters to "ahy|eu") (set: $textWidth to (a: 3)) (set: $pyramidLine to 1) (set: $letterString to "") <!-- Normans Javascript for adding a jumbled mess of characters quickly --> <script> $letterString = Klz.generate_random_text($characters, $totalLetters) </script> <!-- (for: each _i, ...(range: 3, 50))[ (set: _rowText to (subarray: $textWidth, $pyramidLine, $pyramidLine + _i)) (set: $textWidth to it + _rowText + "\n") (set: $pyramidLine to $pyramidLine + _i) ] --> (set: _pos to 80) (set: _word to "HELP") (for: each _i, ... (range: 1, length of _word))[ (set: $letterString's (_pos + _i) to (substring: _word, _i, _i)) ] (set: _pos to 870) (set: _word to "needle") (for: each _i, ... (range: 1, length of _word))[ (set: $letterString's (_pos + _i) to (substring: _word, _i, _i)) ] (set: _pos to (random: 25, $totalLetters-30)) (set: _word to "CreditS") (for: each _i, ... (range: 1, length of _word))[ (set: $letterString's (_pos + _i) to (substring: _word, _i, _i)) ] <!-- (set: $break_string to "") <script> $break_string = Klz.line_break_text($letterString, $textWidth) </script>} (set: $pyramid_string to "") <script> $pyramid_string = Klz.text_pyramid($letterString) </script> -->There is a philosophical exercise known as the Sorites Paradox. It deals with a difficulty of definition and of some terms being vague; in this case: When is a heap a heap? A heap is a large number of items, right? So if you take one away, is it still a heap? What about if you take two items away? Or half the heap? What if you take all items but one? When does it stop being a heap? Let's visualise. (after: 1s)+(t8n: "dissolve")[Shall we call this a heap?] []<few|{ (set: $clickCount to 0) [(after: 2s)[ (if: $letterString's length > 0)[ (t8n: "dissolve")[(link-repeat:"Take one away.")[(set: $clickCount to $clickCount + 1) (set: $letterString to (substring: $letterString, 2, $letterString's length)) (rerun: ?string, ?wordle) ]]]]]<take1| }{ (event: when $clickCount is >= 6)[ (replace: ?few)[(t8n: "dissolve")[You've taken away a few items from the heap. Do you feel it is no longer a heap?]] (replace: ?take1)[] (set: $few to true) ] } { (event: when $few is true)[ (if: $letterString's length > 0)[ (t8n: "dissolve")[ (link-repeat: "Let's take away a bunch more. Click like you mean it!")[ (set: $clickCount to $clickCount + 1) (set: $letterString to (substring: $letterString, 2, $letterString's length)) (rerun: ?string, ?wordle) ] ]<bunch_done| ] ]<take2| } { (event: when $clickCount >= 20)[ (set: $bunch to true, $hangon to true) (replace: ?bunch)[ (t8n: "dissolve")[How about now? Still a heap?<br/> [[Hang on.]]] (replace: ?bunch_done)[Let's take away a bunch more. Click like you mean it!] ] ]}[]<bunch| |string>[(css:" word-break: break-all")[(print: $letterString)]] [(replace: "HELP")[(colour: #42130a )[(link-goto: "HELP")]] (replace: "needle")[(colour: #42130a )[(link-goto: "needle")]] (replace: "CreditS")[(colour: #42130a )[(link-goto: "CreditS")]] (replace: "devlog")[(colour: #42130a )[(link-goto: "devlog")]]]<wordle|We are in a haystack, so naturally there is a needle. While the simplest solution to finding an actual needle in an actual haystack will likely be a magnet (given a common needle, anyway), you should be rewarded for finding this and being curious. Vagueness: In linguistics and philosophy, a vague (from Middle French vague, from Latin vagus (“uncertain, vague”, literally “wandering, rambling, strolling”)) predicate is one which gives rise to borderline cases. For example, the English adjective "tall" is vague since it is not clearly true or false (<a href ="https://en.wikipedia.org/wiki/Truth_value">truth value</a>) for someone of middling height. By contrast, the word "prime" is not vague since every number is definitively either prime or not (this is the currently highest prime number known, as of Oct 12, 2024: 881694327503833265553939100378117358971207354509066041067156376412422630694756841441725990347723283108837509739959776874 ... (41,024,080 digits skipped) ... 852806517931459412567957568284228288124096109707961148305849349766085764170715060409404509622104665555076706219486871551). Vagueness is commonly diagnosed by a predicate's ability to give rise to the Sorites paradox. Learn <a href="https://en.wikipedia.org/wiki/Vagueness">more on Wikipedia.</a>This small piece of interactive fiction illustrates the Sorites Paradox, or paradox of the heap, which my native German also knows as the Heuhaufen-Problem (haystack problem). This is a game insofar that when you are presented with a screen of content and pushing a button changes something, it is a game. You can <a href=">https://en.wikipedia.org/wiki/Sorites_paradox">learn more about it on Wikipedia</a>.Created for Educational Jam, November 2024. Programmed in Twine (with Harlowe 3). Published by Make it a Triple. Design, writing, research, programming, visuals: Jennifer S. Lange Additional programming: Norman Lorenz Our thanks go to Wikipedia.What about now? The heap is half the size it was in the beginning.{<br/> (if: $letterString's length > 0)[ (set: $clickCount to $clickCount + 1, $half to true) (set: $letterString to (substring: $letterString, 2, (floor: $totalLetters/2))) (rerun: ?string, ?wordle) ]}{ (event: when $half is true)[(after: 2s)[Let's just flatten this a bit more. (if: $letterString's length > 0)[ (set: $clickCount to $clickCount + 1) (set: $letterString to (substring: $letterString, 2, (floor: $totalLetters/3))) (rerun: ?string, ?wordle)(set: $third to true)]]] (event: when $third is true)[Now it's a third the initial size. It's still a lot though; still a heap.] } (event: when $third is true)[(t8n: "Dissolve")[What if I now [[take away one more?]]<br/>]] |string>[(css:" word-break: break-all")[(print: $letterString)]] [(replace: "HELP")[(colour: #42130a )[(link-goto: "HELP")]] (replace: "needle")[(colour: #42130a )[(link-goto: "needle")]] (replace: "CreditS")[(colour: #42130a )[(link-goto: "CreditS")]] (replace: "devlog")[(colour: #42130a )[(link-goto: "devlog")]]]<wordle|The underlying issue with this paradox is, of course, that it mixes two things that are too different: our experience of the real world, in which there are heaps of different sizes; and the desire for formal description of something that is not based on mathematical values. There is neither "no heap" or "only heaps", because the formula would need to describe the entirety of reality to a degree where it would make a difference if we add or subtract one item to or from a heap (or a thing that isn't a heap, of course). Saying that people who still assume that heaps exist are wrong is silly, as is to say that there are no heaps at all. We just have no means to measure what a proper heap is. Yet they exist. It's easy to feel smart about having found such a perplexing thought construct as these paradoxa (like the infamous bumblebee, that allegedly couldn't fly, because its wings were not large enough; with the lesson, naturally, being that if math results in bumblebees being flightless, then math must be lacking, not nature be wrong. Always be careful when thinking scientists are not so smart after all, because most funny anecdotes about stupid geniuses are just that), but the lesson to be learned is that some things can't be quantified, like heaps (yet, at least); that other things are not in need of being quantified to a high degree, like language; and that still other things are very valuable as a simplified model of reality. Sometimes public debate forgets that science is incredibly valuable, but uses an abstract version of reality to ever get anywhere. On the other hand, saying that "numbers don't lie" forgets that not all matters have numbers assigned to them. How would we measure the important things like birthday cakes, cat content, and hugs? And at the same time, science makes those abstractions and is still right about the rules this allows to discover. In the coming days of loud screamers telling you that, despite all evidence to the contrary, only they know how the world works, but deliver no proof, please remember to think scientifically. You can <a href="https://en.wikipedia.org/wiki/Sorites_paradox">learn more about the Sorites Paradox on Wikipedia</a>. They even have math. And you can also <a href="https://en.wikipedia.org/wiki/List_of_fallacies">learn about logic</a> there, which may be even more useful in the near future. (text-size: 2)[Thank you for playing!] //Credits: Design, writing, research, programming, visuals: Jennifer S. Lange Additional programming: Norman Lorenz Published by Make it a Triple // (set: $letterString to (substring: $letterString, 2, (floor: $totalLetters/3))) { (if: $letterString's length > 0)[ (t8n: "dissolve")[(link:"And then one more?")[(set: $clickCount to $clickCount + 1) (set: $letterString to (substring: $letterString, 3, (floor: $totalLetters/3))) (rerun: ?string, ?wordle)(set: $one_more to true) ]]]<one_more| } { (event: when $one_more is true)[ (if: $letterString's length > 0)[ (t8n: "dissolve")[ (link:"And maybe ten more after that?")[ (set: $clickCount to $clickCount + 1) (set: $letterString to (substring: $letterString, 3, (floor: $totalLetters/3-10))) (rerun: ?string, ?wordle)(set: $ten_more to true) ]]]]<ten_more| } { (event: when $ten_more is true)[ (if: $letterString's length > 0)[ (t8n: "dissolve")[ (link:"And then still one more?")[ (set: $clickCount to $clickCount + 1) (set: $letterString to (substring: $letterString, 3, (floor: $totalLetters/3-1))) (rerun: ?string, ?wordle)(set: $three to true) ]]]]<still_more| } (event: when $three is true)[(t8n: "dissolve")[When can I stop and it's still a heap? Will three still be a heap? [[Let's see.]]]]<stop| |string>[(css:" word-break: break-all")[(print: $letterString)]] [(replace: "HELP")[(colour: #42130a )[(link-goto: "HELP")]] (replace: "needle")[(colour: #42130a )[(link-goto: "needle")]] (replace: "CreditS")[(colour: #42130a )[(link-goto: "CreditS")]] (replace: "devlog")[(colour: #42130a )[(link-goto: "devlog")]]]<wordle|(set: $letterString to (substring: $letterString, 1, 3))Now? This is [[no longer a heap]]? |string>[(css:" word-break: break-all")[(print: $letterString)]]{<!-- Normans Javascript for adding a jumbled mess of characters quickly --> <script> $letterString = Klz.generate_random_text($characters, $totalLetters) </script> (if: $letterString's length > 0)[ (t8n: "dissolve")[ [[How about ten?]]] (set: $clickCount to $clickCount + 1) (set: $letterString to (substring: $letterString, 1, 10)) (rerun: ?string)] } |string>[(css:" word-break: break-all")[(print: $letterString)]]{<!-- Normans Javascript for adding a jumbled mess of characters quickly --> <script> $letterString = Klz.generate_random_text($characters, $totalLetters) </script> (if: $letterString's length > 0)[ (t8n: "dissolve")[ A hundred? It was three hundred a minute ago, and that looked pretty much like a heap.] (set: $clickCount to $clickCount + 1) (set: $letterString to (substring: $letterString, 1, 100)) (rerun: ?string) ]<hundred| } (click: ?hundred)[Alright, I think [[we got it now.]]] |string>[(css:" word-break: break-all")[(print: $letterString)]]