master
Miloslav Ciz 7 months ago
parent a7137c4892
commit 81f15502ff

@ -4,4 +4,8 @@
42 is an even integer with prime factorization of 2 * 3 * 7. This number was made kind of famous (and later overused in pop culture to the point of completely destroying the [joke](jokes.md)) by Douglas Adams' book The Hitchhiker's Guide to the Galaxy in which it appears as the answer to the ultimate question of life, the Universe and everything (the point of the joke was that this number was the ultimate answer computed by a giant supercomputer over millions of years, but it was ultimately useless as no one knew the question to which this number was the answer).
If you make a 42 reference in front of a TBBT fan, he will shit himself.
If you make a 42 reference in front of a TBBT fan, he will shit himself.
## See Also
- [thrembo](thrembo.md)

@ -2,7 +2,7 @@
Hero culture is a [harmful](harmful.md) culture of creating and worshiping heroes and "leaders" (and other kinds of [celebrities](celebrity.md)) which leads to e.g. creation of [cults of personality](cult_of_personality.md), strengthening [fight culture](fight_culture.md) and establishing hierarchical, anti-[anarchist](anarchism.md) society of "winners" and "losers". The concept of a hero is one that arose in context of [wars](war.md) and other many times violent conflicts; a hero is different from a mere authority or a well known individual in some area, it is someone who creates fear of disagreement and whose image is distorted to a much more positive, sometimes godlike state, by which he distorts truth and is given a certain power over others. Therefore [we](lrs.md) highly warn about falling to the trap of hero culture, though this is very difficult in current highly hierarchical society. **To us, the word hero has a pejorative meaning**. Our advice is always this:
**Do NOT create heroes. Follow ideas, not people**. And similarly: hate ideas, not people.
**Do NOT create heroes. Follow ideas, not people**. Also similarly: hate ideas, not people, and follow ideas, not groups.
Smart people know this and those being named *heroes* themselves many times protest it, e.g. Marie Curie has famously stated: "be less curious about people and more curious about ideas." Anarchists purposefully don't name theories after their inventors but rather by their principles, knowing the danger of hero culture leading to social hierarchy and also that people are imperfect -- people are like packages, a mixture of both good and bad inadvertently inseparable, they carry distorting associations, they make mistakes and their images are twisted by history and politics -- even the character of [Jesus](jesus.md), a "theoretically perfect human", has been many times twisted in ways that are hard to believe. Worshiping an individual always comes with the tendency to embrace and support everything he does, all his opinions and actions, including the extremely bad ones. Abusive regimes are the ones who use heroes and their names for propaganda -- Stalinism, Leninism, corporations such as Ford, named after their founder etc. Heroes become brands whose stamp of approval is used to push bad ideas... especially popular are heroes who are already dead and can't protest their image being abused -- see for example how [Einstein's](einstein.md) image has been raped by [capitalists](capitalism.md) for their own propaganda, e.g. by [Apple](apple.md)'s [marketing](marketing.md), while in fact Einstein was a pacifist socialist highly critical of capitalism. This is not to say an idea's name cannot be abused, the word *[communism](communism.md)* has for example become something akin a swear word after being abused by regimes that had little to do with real communism. Nevertheless it is still much better to focus on ideas as ideas always carry their own principle embedded within them, visible to anyone willing to look, and can be separated from other ideas very easily. Focusing on ideas allows us to discuss them critically, it allows us to reject a bad concept without "attacking" the human who came up with it.

@ -95,7 +95,7 @@ This is a summary of some main guidelines on how an LRS supporter should behave
- **Do NOT [fight](fight_culture.md)**, do NOT say you fight something. Fighting and rhetoric centered around "fighting something" is part of harmful [fight culture](fight_culture.md), most people don't even realize they take part in it. It is important to unlearn this. We do not want to defeat anyone, we want to convince by means of rationality, nonviolence and love. However note that what is unacceptable to do to a living being may be completely acceptable to do to non living object (for example destroying a corporation is OK, in fact it is very desirable). We often take actions that common people would call a "fight" (for example we may organize a strike), however it is important that we don't call it a fight -- a point of view is sometimes as important as the action itself as it will determine our future direction. Remember that [naming is important](name_is_important.md). **Watch out for [A/B fails](fail_ab.md)**.
- **Do NOT worship or create [heroes](hero_culture.md), don't become one**. Watch out for [cult of personality](cult_of_personality.md). It is another common mistake to for example call [Richard Stallman](rms.md) a "hero of free software" and to even worship him as a celebrity. The concept of a hero is [harmful](harmful.md), rightist concept that is connected to war mentality, it goes against [anarchist](anarchism.md) principles, it creates social hierarchy and given some people a power to deceive. People are imperfect and make mistake -- only ideas can be perfect. Respect people but don't make anyone your moral compass, you should rather subscribe to specific ideas, i.e. rather than worshipping Stallman subscribe to and promote his idea of [free software](free_software.md).
- **Do not [identify](identity.md) with specific groups and organizations** -- this one is tricky because there is a fine line between many people together agreeing on an idea (good) and those people creating a formal hierarchical group which sooner or later inevitably becomes [fascist](fascism.md) or at the very least corrupt, eventually to the degree of betraying its original beliefs (bad). Remember principles of [anarchism](anarchism.md): loosely associate with others but do not create power structures and hierarchies. An example here may be supporting [free software](free_software.md) (good) vs supporting the (now greatly corrupt) [Free Software Foundation](fsf.md) (bad). Free software as an idea is pure and good, in merely supporting the idea we will not create any hierarchy of people, power structures or attach other unrelated ideas to ride on the free software wave (e.g. that of [political correctness](political_correctness.md) now promoted by the FSF). They say there is strength in unity, that is true, but there are different kinds of unity, and if perhaps one kind of unity (the bad one) is momentarily stronger, it is so because it's the "dark side of the force": yes, it may be stronger, but it is evil. Resist this urge. For this we also don't want to start any formal [LRS](lrs.md) group.
- **CREATE, Do NOT waste your life on bullshit, do NOT get too obsessed with tools and hopping** such as [distrohopping](distrohopping.md), [githopping](githopping.md) [audiophilia](audiophilia.md), hardware consumerism, 100% minimalist perfectionism etc. The perfect is the enemy of the good. Remember, the goal of your life is to create something new and better; too many people just get stuck doing nothing but switch distros, rant about which editor is best, making sure their OS has zero bloat and zero proprietary code etc. If that's all you do, it's completely useless, your life is completely wasted. Dedicate time to creating art that will last, e.g. programming [LRS](lrs.md) (creating source code text) or making free cultural art -- it doesn't matter whether you create it with Ubuntu or Gentoo.
- **CREATE, do NOT waste your life on bullshit, do NOT get too obsessed with tools and hopping** such as [distrohopping](distrohopping.md), [githopping](githopping.md) [audiophilia](audiophilia.md), hardware consumerism, 100% minimalist perfectionism etc. The perfect is the enemy of the good. Remember, the goal of your life is to create something new and better; too many people just get stuck doing nothing but switch distros, rant about which editor is best, making sure their OS has zero bloat and zero proprietary code etc. If that's all you do, it's completely useless, your life is completely wasted. Dedicate time to creating art that will last, e.g. programming [LRS](lrs.md) (creating source code text) or making free cultural art -- it doesn't matter whether you create it with Ubuntu or Gentoo.
- **Lead an example**, this is the best way to spread our values, however be also extremely careful not to become a worshipped [authority](hero_culture.md). Know the difference between a humble intellectual authority and an authoritative self-centered celebrity who uses his fame for deception. The more famous you are, the more humble you should become.
- **Be [loving](love.md), even towards opposition** -- remember: hate and revenge towards people perpetuates the endless circle. [Love](love.md) leads to more love, understanding, good deeds, friendship, happiness, collaboration and all the other positive things. Do not confuse love with [political correctness](political_correctness.md). You may get angry or frustrated, just don't get violent against, rather try to break something, write your anger out, play some video game etc.
- **Try to do [selfless](selflessness.md) things** -- TRULY selfless ones. Help those in need without expecting any kind of repay, do not even seek attention or gratitude for it, only your good feeling. Create selfless art, whatever it is you enjoy doing -- computer programs, 3D models, music, videos, ... put them in the [public domain](public_domain.md) and let others enjoy them :) Try to **make doing good things a habit** -- some people smoke, drink, overeat and do other kinds of things harmful to themselves and their environment as means for relieving stress. If you exploit this natural human tendency and rather develop GOOD habits, such as writing free software or helping charities as a means of relaxing and relieving stress, you have won at life; doing good and feeling good will be natural and effortless. **The thing you dedicate your life to should be the thing you love, not the thing that earns you money** or benefits you in similar ways -- try to maximize doing what you love (which may and probably should be more than one thing) and also **try to love doing what is good** so that you can do it a lot. **If you love something, never do it for money**; then it becomes business and as we know, business spoils everything.

