master
Miloslav Ciz 1 month ago
parent 78e9ea0902
commit fdb6507a9f

@ -109,6 +109,6 @@ Here is a list of notable computers.
| [Deep Thought](deep_thought.md) | | | fictional computer from Hitchhiker's Guide ... |
| [HAL 9000](hal_9000.md) | | | fictional AI computer (2001: A Space Oddysey) |
|[PD computer](public_domain_computer.md) | | | planned LRS computer |
|[Turing machine](turing_machine.md) | | | important theoretical computer by Alan Turing |
| [Turing machine](turing_machine.md) | | infinite RAM | important theoretical computer by Alan Turing |
TODO: mnt reform 2, pinephone, 3DO, ti-89, quantum?

@ -0,0 +1,15 @@
# Czechia
Czechia, or Czech Republic, is a small country in the middle of [Europe](europe.md), it's one of the worst countries in the world. It split from Czechoslovakia in 1993, its capital is Prague, it has about 78 square kilometers and population of 11 millions. In the past the country wasn't so bad, there was a good tradition of [socialism](socialism.md) so people had complete social security, education was completely free, everyone could afford food, there were very few ads in the media and generally people were quite happy, everyone would get healthcare and retirement pension; there was also quite diverse culture of different villages with their own language dialects and traditions, there was zero crime, no one ever heard of guns or violence there, there was no fear, and art was also somewhat nice, especially music, movies and movie dubbing. All of this disappeared swiftly once the country adopted [capitalism](capitalism.md) and [US](usa.md) culture after the so called *Velvet revolution* at the beginning of 1990s. Recently people were again made to vote -- the choices were to either make everything more shitty or to make things better. They voted to make everything shittier, so inflation is now skyrocketing, people are freezing in winter, TV is unwatchable, food is luxury, let alone things like houses, nothing works, everyone is enslaved, retirement age was postponed to something like 100 years of age plus you must have worked for about 80 years or something (this gets increased every year), ads torture you everywhere, there is no art anymore, health insurance payment is mandatory but you still have to pay for healthcare, but you won't find a doctor anyway, there are no doctors anymore (everyone went to do [marketing](marketing.md)). The country is only famous for its tradition of drinking a lot of beer. Czech people are mostly described by foreigners as cold, unfriendly, rude and ugly. One of the most famous politicians is a Czech Neonazi who's actually Japanese. Czechia has no historical, political or cultural significance.
Except for [drummyfish](drummyfish.md) only fascists live in the country, essentially everyone is a nationalist.
**There is literally NOTHING in this shitty country**, it doesn't make any sense for anyone to go there. No, girls won't sleep with you unless you pay. Sea? The country is as far away from the sea as it gets on the continent. Mountains? Nope, there's maybe one or two medium sized hills. Nice nature, like some cool waterfalls or something? Nope, plastic shit everywhere, roads, light pollution, only boring animals and normal generic trees. Nice weather? Nope, most of the time there is autumn weather, too cold to go swimming, too hot for snow to fall, it's always either windy or raining and if you have allergies don't even try to go out. There are great many mosquitos though. Nice architecture? No, just depressive old soviet buildings or ugly capitalist shit. Nice cities? No lol, one of the most famous cities, Ostrava, is just famous for drowning in smog, people of the city made that part of their identity. Prague? That's the most shitty garbage city on Earth, there is literally nothing, just one old bridge, there is NOTHING else in there, and the bridge looks like shit anyway. Furthermore worst human scum lives in Prague, it's like little [USA](usa.md), basically a city of youtubers, it has the greatest concentration of cretins on square meter, it makes you wanna kill yourself just to hear someone talk or see someone's face there -- in fact in Prague there is a bridge specifically dedicated to suicides because suicide is in such a high demand there.
Czech [language](human_language.md) is unironically **the worst language** that there ever was or ever will be. Firstly it sounds horrible, secondly it's the hardest language on Earth, it has seven cases and declinations and things that make every word have like 20 distinct forms (e.g. "to teach": ucit, ucil, ucila, ucilo, ucili jsme, ucili jste, ucili, ucim, ucis, uci, ucime, ucite, budu ucit, budes ucit, ucil bych, ucila bys, ucili bychom, ... ; "dog": pes, psa, psu, psovi, psi, pse, psy, psum, psech, pejsek, pejsku, pejskovi, pejsky, ... ; "cat": kocka, kocce, kocku, kockou, kocky, kockam, kocicka, kocicce, kocicku, kocickami, ...) PLUS, according to Guinness World Record Book, it also contains the most difficult sound to pronounce (that *r* with arrow above it, great many natives actually can't say it, it's called *rackovani*), there are so many irregularities that children spend whole years at school just hardcore memorizing when to write *y* versus *i* (which are pronounced completely the same, you just have to know which one to write because why not), also for example commas and capitalization of words have strict, extremely difficult rules that again have to be memorized. AND all this effort is for nothing, it doesn't make a slightest sense to learn the language because no one excepts a few idiots in middle of Europe speak it (and not even they speak it well), you will literally hear it nowhere else. So that's another thing.
Czechia had the worst presidents of every country, even in comparison with African shitholes and so on. Havel, the only president who came before capitalism, was alright, after him only absolute retards came, every one was much worse than all the rest combined (that's mathematically impossible but they still managed to do it). For example Zeman was the worst retard in the whole country so he got elected, he looked like Vogon from Hitchhiker's Guide to Galaxy except worse, was constantly drunk, rude, had to be carried around like a little baby by his bodyguards because he couldn't walk straight, he almost threw up on national crown jewels and his most famous moment was when he tried to demonstrate his knowledge of [English](english.md) by explaining to some reporter the meaning of the word "pussy" while getting the pronunciation completely wrong. Klaus was a 10 [IQ](iq.md) capitalist thief who, despite making millions as a president, was stealing pencils while being filmed on camera. You can't make this shit up. The current president is a narcissist professional murderer and war promoter.
The greatest Czech was Jara Cimrman, a fictional genius whom the people made up to have someone to look up to. The history of the country is also completely made up, it was crafted to serve nationalism, to justify things like separatism and murdering Germans after the war and also to destroy the country etc.
All in all avoid this piece of crap place.

@ -10,9 +10,9 @@ Here there should be a set of exercise problems for those wishing to pursue [LRS
See also [needed projects](needed.md).
Here you will find suggestions for programming projects, roughly sorted by their difficulty (in each level projects will be sorted roughly by difficulty too). You can use this to practice what you've learned in [c tutorial](c_tutorial.md), try to follow the [LRS](lrs.md) principles. We are kind of assuming you'll be programming these projects in [C](c.md) -- that's how we judge the difficulty etc. -- but of course no one is stopping you to make the project in another language if you so desire :)
Here you will find suggestions for programming projects primarily focused on practicing programming, but made so that they can theoretically be expanded to something useful as well. They will be roughly sorted by difficulty (under each level projects will be approximately sorted by difficulty too). You can use this to practice what you've learned in [C tutorial](c_tutorial.md). Try to follow the [LRS](lrs.md) principles. We more or less assume you'll be programming in [C](c.md) -- that's how we judge the difficulty etc. -- but of course no one is stopping you from using another language, just remember it may become much more easy or difficult.
**LRS programming challenge!** If you want you can treat this as a [game](game.md), kind of achievements you can collect. You can even make a git repo for your solutions so others can see and admire them { I'll be glad if you send me a link. ~drummyfish } Here are the rules:
**LRS programming challenge!** If you desire "motivation", treat this as a [game](game.md), the projects are achievements you can collect. Then it would be cool if you make a git repo or something to show it to the world { I'll be glad to see it, drop me a link :) ~drummyfish } Here are the rules:
- Award yourself points like this:
- 1 point for a completed project in level 0.
@ -20,8 +20,8 @@ Here you will find suggestions for programming projects, roughly sorted by their
- 16 points for a completed project in level 2.
- 64 points for a completed project in level 3.
- 256 points for a completed project in level 4.
- If you complete all projects in level *N*, you can automatically consider all projects of all lower levels completed as well, i.e. if you complete whole level 2, count yourself whole level 1 and 0 as well. (Once achieved you'll keep it forever, i.e. if more projects later appear in given level that you won't have solved, it won't take away your lower level points.)
- A project is considered completed only if you really complete all the requirements! It is not enough to say "mmm, I could do this if I wanted" -- no, you have to REALLY DO IT to count. If the requirement is to make a complete game, a buggy demo doesn't count. Also if you just use some cheat, use 100 libraries to do everything for you, you know you didn't really complete it :) If it's obvious implementing something is part of the challenge (for example collision detection in physics engine), you cannot use a library for it, you have to do it yourself. Just be honest with yourself.
- If you complete all projects in level *N*, you can automatically consider all projects of all lower levels completed as well, i.e. if you complete whole level 2, count yourself whole level 1 and 0 as well. (Once achieved you'll keep it forever, i.e. if more projects appear in given level later on that you won't have solved, it won't take away your lower level points. Hopefully you get it.)
- A project is considered completed only if you REALLY complete all of its requirements! It's not enough to say "mmm, I could do this if I wanted" -- no, you have to REALLY DO IT for it to count. If the requirement is to make a complete game, a buggy demo doesn't count. Also if you just use some cheat, use 100 libraries to do everything for you, you know you didn't really complete it :) If it's obvious implementing something is part of the challenge (for example collision detection in physics engine), you cannot use a library for it, you have to do it yourself. Just be honest with yourself.
- You CANNOT award yourself partial points, i.e. if you meet 90% of requirements for some project, you CANNOT give yourself 90% points for it, not even one point. Complete it 100%, then get 100% points. Again, it doesn't count to say "mmm, I could finish this if I wanted" -- no, until you finish it it's not finished. This is part of the challenge and insisting on it also makes you potentially make a nice, tidy program that will increase good in the world ;)
- You may reuse your own code without it counting as third party library, i.e. if you write 3D renderer in one project, you can use it in writing 3D game as another project, with it counting as if you wrote everything from scratch just for that project.
- Don't [cheat](cheating.md), you're only cheating yourself :)
@ -57,12 +57,13 @@ Here you will find suggestions for programming projects, roughly sorted by their
3. **[gopher](gopher.md) browser**: Write interactive gopher browser -- it can be a purely [command line](cli.md) browser. It has to be able to follow links and go back at least one page. The program must include some basic help and ability to save files to disk.
4. **simple text [compression](compression.md)**: Write a program that can compress and decompress plain [ASCII](ascii.md) text files using some very simple technique like [run length encoding](rle.md) (RLE) or dictionary methods (you can even use a fixed dictionary, e.g. have a list of common English words that you will represent by some shorter symbols). You can assume input characters will only have 7bit ASCII codes, so you can compress the text also by dropping the 8th unused bit. You don't have to achieve great compression ratio (you can even enlarge some files), but you must pass the following test: take the program's source code, this article's plain text and Wikipedia main page plain text, your program must compress at least two of these to a smaller size (and of course successfully decompress them into identical files). The program must work as a [filter](filter.md), i.e. it mustn't load the whole file into memory or perform multiple passes, it has to use approximately same amount of RAM for input of any size.
5. **stupid chatbot**: Make an entertaining chatbot that can react to basic sentences like "how are you?", "are you a robot?", "tell me a joke" and so on. It must give a human-like answer to at least 50 different sentences. It has to deal with typos and text variability a little bit (for example multiple spaces in a row or all caps text mustn't confuse it). It must have a mood meter which changes depending on what the partner says -- for example if the bot gets insulted, it gets more angry and starts inserting profanity to responses; on the other hand if it's happy it will insert nice smiley faces etc. The bot also has to remember and use the name of its chat partner if that is brought up. Test the bot by having it chat with itself.
6. **arbitrary size [rational numbers](rational_number.md)**: Make a library that allows working with arbitrary size rational numbers, i.e. represent each number as a pair of numerator and denominator, the number will be automatically allocating itself as much memory as it needs for storing the two numbers. It mustn't waste too much memory, i.e. whenever it changes, it will try to reallocate its memory and decrease its size if possible. Size of the number will only be limited by amount of RAM your program can use. Furthermore implement these operations with the numbers: converting to/from the language's native numbers (with rounding if necessary), comparisons (equal, greater, greater or equal, smaller, smaller or equal), addition, subtraction, multiplication, division and printing and/or converting the number to string (at least decimal -- if the number has infinitely many fractional digits, just cut the output somewhere).
6. **arbitrary size [rational numbers](rational_number.md)**: Make a library that allows working with arbitrary size rational numbers, i.e. represent each number as a pair of numerator and denominator, the number will be automatically allocating itself as much memory as it needs for storing the two internal values. Negative numbers must be supported too. It mustn't waste too much memory, i.e. whenever it changes, it will try to simplify the fraction and, if possible, decrease its size and allocate less memory. Size of the number will only be limited by amount of RAM your program can use. Furthermore implement these operations with the numbers: converting to/from the language's native numbers (with rounding if necessary), comparisons (equal, greater, greater or equal, smaller, smaller or equal), addition, subtraction, multiplication, division and printing and/or converting the number to string (at least decimal -- if the number has infinitely many fractional digits, just cut the output somewhere).
7. **image to [ASCII art](ascii_art.md)**: Make a program that takes an RGB bitmap image and renders it with ASCII characters (i.e. prints it out to console). You can support loading the image from just one file format of your choice, possibly something simple like PPM, BMP or Farbfeld. The program must support resizing the image and it must allow to just set one dimension with keeping the aspect ratio. Thumbs up for extra features like setting brightness/contrast and so on.
8. **educational [sorting](sorting.md) visualization**: Make a program for visualizing sorting algorithms -- it may draw real graphics (either directly to the screen or by outputting animation file) or just render ASCII art graphics, but it has to clearly show what the sorting algorithm is doing, i.e. which elements are being compared, which are swapped and if it makes good sense to highlight something else (like the pivot or already sorted part of the array), you should do it. Implement at least bubble sort, insertion sort, selection sort and quick sort. Also offer benchmark mode in which all algorithms race in sorting the same array (this can be without advanced visualization, just show e.g. number of steps for each).
9. **3D model of [fractal](fractal.md)**: Make a program that outputs 3D model of either Siepinski triangle or Koch snowflake fractal. The output shall be some simple 3D format like obj or Collada. The model can be primitive, i.e. it can be just flat shape made of triangles which don't have to really be connected, but the program must allow specifying the number of iterations of the fractal (during invocation, e.g. as a CLI flag). Check that the model is correct by opening it in some 3D editor such as Blender.
10. **[sudoku](sudoku.md) solver**: Create a program to which the user somehow passes a sudoku puzzle (in a file, through a CLI flag, interactively... the choice is yours, but passing a new puzzle mustn't require program recompilation) and the program attempts to solve it. It must first employ some basic reasoning, at very least it has to repeatedly try the elimination method, i.e. marking a set of possible values in each empty square and then reducing these sets by crossing out values that can't be in that square because the same value is in its column/row/minisquare -- wherever only one value remains in the set, it is filled in as final; this has to be repeated until no more progress is being made. If you want, you can employ other techniques as well. After this if the puzzle is still not solved, the program will resort to [brute force](brute_force.md) which has to eventually lead to solution (even if it would take too long). If the program finds that the puzzle is unsolvable, it has to report it.
11. **language recognizer**: Make a program that will be able to learn and then recognize language of text it is given (in theory it should work for any kind of language, be it human or computer language). Specifically the program will first get *N* files, each one representing a different language (e.g. 5 books in different human languages), then it will take some other text and say to which of the initial *N* files it is linguistically most similar. For simplicity assume only plain ASCII files on input (you can just use some Unicode to ASCII utility on all input files). Use some simple [machine learning](machine_learning.md) technique such as some variant of k-NN. It will suffice if for each training example you construct a vector of some nice features, for example {average word length, vowel/consonant ratio, relative frequency of letter A, relative frequency of letter E, ...}, give each component some weight and then just find the nearest neighbour to the tested sample in this feature space (if you want to be more fancy, split the input files into parts so you get more training samples, then try k-NN with some convenient k). You shouldn't and CANNOT use neural networks, and of course you CANNOT use any machine learning library ;) You don't have to achieve great accuracy but your program should likely be able to quite reliably tell e.g. German from C++.
10. **[steganography](steganography.md)**: Make a program that hides text strings in either pictures, sounds or another text. The program must be a nice [CLI](cli.md) utility that performs both encoding and decoding -- it will allow the user to specify the string to hide (this string can be simplified to take less space, e.g. it may be converted to all caps, special characters may be removed etc.) and the data in which to embed them. The size of the string that can be encoded will of course be limited by how much space there is in the data, so you can reject or shorten the string if that's the case. The string must NOT be hidden in metadata (i.e. exif tags, file header, after the data, ...), it must be encoded in the useful data itself, i.e. in pixels of the picture, samples of the sound or characters of the text, but it mustn't be apparent that there is something hidden in the data. Use some simple technique, for example in images and sound you can often change the least significant bits without it being noticed, in text you can insert typos, hyphens, replace some periods with semicolons etc. Get creative.
11. **[sudoku](sudoku.md) solver**: Create a program to which the user somehow passes a sudoku puzzle (in a file, through a CLI flag, interactively... the choice is yours, but passing a new puzzle mustn't require program recompilation) and the program attempts to solve it. It must first employ some basic reasoning, at very least it has to repeatedly try the elimination method, i.e. marking a set of possible values in each empty square and then reducing these sets by crossing out values that can't be in that square because the same value is in its column/row/minisquare -- wherever only one value remains in the set, it is filled in as final; this has to be repeated until no more progress is being made. If you want, you can employ other techniques as well. After this if the puzzle is still not solved, the program will resort to [brute force](brute_force.md) which has to eventually lead to solution (even if it would take too long). If the program finds that the puzzle is unsolvable, it has to report it.
12. **language recognizer**: Make a program that will be able to learn and then recognize language of text it is given (in theory it should work for any kind of language, be it human or computer language). Specifically the program will first get *N* files, each one representing a different language (e.g. 5 books in different human languages), then it will take some other text and say to which of the initial *N* files it is linguistically most similar. For simplicity assume only plain ASCII files on input (you can just use some Unicode to ASCII utility on all input files). Use some simple [machine learning](machine_learning.md) technique such as some variant of k-NN. It will suffice if for each training example you construct a vector of some nice features, for example {average word length, vowel/consonant ratio, relative frequency of letter A, relative frequency of letter E, ...}, give each component some weight and then just find the nearest neighbour to the tested sample in this feature space (if you want to be more fancy, split the input files into parts so you get more training samples, then try k-NN with some convenient k). You shouldn't and CANNOT use neural networks, and of course you CANNOT use any machine learning library ;) You don't have to achieve great accuracy but your program should likely be able to quite reliably tell e.g. German from C++.
### Level 3: Hard, *Ultra Violence*
@ -77,8 +78,9 @@ Here you will find suggestions for programming projects, roughly sorted by their
9. **3D [path tracer](path_tracing.md) without [floating point](float.md)**: Write a path tracer (NOT a mere [ray tracer](ray_tracing.md)) without using floating point. It can only produce static images that may just be saved to a file in some simple format (no need to draw real time animation to the screen). It must be possible to position and rotate the camera arbitrarily and to set its field of view. It has to support several shapes of objects in the scene: at least a sphere, plane and cylinder, and it must support transparent objects. Thumbs up for supporting polygonal models, depth of field and loading scene description from a file.
10. **[gopher](gopher.md) fulltext search engine**: Create a whole search engine (with crawler, index creator, user frontend, ...) for the gopher network. It can store its database just to flat files (no need to use SQL or something like that). It has to allow at least very basic fulltext search, i.e. about each gopher site you'll have to remember which words it contains (and possibly their count), so that if the user searched e.g. for `cats dogs`, you'll give him sites that contain both of these words somewhere in their text -- offer options to search either for sites containing all searched words or just some of them. Besides this you can make simplifications (ignore case, don't support Unicode, special characters etc.). Thumbs up for additional features like creating a graphical map of the crawled gopherspace along the way.
11. **[Jpeg](jpg.md) clone**: Create a usable format for photo images with lossy [compression](compression.md), similar to [Jpeg](jpg.md), that achieves good compression ratio and allows setting compression level, including setting compression level 0 (when it will only apply lossless compression). The format doesn't have to store any metadata, it's enough if it holds a 24 bit RGB bitmap of arbitrary resolution. For compression it must do at least following: separating the color and intensity channel and subsampling the color channel (see e.g. [YCbCr](ycbcr.md)), then converting the image to frequency domain (probably with [discrete cosine transformation](dct.md)) and quantizing the high frequencies, and then applying at least some lossless compression (RLE or Huffman coding or something). You can't use any libraries to do the described things (e.g. DCT, color conversion etc.), do it all yourself. The program, with medium compression level set, has to beat lz4 at compressing photos at least 90% times (in theory it should win always but we'll give you some margin if you fuck something up).
12. **console [emulator](emulation.md)**: Make an emulator of either [PlayStation 1](ps1.md), Nintendo64, GameGear or any version of [GameBoy](gameboy.md) (GB, GBC or GBA). You can use a library for 3D rendering if you need it. You don't have to implement networking or weird/non-standard features (like light sensor etc.). You don't have to achieve high accuracy but at least a few games should be playable. You have to allow saving/loading game states. Sound support can be basic.
13. **[genetic programming](genetic_programming.md)**: Create a [KISS](kiss.md) genetic programming framework. Make some kind of simple, low level model of computation, its language (something like Turing machine, brainfuck, Forth etc.) and its interpreter, then implement firstly generating random programs, secondly randomizing (mutating) existing programs and thirdly combining existing programs (creating offspring). Now create a system that will spawn a population of random programs and will then direct its evolution by generations toward optimizing performance at some given task -- this performance will be measured by fitness function (which will somehow score any given program depending on how well it's working) that will be customizable in your framework, i.e. anyone must be easily able to rewrite the fitness function to whatever he desires (it's okay if changing fitness function requires recompilation of your program). In each generation your framework will remove badly performing programs, breed new programs by combining well performing ones, randomly mutate some programs and add in a few new completely random programs -- specific parameters of this must also be curstomizable (again, recompilation here is okay). Test this by evolving some simple program (solving a maze, quadratic equation, blurring an image or something similar).
12. **[text editor](text_editor.md)**: Make a usable text editor. It can have [GUI](gui.md), [TUI](tui.md) or both, and must be at least as comparable in power to traditional basic editors like Gedit, Pluma and so on. It has to be able to edit gigantic files without taking up too much RAM which means you have to be able to dynamically load just parts of the edited file depending on which part is being edited (smaller files can be loaded as a whole of course). Performance must be good, so you probably have to use some advanced representation of the edited text, not just "one big string". Cursor navigation must work like it does in other editors (correctly handle cases like jumping vertically from longer line to shorter line and back). All basic features must be present, including *save*/*save all*/*search/replace string*/*cut/copy/paste*/showing cursor position/etc. Additionally it must allow editing multiple files at once (i.e. tabs, screen splits or something like that) and configuring the editor a bit (something like show/hide line numbers, set font size, dark mode etc.). You don't have to support other encodings than ASCII or syntax highlighting (but thumbs up even for hardcoding some generic syntax highlight).
13. **console [emulator](emulation.md)**: Make an emulator of either [PlayStation 1](ps1.md), Nintendo64, GameGear or any version of [GameBoy](gameboy.md) (GB, GBC or GBA). You can use a library for 3D rendering if you need it. You don't have to implement networking or weird/non-standard features (like light sensor etc.). You don't have to achieve high accuracy but at least a few games should be playable. You have to allow saving/loading game states. Sound support can be basic.
14. **[genetic programming](genetic_programming.md)**: Create a [KISS](kiss.md) genetic programming framework. Make some kind of simple, low level model of computation, its language (something like Turing machine, brainfuck, Forth etc.) and its interpreter, then implement firstly generating random programs, secondly randomizing (mutating) existing programs and thirdly combining existing programs (creating offspring). Now create a system that will spawn a population of random programs and will then direct its evolution by generations toward optimizing performance at some given task -- this performance will be measured by fitness function (which will somehow score any given program depending on how well it's working) that will be customizable in your framework, i.e. anyone must be easily able to rewrite the fitness function to whatever he desires (it's okay if changing fitness function requires recompilation of your program). In each generation your framework will remove badly performing programs, breed new programs by combining well performing ones, randomly mutate some programs and add in a few new completely random programs -- specific parameters of this must also be curstomizable (again, recompilation here is okay). Test this by evolving some simple program (solving a maze, quadratic equation, blurring an image or something similar).
### Level 4: God Tier, *!Nightmare!*
@ -89,7 +91,7 @@ Here you will find suggestions for programming projects, roughly sorted by their
5. **the grandest program of all time**: Make a program that (in a simplified way but still) simulates the whole [Universe](universe.md) and allows its user to explore and zoom in on anything not just in vast space but mainly on Earth, in big and small scales AND in all times in past and future, while the simulation approximately matches our available data (i.e. recorded historical events, famous people, geography, known bodies in the Universe etc.) and procedurally generates/interpolates/extrapolates unknown data (i.e. for example if we don't know what Napoleon did on a certain day, the program will make some guess and show him doing something). This will be the great visual encyclopedia in which one can observe the big bang, [Jesus](jesus.md), dinosaurs, black holes, the future destruction of Earth and so on.
6. **ruin [bitcoin](bitcoin.md)**: Make a program that can mine one bitcoin by running for at most one minute on some consumer laptop released before year 2010. Warning: this is probably unsolvable, but if you solve it you may help save the planet :P
TODO: text editor, tetris, voice synth?, snake, quadratic equation, fractals, 2D raycasting, fourier transform, primes, image library, web browser, diff, HTML parser/visualizer?, markov chain, syntax beautifier, grep, some kinda server, function plotter, pi digits, 2D physics engine, encryption?, custom markup lang, procedural MIDI, machine translation?, maze gen., genetic prog., language recognizer, AI?, photogrammetry, solar system simulator, emulator, chat (P2P?), auto integrator, steganography, driver? ...
TODO: tetris, voice synth?, snake, quadratic equation, fractals, 2D raycasting, fourier transform, primes, image library, web browser, diff, HTML parser/visualizer?, markov chain, syntax beautifier, grep, some kinda server, function plotter, pi digits, 2D physics engine, encryption?, custom markup lang, procedural MIDI, machine translation?, maze gen., genetic prog., language recognizer, AI?, photogrammetry, solar system simulator, emulator, chat (P2P?), auto integrator, steganography, driver? ...
## Quiz/Questions/Problems/Test
@ -116,7 +118,7 @@ Here are some questions to test your LRS related knowledge :D
19. Solve these [anagrams](anagram.md): *no cure sir*, *come piss ron*, *ginger*, *nicer shops*, *fog tag*, *trek now*.
20. In 3D computer [graphics](graphics.md) what's the difference between [shading](shading.md) and drawing [shadows](shadow.md)?
21. Can we say [neural networks](neural_network.md) are [Turing complete](turing_complete.md)? Explain why or why not.
22. 22. Wicw mx uum yvfe bbt uhmtf ok?
22. Wicw mx uum yvfe bbt uhmtf ok?
23. What is the principle of [asymmetric cryptography](asymmetric_cryptography.md) and why is it called *asymmetric*?
24. WARNING: VERY HARD. There are two integers, both greater than 1 and smaller than 100. *P* knows their product, *S* knows their sum. They have this conversation: *P* says: I don't know the numbers. *S* says: I know you don't, I don't know them either. *P* says: now I know them. *S* says: now I know them too. What are the numbers? To solve this you are allowed to use a programming language, pen and paper etc. { Holy shit this took me like a whole day. ~drummyfish }
25. Did you enjoy this quiz?

@ -157,4 +157,5 @@ As for **non-computer games**: these are usually closer to LRS than any computer
- [chess](chess.md)
- [gamebook](gamebook.md)
- [tangram](tangram.md)
- [game of life](game_of_life.md)
- [game of life](game_of_life.md)
- [minesweeper](minesweeper.md)

@ -0,0 +1,24 @@
# Minesweeper
Minesweeper is a simple but entertaining singleplayer puzzle [game](game.md) whose objective is to deduce the locations of all mines hidden in a square grid from certain clues and mark all the mines without detonating any of them. Commonly the game is treated as a [minigame](minigame.md) but can be taken to much higher level for example with [speedrunning](speedrunning.md) or by expanding the concept to create a more complex game. Minesweeper falls under the kind of games highly appreciated by [LRS](lrs.md) perspective -- it's very simple to program and learn but still highly fun to play, it's mathematically [interesting](interesting.md) and can in theory be played even without a [computer](computer.md) (if someone else prepares you the board). Current form of the game seems to have evolved from a 1983 game called *Mined-Out*.
```
_ _ _ _ _ _ _ _ _
|_|_|_|_|_|_|_|_|_|
|_|_|#|_|_|_|_|_|_|
|_|_|3 2 1 1|#|2|_|
|_|#|1 . . 1 1 2|_|
|1 1 1 . . . . 1|_|
|. . . . . . . 1 1|
|. . . . . . . . .|
|. . . 1 2 2 1 . .|
|._._._1|_|_|1_._.|
```
*In progress game.*
The **rules** are following: initially a *W* times *H* grid is created and *N* mines are placed on random squares (size of board and number of mines can affect difficulty). All squares are obscured so that the player doesn't see where the mines are. The player can dig on any square by clicking it -- if he clicks on a mine square, it detonates and he loses (here all mines are revealed to him). Implementations typically make it so that the first click can never land on a mine (if it does, the mine is relocated). If the click is on empty square, then this square as well as all other mine-free squares reachable from this square (by walking in 4 principal directions) are revealed as mine-free. All revealed squares have a clue number which says the number of mines in its immediate 8 neighbor squares -- except for squares with clue number 0, all squares have their clue number written on them (often each number has its own color to help with pattern recognition). These clues help the player deduce where the mines are. Player can mark any hidden square with a mine symbol -- once all mine-free squares are revealed, the game is won.
The game requires deductive thinking -- at least initially when one is learning, later on it turns almost entirely into a pattern recognition game. The patterns are very local and there isn't that many of them, so one learn them quickly. The game however DOES involve a bit of chance and luck, situations may arise where taking a guess is necessary, but these are relatively few and risk can be minimized with clever deduction.
Some patterns can be seen in the above image. For example a square with clue number *N* which has *N* neighbors mean that all its neighbors have mines -- this is often seen e.g. with 1s near corners (seen in the picture). We can also see at the bottom of the board that the two squares will both clearly contain mines. A more intricate pattern is seen near the square with number 3 -- the mine above it was deduced from the number 2 at its right and the number 1 next to the 2: according to the 2 square there have to be 2 mines somewhere in the 3 squares above it, but it's impossible for one mine to be above the 2 with the other being top-right from the 2 as that would place 2 mines in the area of the square with clue number 1, therefore one of the mines has to be top-left from the square with number 2 (above the square with 3).

@ -2,7 +2,9 @@
*"People are retarded."* --[Osho](osho.md)
All people are idiots, [love](love.md) all of them, never make anyone a [leader](hero_culture.md). A cover mostly says just enough about the book.
All people are idiots, [love](love.md) all of them, never make anyone a [leader](hero_culture.md). So far people seem to be the least intelligent species that ever appeared on [Earth](earth.md), the only thing stupider than people are [feminists](feminism.md) and [capitalists](capitalism.md).
Remember: a cover mostly says just enough about the book.
Here is a list of people notable in technology or in other ways related to [LRS](lrs.md).

File diff suppressed because it is too large Load Diff

@ -204,4 +204,5 @@ int main(void)
## See Also
- [sudo](sudo.md)
- [sudo](sudo.md)
- [minesweeper](minesweeper.md)

File diff suppressed because one or more lines are too long

@ -3,9 +3,9 @@
This is an autogenerated article holding stats about this wiki.
- number of articles: 569
- number of commits: 761
- total size of all texts in bytes: 3566444
- total number of lines of article texts: 27933
- number of commits: 762
- total size of all texts in bytes: 3575222
- total number of lines of article texts: 27952
- number of script lines: 262
- occurences of the word "person": 8
- occurences of the word "nigger": 72
@ -19,10 +19,10 @@ longest articles:
- [less_retarded_society](less_retarded_society.md): 52K
- [number](number.md): 52K
- [faq](faq.md): 44K
- [exercises](exercises.md): 44K
- [c](c.md): 40K
- [3d_model](3d_model.md): 40K
- [bloat](bloat.md): 36K
- [exercises](exercises.md): 36K
- [internet](internet.md): 36K
- [3d_rendering](3d_rendering.md): 32K
- [random_page](random_page.md): 32K
@ -35,52 +35,52 @@ longest articles:
top 50 5+ letter words:
- which (2046)
- there (1533)
- people (1347)
- other (1116)
- example (1076)
- which (2052)
- there (1537)
- people (1348)
- other (1120)
- example (1077)
- software (1042)
- number (983)
- about (925)
- program (829)
- their (767)
- called (718)
- because (694)
- would (693)
- computer (693)
- simple (670)
- number (985)
- about (928)
- program (836)
- their (772)
- called (720)
- because (697)
- would (696)
- computer (694)
- simple (673)
- numbers (667)
- being (664)
- numbers (652)
- things (649)
- language (643)
- language (647)
- without (623)
- programming (614)
- function (611)
- programming (617)
- function (614)
- something (591)
- however (589)
- something (588)
- these (579)
- different (569)
- system (533)
- these (581)
- different (571)
- system (535)
- world (531)
- should (528)
- games (526)
- should (529)
- games (527)
- point (519)
- society (505)
- doesn (501)
- doesn (504)
- though (494)
- memory (490)
- drummyfish (468)
- while (467)
- using (466)
- technology (454)
- course (453)
- similar (448)
- still (447)
- memory (489)
- while (469)
- drummyfish (469)
- using (467)
- technology (455)
- course (454)
- still (449)
- similar (449)
- simply (443)
- possible (438)
- https (428)
- really (409)
- really (410)
- computers (398)
- extremely (397)
- value (394)
@ -89,6 +89,13 @@ top 50 5+ letter words:
latest changes:
```
Date: Sun Apr 7 20:25:34 2024 +0200
ancap.md
exercises.md
lrs_dictionary.md
random_page.md
wiki_pages.md
wiki_stats.md
Date: Sat Apr 6 22:21:54 2024 +0200
21st_century.md
c_pitfalls.md
@ -115,13 +122,6 @@ Date: Thu Apr 4 21:32:43 2024 +0200
pi.md
random_page.md
wiki_pages.md
wiki_stats.md
Date: Wed Apr 3 22:57:42 2024 +0200
exercises.md
interesting.md
main.md
money.md
often_confused.md
```
most wanted pages:
@ -157,7 +157,7 @@ most popular and lonely pages:
- [game](game.md) (135)
- [suckless](suckless.md) (131)
- [proprietary](proprietary.md) (114)
- [kiss](kiss.md) (91)
- [kiss](kiss.md) (92)
- [modern](modern.md) (87)
- [minimalism](minimalism.md) (86)
- [computer](computer.md) (86)

@ -11,7 +11,8 @@ If you contribute, add yourself to [wiki authors](wiki_authors.md)! You can also
3. **No unnecessary [censorship](censorship.md)**. Necessary censorship basically only includes spam, shitty content, [IP](intellectual_property.md)-infected content (content that would make this wiki not be in public domain) and hardcore illegal stuff that would immediately put us in jail, though we would of course love to include it. However spreading truth mustn't be hurt by fear of jail. Controversial/incorrect/taboo content etc. is NOT to be censored.
4. **Electronic bullying of other wiki users is NOT PROHIBITED**. Nothing is prohibited here. { Also I'm alone here so at best I can bully myself :D ~drummyfish }
5. **ILLEGAL CONTENT IS ALLOWED** -- it still won't be added, because that would make this wiki less legally [free](free_culture.md), however this rule will be here to show we shit on laws and also that it's mostly quite stupid to forbid something that is already forbidden by definition, websites resort to doing it to dodge responsibility because they are [shit scared](fear_culture.md), but it's still stupid nonetheless. Putting rules like "uploading illegal content is prohibited" is basically like saying "I declare it that in my house laws of physics must function", illegal content will be prohibited whether you forbid it or not.
6. [Nigger](nigger.md). This rule has practically no effect because linguistically it has no meaning, but it is here to help [free speech](free_speech.md).
6. Peer-reviewed sources are highly discouraged, we prefer uncensored sources.
7. [Nigger](nigger.md). This rule has practically no effect because linguistically it has no meaning, but it is here to help [free speech](free_speech.md).
## Style

Loading…
Cancel
Save