@ -19,4 +19,8 @@ When treated as [cardinality](cardinality.md) (i.e. size of a [set](set.md)), we
**In regards to [programming](programming.md)**: programmers are often just engineers and so simplify the subject of infinity in a way which to a mathematician would seem unacceptable. For example it is often a [good enough](good_enough.md) approximation of infinity to just use an extremely large number value, e.g. the largest one storable in given data type, which of course has its limitations, but in practice [just werks](just_werkd.md) (just watch out for [overflows](overflow.md)). Programmers also often resort to breaking the mathematical rules, e.g. they may accept that *x / 0 = infinity*, *infinity + infinity = infinity* etc. Systems based on [symbolic computation](symbolic_computation.md) may be able to handle infinity with exact mathematical precision. Advanced data types, such as [floating point](float.md), often have a special value for infinity -- IEEE 754 floating point, for example, is capable of representing positive and negative infinity.
WATCH OUT: **infinite universe doesn't imply existence of everything** -- this is a common fallacy to think it does. For example people tend to think that since the decimal expansion of the digits of [pi](pi.md) is infinite and basically "random", there should always exist any finite string of digits somewhere in it; this doesn't follow from the mere fact that the series is infinite (though the conclusion MAY or may not be true, we don't actually know this about pi yet). Imagine for example the infinite series of even numbers -- there are infinitely many numbers in it, but you will never find any odd number there.
WATCH OUT: **infinite universe doesn't imply existence of everything** -- this is a common fallacy to think it does. For example people tend to think that since the decimal expansion of the digits of [pi](pi.md) is infinite and basically "random", there should always exist any finite string of digits somewhere in it; this doesn't follow from the mere fact that the series is infinite (though the conclusion MAY or may not be true, we don't actually know this about pi yet). Imagine for example the infinite series of even numbers -- there are infinitely many numbers in it, but you will never find any odd number there.
## See Also
- [thrembo](thrembo.md)

@ -42,4 +42,5 @@ Minimalism and simplicity increases freedom even of [proprietary](proprietary.md
## See Also
- [primitivism](primitivism.md)
- [primitivism](primitivism.md)
- [single instruction computer](single_instruction.md)

@ -15,9 +15,9 @@ Political correctness (abbreviated PC) means [pseudoleftist](pseudoleft.md) [cen
*Example of politically correct ASCII art. Note the absence of any content that might offend someone. Still the art is imperfect because it has a white background which might be seen as racially offensive.*
While political correctness loves to boast about "diversity" and somehow "protecting it", it is doing the exact opposite -- **political correctness kills diversity in society**, it aims for **a unified, sterile society** that's afraid of even hinting on someone else's difference out of fear of punishment. People are different, [stereotypes](stereotype.md) are based on reality, acknowledging this -- and even [joking](jokes.md) about it -- doesn't at all mean we have to start to hate each other (in fact that requires some fucked up mental gymnastics and a shitty society that pushes [competitive](capitalism.md) thinking), diversity is good, keeps us aware of strength in unity: everyone is good at something and bad at something, and sometimes we just do things differently, a westener might approach problem differently than Asian or Arab, they look different, think and behave differently, and that's a good thing; political correctness forbids such thinking and only states "there is no such thing as differences in people or culture, don't even dare to hint on it", it will go on to censor anything showing the differences do actually exist and leave nothing but plain white sheet of paper without anything on it, a robotic member of society that's afraid to ask someone about his gender or even place where he comes from, someone unable of thinking or communicating on his own, only resorting to preapproved "safe" ways of communication. Indeed, reality yet again starts beating dystopian fiction horrors.
The whole idea is basically about declaring certain words, pictures, patterns of behavior and similar things as inherently "offensive" to specific selected minorities (currently mostly [women](woman.md), [gay](gay.md), [negros](black.md) and other non-white races, [trannies](tranny.md), fat and [retarded people](retard.md)), even outside any context, and about constantly fabricating new reasons to get offended so as to fuel the movement that has to ride on hysteria. For example the word *[black box](black_box.md)* is declared as "offensive" to black people because... well, like, black people were discriminated at some point in history and their skin is black... so... the word black now can't be said? :D [WTF](wtf.md). A sane mind won't understand this because we're dealing with a literal extremist cult here. It just keeps getting more ridiculous, for example feminists want to remove all words that contain the substring "man" from the language because... it's a male oppression? lol... anyway, we can no longer use words like *snowman*, now we have to say *snowperson* or something :D Public material now does best if it doesn't walk on the thin ice of showing people with real skin color and better utilize a neutral blue people :D Fuck just kill me already lmao. This starts to get out of hand as fuck, [SJW](sjw.md)s started to even push the idea that in [git](git.md) the default branch name, *master*, is offensive, because well, the word has some remote connection to some history of oppression, so they pushed for its change and achieved it, which practically caused a huge mess and broke many git projects -- this is what they do, there was literally not a single reason for the change, they could have spent their energy on actually programming something nice, but they rather used it on breaking what already exists just to demonstrate their political power. What's next? Will they censor the word "chain" in terms like [toolchain](toolchain.md) or [blockchain](blockchain.md) because chains have something to do with slavery? Will they order to repaint the [ISS](iss.md) from white to black because the color white is oppressive? The actual reason for this apparent stupidity is at this point not anyone's protection (probably not even themselves believe it anymore) but rather **forcing submission** -- it's the same psychological tactic used by any oppressor: he just gives a nonsensical order, like "start barking like a dog!", to see who blindly conforms and who doesn't -- those who don't are just eliminated right away and those who conform out of fear have their will broken, they will now blindly obey the ruler without thinking about the sanity of his orders.
The whole idea is basically about pushing the mentality of seeing certain words, pictures and other objects as inherently "offensive" to specific selected minorities (currently mostly women, gay, negros and other non-white races, trannies and fat and disabled people), even outside any context, and about constantly fabricating new reasons to get offended so as to fuel the movement. For example the word *black box* is declared as "offensive" to black people because... well, like, black people were discriminated at some point in history and their skin is black... so... the word black now can't be said? :D [WTF](wtf.md). A sane mind won't understand this because we're dealing with a literal extremist cult here. It just keeps getting more ridiculous, for example feminists want to remove all words that contain the substring "man" from the language because... it's a male oppression? lol... anyway, we can no longer use words like *snowman*, now we have to say *snowperson* or something :D Public material now does best if it doesn't walk on the thin ice of showing people with real skin color and better utilize a neutral blue people :D Fuck just kill me already lmao.
While political correctness loves to boast about "diversity" and somehow "protecting it", it is doing the exact opposite -- **political correctness kills diversity in society**, it aims for **a unified, sterile society** that's afraid of even hinting on someone else's difference out of fear of punishment. People are different, [stereotypes](stereotype.md) are based on reality, acknowledging this -- and even [joking](jokes.md) about it -- doesn't at all mean we have to start to hate each other (in fact that requires some fucked up mental gymnastics and a shitty society that pushes [competitive](capitalism.md) thinking), diversity is good, keeps us aware of strength in unity: everyone is good at something and bad at something, and sometimes we just do things differently, a westener might approach problem differently than Asian or Arab, they look different, think and behave differently, and that's a good thing; political correctness forbids such thinking and only states "there is no such thing as differences in people or culture, don't even dare to hint on it", it will go on to censor anything showing the differences do actually exist and leave nothing but plain white sheet of paper without anything on it, a robotic member of society that's afraid to ask someone about his gender or even place where he comes from, someone unable of thinking or communicating on his own, only resorting to preapproved "safe" ways of communication. Indeed, reality yet again starts beating dystopian fiction horrors.
Political correctness goes strictly against [free speech](free_speech.md), it tries to force people "to behave" and be afraid of words and talking, it creates conflict, divides society and also TEACHES people to be offended by language -- i.e. even if a specific word wouldn't normally be used or seen in a hostile way (e.g. the *master branch* in git repositories), political correctness establishes that NOW IT IS OFFENSIVE and specific minorities SHOULD take offense, even if they normally wouldn't, supporting [offended culture](offended_culture.md) and [fight culture](fight_culture.md). I.e. political correctness can be called a [cancer](cancer.md) of society. **[LRS](lrs.md) must never adhere to political correctness!**

@ -1,6 +1,6 @@
# Procedural Generation
Procedural generation (procgen, not to be confused with [procedural programming](imperative.md)) refers to creation of data, such as [art](art.md) assets in [games](game.md) or test data for data processing software, by using [algorithms](algorithm.md) and mathematical formulas rather than creating it manually or measuring it in the real world (e.g. by taking photographs). This can be used for example for automatic generation of [textures](texture.md), texts, [music](music.md), game levels or 3D models but also practically anything else, e.g. test [databases](database.md), animations or even computer programs. Such data are also called *synthetic*. Procedural art currently doesn't reach artistic qualities of a skilled human artist, but it can be [good enough](good_enough.md) or even necessary (e.g. for creating extremely large worlds), it may be preferred e.g. for its extreme save of storage memory, it can help add detail to human work, be a good filler, a substitute, an addition to or a basis for manually created art. Procedural generation has many advantages such as saving space (instead of large data we only store small code of the algorithm that generates it), saving artist's time (once we have an algorithm we can generate a lot data extremely quickly), parametrization (we can tweak parameters of the algorithm to control the result or create animation, often in real-time), increasing resolution practically to infinity or extending data to more dimensions (e.g. [3D textures](3d_texture.md)). Procedural generation can also be used as a helper and guidance, e.g. an artist may use a procedurally generated game level as a starting point and fine tune it manually, or vice versa, procedural algorithm may create a level by algorithmically assembling manually created building blocks.
Procedural generation (procgen, also PCG -- *procedural content generation* -- not to be confused with [procedural programming](imperative.md)) refers to creation of data, such as [art](art.md) assets in [games](game.md) or test data for data processing software, by using [algorithms](algorithm.md) and mathematical formulas rather than creating it manually or measuring it in the real world (e.g. by taking photographs). This can be used for example for automatic generation of [textures](texture.md), texts, [music](music.md), game levels or 3D models but also practically anything else, e.g. test [databases](database.md), animations or even computer programs. Such data are also called *synthetic*. Procedural art currently doesn't reach artistic qualities of a skilled human artist, but it can be [good enough](good_enough.md) or even necessary (e.g. for creating extremely large worlds), it may be preferred e.g. for its extreme save of storage memory, it can help add detail to human work, be a good filler, a substitute, an addition to or a basis for manually created art. Procedural generation has many advantages such as saving space (instead of large data we only store small code of the algorithm that generates it), saving artist's time (once we have an algorithm we can generate a lot data extremely quickly), parametrization (we can tweak parameters of the algorithm to control the result or create animation, often in real-time), increasing resolution practically to infinity or extending data to more dimensions (e.g. [3D textures](3d_texture.md)). Procedural generation can also be used as a helper and guidance, e.g. an artist may use a procedurally generated game level as a starting point and fine tune it manually, or vice versa, procedural algorithm may create a level by algorithmically assembling manually created building blocks.
As neural [AI](ai.md) approaches human level of creativity, we may see computers actually replacing many artists in near future, however it is debatable whether AI generated content should be called procedural generation as AI models are quite different from the traditional hand-made algorithms -- AI art is still seen as a separate approach than procedural generation. For this we'll only be considering the traditional approach from now on.
@ -23,16 +23,18 @@ We use procedural generation mainly in two ways:
Indeed we may also do something "in between", e.g. generate procedural assets into temporary files or RAM [caches](cache.md) at run time and depending on the situation, for example when purely realtime generation of such assets would be too slow.
## Notable Techniques
## Notable Techniques/Concepts
The following are some techniques often used in procedural generation:
The following are some techniques and concepts often used in procedural generation:
- **[noise](noise.md)**: Noise is often used as a basis for generation or for modulation, it can be seen as kind of "RNG taken to the next level" -- noise is greatly random but also usually has some structure, for example it may resemble smoke or water ripples. There are great many types of noise and algorithms for its generation; the simplest [white noise](white_noise.md) is actually not very useful, more common are various forms of fractal noise, often used noises are [Perlin noise](perlin_noise.md), [simplex noise](simplex_noise.md) etc., other ones are [Voronoi](voronoi.md) diagrams, midpoint displacement, spot noise, cosine noise, fault formation etcetc.
- **[random number generators](rng.md)**: To make random decisions we use random number generators -- here we actually don't have to have the best generators, we aren't dealing with "security" or anything critical, however the generator should at least have a great period so that it's not limited to just generating few different results, and its useful to be able to choose [probability distribution](probability_distribution.md).
- **[modulation](modulation.md)**: Using previously generated procedural data, for example noise, to somehow affect another data -- for example imagine we already have some basic procedural texture but want to make it more interesting by randomly displacing its individual pixels to warp it a little bit. If we use a simple random number generator for each pixel, the result will just look too chaotic, so it's better if we e.g. use two additional Perlin noise textures, which together say for each pixel by what distance and angle we'll displace the pixel. As Perlin noise is more continuous, gradual noise, then also the distortion will be kind of continuous and nice.
- **simulations resembling natural/biological phenomena**: E.g. [cellular automata](cellular_automaton.md), [particle systems](particle_system.md), ...
- **[modulation](modulation.md)**: Using previously generated procedural data, for example noise, to somehow affect another data -- for example imagine we already have some basic procedural texture but want to make it more interesting by randomly displacing its individual pixels to warp it a little bit. If we use a simple random number generator for each pixel, the result will just look too chaotic, so it's better if we e.g. use two additional Perlin noise textures, which together say for each pixel by what distance and angle we'll displace the pixel. As Perlin noise is more continuous, gradual noise, then also the distortion will be kind of continuous and nice. A famous example of this is marble texture that can be generated by horizontally modulating a texture of vertical black and white stripes with Perlin noise.
- **simulations resembling natural/biological phenomena**: E.g. [cellular automata](cellular_automaton.md), [particle systems](particle_system.md), erosion simulation, [agent systems](agent_system.md) (letting virtual "workers" collaborate on creating something) ...
- **[fractals](fractal.md)**: Fractals can resemble nature, they create "content" on all scales and are very simple to define. Popular types of fractals are e.g. [L-systems](l_system.md) that draw fractals with [turtle graphics](turtle_graphics.md).
- **coloring**: To get colors from simple numeric values we may use e.g. color mapping of the values to some [palette](palette.md) or using three different arrays as [RGB](rgb.md) channels. We may also use [flood fill](flood_fill.md) and other things of course.
- **[state search](state_search.md)**: This is an approach similar to e.g. how computers play games such as [chess](chess.md). Imagine we for example want to generate a procedural city: any constructed city represents a state and these states are connected (e.g. one state leads to another by placing a building somewhere), forming a [graph](graph.md) (sometimes even a [tree](tree.md)) of states: the state space. The idea is to create an evaluation function that takes any given state (any specific city) and says how "good" it is (e.g. how realistic it looks, i.e. for example there shouldn't be more hospitals than actual houses of people, buildings should be reachable by roads etc.); then we also implement a search function (e.g. [minimax](minimax.md), [monte carlo](monte_carlo.md), ...) that uses the evaluation function to search for some good enough state we take as the result. [Evolutionary](evolutionary.md) search is often used here.
- **constructive approach**: The "obvious" approach, an algorithm that simply constructs something according to some rules from start to finish, without performing advanced things like evaluating the quality of the generated output, letting different outputs compete, combining several different outputs etc. Example may be for example [recursive](recursion.md) [space partitioning](space_partitioning.md) for the creation of game dungeons.
- **wave function collapse**: Analogy to quantum mechanics, often used for generating tile maps.
- **combining intermediate results**: For example when creating procedural textures we may actually create two separate textures and then somehow [blend](blending.md) them together to get a more interesting result.
- **wrap-around coordinates**: Wrap around (modular) coordinates help us make tiling data.
@ -40,6 +42,7 @@ The following are some techniques often used in procedural generation:
- **higher [dimensionality](dimension.md)**: Equations used for procedural generation are often generalized to higher dimensions so that we can for example create smooth animation by taking the extra dimension as time.
- **[filters](filter.md)**: We may utilize traditional graphic filters such as Gaussian blur, [median](median.md) blur, general [convolution](convolution.md), color adjustments etc.
- **[stochastic](stochastic.md) models**: Stochastic mathematical models describe the generated result in terms of probabilities, which is convenient for us as we can take the model and just use random number generators to make decisions with given probabilities to obtain a specific result. For example [Markov chains](markov_chain.md) can be used to easily generate random procedural text by knowing probabilities with which any word is followed by another word, this may also be used to generate linear game levels etc. Similarly we may utilize various non-[deterministic](determinism.md) finite state automata, [decision trees](decision_tree.md) etc.
- **constraint solving**: Many times the problem of procedural generation can be described as a constraint solving problem, i.e. we have a set of constraints such as "we want 10 to 20 rooms" and "each room must be reachable from other rooms" and then we want to find a solution that just satisfies the constraints (without somehow rating how good the solution is). The advantage of formulating the problem this way is that there exist a number of algorithms for solving such problems, e.g. [ASP](asp.md), some heuristic searches etc.
- ...
## Examples
@ -234,7 +237,7 @@ int main(void)
}
```
Now let's take a look at some iterative algorithm: an extremely simple dungeon generator. All it's going to do is just randomly choose a cardinal direction (up, right, down, left), draw a line of random length, and repeat the same from the line's endpoint, until predefined number of lines has been drawn. Here is the C code:
Now let's take a look at some iterative algorithm: an extremely simple dungeon generator. This is so called *constructive* algorithm, a simple kind of method that simply "constructs" something according to given rules, without evaluating how good it's work actually is etc. All it's going to do is just randomly choose a cardinal direction (up, right, down, left), draw a line of random length, and repeat the same from the line's endpoint, until predefined number of lines has been drawn (a kind of [random walk](random_walk.md)). Here is the C code:
```
#include <stdio.h>

@ -1,7 +1,12 @@
# Thrembo
Thrembo is a fictional whole number lying between numbers 6 and 7, it's a subject of [jokes](joke.md) and [conspiracy theories](conspiracy.md), it is represented by a symbol with [Unicode](unicode.md) symbol U+03EB. It originated as a schizo post on [4chan](4chan.md) in 2021 by someone implying there's some kind of conspiracy to hide the existence of number called *thrembo*, who was of course in turn advised to take his meds, however the [meme](meme.md) has already been started.
Thrembo (also hidden or forbidden number) is allegedly a "fictional" whole number lying between numbers 6 and 7, it's a subject of [jokes](joke.md) and [conspiracy theories](conspiracy.md) with most people seeing it as a [meme](meme.md) and others promoting its existence, it is represented by a [Unicode](unicode.md) symbol U+03EB. Thrembo originated as a schizo post on [4chan](4chan.md) in 2021 by someone implying there's some kind of conspiracy to hide the existence of a number between 6 and 7, who was of course in turn advised to take his meds, however the [meme](meme.md) has already been started. Thrembo now even has its own [subreddit](reddit.md) (though it's extremely retarded, don't go there).
How can there be an integer between 6 and 7? Well, that's what thrembologists research. Sure, normally there is no space on the number line to fit a number between 6 and 7 so that its distance is 1 to both its neighbors, however this only holds due to simplifications we naively assume because of our limited IQ; one may for example imagine a curved, non Euclidean number line (:'D) on which this is possible, just like we can draw a triangle with three right angles on a surface of a sphere. In history we've naysayer proven wrong in mathematics, for example those who claimed there is no solution to the equation *x^2 = -1*; some chad just came and threw at us a new number called [i](i.md) (he sneakily made it just a letter so that he doesn't actually have to say how much it ACTUALLY equals), he just said "THIS NUMBR IS HENCEFORTH THE SOLUTION BECAUSE I SAY SO" and everyone was just forced to admit defeat because no one actually had a bigger authority than this guy. That's how real mathematics is done kids. As we see e.g. with [political correctness](political_correctness.md), with enough propaganda anything can be force-made a fact, so if the number gets enough likes on twitter, it will just BE.
## See Also
- [schizophrenic number](schizo_number.md)
- [schizophrenic number](schizo_number.md)
- [illegal number](illegal_number.md)
- [42](42.md)
- [pi](pi.md)

@ -27,4 +27,5 @@ Some properties of and facts about this number follow:
- [NULL](null.md)
- [infinity](infinity.md)
- [one](one.md)
- [one](one.md)
- [thrembo](thrembo.md)
Loading…
Cancel
Save