79 KiB
Exercises
Here there should be some exercises such as programming projects, math problems or quizes for those wishing to pursue LRS in any way.
Programming Challenges
See also needed projects.
This place is for suggesting programming projects that will in first place serve practicing programming, but they'll be formulated so that they can theoretically be expanded to something useful in the end. The projects will be roughly sorted from easiest to hardest into different difficulty levels and within each level also at least approximately from easiest to hardest. You can use this to practice what you've learned in C tutorial. Be sure to follow the LRS principles. We more or less assume you'll be programming in C -- 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 or just awkward.
LRS programming challenge! If you desire "motivation", feel free to treat this as a game, the projects will be achievements for you to 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.
- 4 points for a completed project in level 1.
- 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 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.
- The thumbs up parts are not mandatory, just a little extra challenge.
- Don't cheat, you're only cheating yourself :)
- If there is any doubt, drummyfish is the arbiter. So if you for example don't know if your project passes, send it to drummyfish and he will tell you.
Level 0: Trivial, Piece Of Cake
- hello: Make a program that outputs
hello
. - counting: Make a program that outputs numbers from 1 up to 100.
- guess a number: Make a game in which the computer secretly thinks a number from 0 to 9 and the player guesses the number. The computer then says if the player won and what the secret number what.
- password generator: Make a program which when run outputs randomly generated password (the password must be different each time you run the program of course). The password must be at least 10 characters long, contain at least one decimal digit and one special character.
- rock, paper scissors: Make a game of rock paper scissors, the player plays against the computer.
- average: Make a program that reads two numbers (you can assume only non-negative integers will be input) and writes out their average (it can be rounded, even to just integer, e.g. 3 and 8 can give 5).
- kawaii filter: Make a program that will filter input text to make it more kawai senpai. It has to read characters from input until end is reached (you can consider either EOF or end of line the end of input, that's up to you), outputting each character it reads as soon as it reads it, except for letters r/R that will be replaced with w/W. Also when period is read, the word desu must be output before it. For example the input "This program is really good." will produce output "This pwogwam is weally good desu.".
- info tool: Make a tool that will output some basic info about real world, the computer, its operating system or the programming language -- you have to really retrieve this info e.g. using standard library, OS files, language's built-in functions etc. When run, it has to output at least three of the following things: current time, current date, operating system name and version, programming language version, native integer size in bits, amount of computer RAM, free disk space, CPU name and/or frequency and/or number of cores or locale info (language, timezone, ...). (hints: see time.h, limits.h, locale.h, man system etc.)
- ASCII art animation: Program a simple ASCII art animation that will play in terminal -- just make a few frames of the animation in some text editor, then make a program that will show one frame after another. After each frame write out like 50 spaces to scroll the old frame away from the screen, then draw the next frame. The animation can be advanced just with a key press, i.e. you can just have a loop that draws the frames and at the end of the loop you just wait for user input (but thumbs up if you can figure out how to pause for some fixed time after each frame).
- Nim: Implement the simple variant of the game Nim for two human players -- At the beginning there will be 15 matches, players take turn, in each turn a player can take 1, 2 or 3 matches. That who takes the last one loses. The game has to show the number of matches as a numeral and also as some kind of symbols, for example:
|||||||||||||||
. Players have to input1
,2
or3
to play their turn, on wrong input the game has to report error and ask again. At the end winner must be shown. Thumbs up for randomly setting the initial number of matches between 10 and 15.
Level 1: Easy, I'm Too Young To Die
- fizzbuzz: Write the classic fizzbuzz program.
- anagram checker: Make a program that reads one line of text from the user and checks if it's an anagram (i.e. if it's spelled the same forward and backwards) or not -- you can just output yes or no.
- number encyclopedia: Make a program that writes numbers from 0 to 1000 (including both) and about each of which it writes some facts. These facts have to include at least the number's square, square root, sum of its decimal digits, its binary representation, prime factorization and whether the number itself is prime, perfect number and Fibonacci number.
- game of life: Make a program that simulates game of life on a finite N * N grid, with wrapping space (i.e. a cell on the very left of the grid is considered a neighbor of the cell on the very right in the same row, same thing with top and bottom). Make N configurable at least as a compile time option, draw the world as ASCII art to terminal, make the user step forward by pressing some key. You can initialize the grid values randomly, but thumbs up for allowing setting the initial world state (e.g. reading it from a file or something).
- text adventure: Make an interactive CLI text adventure that will take an average player at least 10 minutes to finish. Part of game mechanics must involve inventory, i.e. picking up items, carrying them around and using them.
- calculator: Make an interactive calculator -- it can be a purely command line program into which user types expressions and your program evaluates them. The functionality must be at least on the level of the most plain physical calculators, i.e. it doesn't have to parse whole complex expressions, but it should be able to add, subtract, multiply, divide and find square roots. Results can be approximate, showing just 3 fractional decimal digits. Thumbs up for more features like handling expressions with brackets, having a variable storing last result, converting between bases and so on.
- bytebeat: Make at least three cool sounding bytebeat songs.
- Lorem ipsum markdown generator: Create a program that generates gibberish text in markdown format that looks like normal human text. Each time it is run, it will generate generally a different text that consists of 3 to 5 sections, each section starts with a heading which starts with
#
after which 3 to 5 words follow, then there are two newlines and then 3 to 5 paragraphs follow; each paragraph ends with two newlines, except for the last one in the document which only ends with one newline. Paragraph consists of 5 to 10 sentences; each sentence consists of 3 to 10 words, starts with capital letter (other letters are lowercase) and ends with period. About 1 in 20 words in paragraphs are highlighted -- highlight is either italic (the word is between*
s) or bold (the word is between**
s). After period there is space except when it's the last period in a paragraph (then there is no space). Words are selected randomly from some set of words that you define (have at least 10 different words). Thumbs up for also generating lists etc. - Caesar cipher: Make a program that encrypts/decrypts text with the simple cipher known as Caesar cipher, i.e. by offsetting each letter by certain fixed number N (e.g. with N = 2 the letter A will become C, B will become D etc.). Assume just ASCII characters on input (encrypted output can be non-ASCII). You can just choose and hardcode some specific N but thumbs up for allowing to set any N. You can input/output text from/to standard input/output or files -- it's up to you -- also you can either make one program that does both encoding and decoding (e.g. depending on CLI flag) or make two programs, one for each task.
- filetype guesser: Create a program that reads a file and guesses its file type. You can NOT use the file name, only the file content. First look at the magic number (file signature) -- check at least PDF, JPEG, PNG, MP3, GIF and TAR. If this doesn't succeed, then see if 90% of bytes are printable ASCII characters: if so, then guess the file to be TXT, otherwise you may report unknown type (or optionally you can try some extra checks if you want).
- brainfuck interpreter: Make a program that interprets brainfuck. You may choose to read the input program either from standard input or from a file (the file may have some hardcoded name, e.g. your program will just look for a file named
program.bf
in the same directory). If the brainfuck program is invalid or runtime error occurs in it, you may just write outerror
and halt your interpreter. Thumbs up for making the interpreter nicer, e.g. allowing to pass input file name as a CLI argument, reporting more details about errors (e.g. its position in source code) and so on.
Level 2: Mid, Hurt Me Plenty
- chess without AI: Make a program that allows two human players to play chess, AI is not required. It can be just a CLI program that draws the chessboard to terminal and reads moves by having players type the squares. Of course the program mustn't allow illegal moves, it must know if the game ended, who won (or if it's a draw) and so on. Implement all rules correctly, i.e. don't forget en passant, castling rights, stalemates and so on. Time controls are not required at all. Thumbs up for some basic recording of games, undos, showing playable squares or even having some kind of stupid AI (can just make random moves).
- 2D game: Make a complete 2D game in which you control a character, with at least 5 levels. Genre is up to you, recommended is e.g. platformer or top-down shooter. The game must have "real" graphics, i.e. not just terminal ASCII art -- using a library like SAF, Allegro or SDL may be a good choice. Sounds are not required but thumbs up if you have them.
- gopher browser: Write interactive gopher browser -- it can be a purely command line 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.
- simple text compression: Write a program that can compress and decompress plain ASCII text files using some very simple technique like run length encoding (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, 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.
- 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.
- minesweeper: Implement the minesweeper game! It can be a purely command line program if you manage to render it well with ASCII art and make controls usable, but of course you can try making it GUI as well. There must be at least three difficulty levels that differ by board size and number of mines. First click must never land on a mine. The game must show the time it took to complete it, thumbs up for implementing a persistent top 3 score board that's saved to a file.
- arbitrary size rational numbers: 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).
- image to ASCII art: 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.
- educational sorting 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).
- 3D model of fractal: 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.
- steganography: Make a program that hides text strings in either pictures, sounds or another text. The program must be a nice CLI 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.
- sudoku 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 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.
- 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 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
- quine master: Without looking it up, write a quine in one language and radiation hardened quine in another language. Quine is a program that outputs its own source code (don't cheat, you can't read it from the source file), radiation hardened quine is a quine that remains a quine if you remove any single character from the program.
- non-trivial programming language: Design language L, write its specification and make a self hosted interpreter and/or compiler for it, i.e. write L in L (for this you may first have to write it in another language). L must be Turing complete and you have to provide mathematical proof of it. L must allow recursive function calls. It must not support native OOP. L must be usable for programming very basic things -- show it is so by writing bubble sort in it. Write quine in it. Thumbs up for also making a compiler.
- 3D game: Make a complete game with 3D graphics from 1st or 3rd man perspective that will have at least half an hour worth of gameplay time -- the gameplay can really be 2D (e.g. like wolf3D) but the graphics must be judged as 3D by average guy who sees the game. If your platform allows it at all, it must have basic sounds (no need for music, but e.g. shooting should at least make beeps and so on). The genre is up to you, it can be a shooter, platformer, RPG or anything where you control a character. For the 3D graphics you can either use a 3D library, in which case you HAVE TO implement textured graphics (the textures may be procedural if you want), or you can write your own renderer. If you write custom renderer, then if it's a "true 3D", it can have just flat, untextured graphics; if it's a "pseudo 3D" (like raycasting or BSP, ...), it must have at least some texturing (e.g. walls).
- textured 3D software renderer: Make 3D software renderer that rasterizes triangles (just like for example OpenGL), with texturing. Affine texture mapping (i.e. the easier, incorrect texturing by linear interpolation of texturing coordinates in screen space) will pass, but thumbs up for perspective correct texture mapping. Implement some basic shading like, e.g. Goraud with ambient and diffuse light. You have to handle visibility even of non-convex shapes, e.g. with z-buffer or at least approximately by sorting triangles. It's enough if you can display some textured model with setting camera position and rotation somehow. You don't have to handle any 3D formats, 3D models can just be passed as arrays of numbers (same with textures). It is enough if you output static images e.g. to a file, but thumbs up for being able to handle real-time rendering, animation and having extra features like transparency, scene graph and so on. Extra thumbs up for not using float.
- regular expression library: Make a library for working with regular expressions. Implement at least the following operations: search of regular expression, substitution of regular expressions WITH capture groups and generating random strings by regular expression.
- chess AI: Use any sane approach to write a chess engine of reasonable strength. No, you can't just fork stockfish, write it from scratch. It has to support xboard or UCI interface, the strength must be such that in usually wins at least once in a 10 game match against smolchess, Maia 1500, GNU chess, Dreamer, ChessMaster, Stockfish or similar engine with equivalent settings (search depth, time for move etc.); alternatively it can pass by getting stable rating over 1600 on lichess or by beating someone with FIDE rating over 1500 in a 10 game match. You get the idea.
- bitmap image editor: GIMP is bloated! You have to save us by writing a GUI image editor that's at least a bit more advanced than the original MS paint. It has to be able to save and load images (supporting just one format is enough), draw basic shapes (at least a line, rectangle and circle), copy/paste parts of the image (with rectangle select), resize the image as a whole (with scaling it), have fill bucket and adjust brightness and contrast of the whole image. It should be reasonably user friendly, i.e. upon quitting it should ask if you want to save the work, it must have some basic help etc. Thumbs up for extra features like filters (blur, invert, edge detect, ...), layers and so on.
- 64K intro: Make an impressive demoscene-style 3D intro with music. It must have duration of at least 1 minute and fit into a 64 KB executable. It has to be good enough so that an average demoscener would approve it as not completely laughable.
- 3D path tracer without floating point: Write a path tracer (NOT a mere ray tracer) 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.
- gopher 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. - Jpeg clone: Create a usable format for photo images with lossy compression, similar to Jpeg, 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), then converting the image to frequency domain (probably with discrete cosine transformation) 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).
- text editor: Make a usable text editor. It can have GUI, TUI 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).
- console emulator: Make an emulator of either PlayStation 1, Nintendo64, GameGear or any version of GameBoy (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.
- genetic programming: Create a KISS 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!
- 3D physics engine without floating point: Warm up for the god tier by making a 3D physics engine without using floating point, usable in real time. It must support complex shapes, i.e. not just plain spheres ;) The engine can use rigid body or soft body physics, or both. It doesn't have to be physically accurate but should produce results that an average observer will judge realistic enough for a game.
- operating system: Make a whole self hosted operating system with your own custom kernel, with basic GUI and tools such as a text editor, file browser and programming language compiler. Throw in some games because without them your OS will be boring. Run the OS on real hardware. It doesn't have to support networking, sound, USB and similar bloat, but thumbs up if you manage even that.
- MMORPG: Make both client and server for an MMORPG game. The game has to support 3D graphics (but can also have 2D frontends) and have some basic lore that makes sense. Remember, it is MASSIVELY multiplayer game, so you have to be able to handle at least 1000 players connected at the same time on some kind of affordable computer. There must be chat, PvP and PvE combat. Thumbs up for releasing it all under CC0.
- Python: Implement the Python programming language, INCLUDING its whole standard library. Bonus points for finishing before the version you are implementing stops being supported.
- the grandest program of all time: Make a program that (in a simplified way but still) simulates the whole Universe 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, dinosaurs, black holes, the future destruction of Earth and so on.
- ruin bitcoin: 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: 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
Here are some questions to test your LRS related knowledge :D Questions here are of varying difficulty, areas and may potentially have even multiple solutions, just like in real life.
Bear in mind the main purpose of this quiz is for you to test your understanding of things AND possibly learn something new or spark some curiosity -- don't rage if you get something wrong or if maybe the question is worded badly (which can happen) or even if the answer here has an error or something (which can also happen), the important thing is you gain new knowledge, if only something like "oh, this is a thing" or "this is a nice kind of problem I haven't seen before" etc.
- What's the difference between free software and open source?
- Use numbers 1, 3, 4 and 6, each exactly once, with any of the basic arithmetic operations (addition, subtraction, multiplication, division) and brackets to get the result 24.
- Name at least 10 different programming languages.
- Why is text written on a piece of paper flipped horizontally when viewed in a mirror -- why is it not flipped vertically?
- Say we want to generate a random number from 0 to 999 (including both) with uniform probability distribution (i.e. every number is equally likely). In C we often do it using the modulo operator like this:
int num = rand() % 1000
. However there is a problem with this -- describe what the problem is and how its negative effect can be reduced. Hint: it's called modulo bias. - Why is it better to have round manhole covers than square ones?
- What's the difference between data and information?
- Bob has written a program and then committed suicide because Alice sued him for sexual harassment. His program is now unmaintained. Bob's program uses 10 libraries. The probability that the API of one such library will be updated and changed in any given year is 5%. If this happens, Bob's program will stop working. During the next 5 years what is the probability of his program breaking?
- What will the following C (C99) snippet print out?
int x = 2; putchar('a' + ((1 == 3 > 2) + ++x));
- Order the following software by the date of the release of their 1.0 version from oldest to newest: TempleOS, MS DOS, original Unix, Linux, Windows. Also point out which one stands out from others and why.
- Please manually evaluate the following expression: (log2(64) - cos(0)) * (6! + 123) / (1 / 19).
- If you're running in a race and overtake the guy who's currently in third place, what place will you be in?
- When multiplying two N bit numbers (unsigned integers, direct representation), what is the minimum number of bits we will generally (i.e. for any possible input numbers) need to store their product? Prove it.
- We have two gears, each of same size and same number of teeth. Gear A is fixed in place, it can't move or rotate, gear B runs around gear A so that it keeps touching it (and therefore rotates along the way) until it gets to the place where it started. How many revolutions around its own axis (from your stationary point of view) has gear B made?
- The sum of penis lengths of Bill Gaytes and Steve Jewbs is 14 millimeters. Bill's dick is 4 millimeters longer than Steve's. What are their penis lengths?
- What's the worst socioeconomic system in the world? You don't even have to say why because that would take too long.
- Manually convert the binary numeral 10110000000010110101 to hexadecimal.
- Why do astronauts on the ISS feel weightlessness?
- How would you compute the circumference of a circle with radius r without using floating point? Consider just the approximate value of pi ~= 3.14, i.e. write the formula multiplying 2 * r by 3.14 only using whole numbers (of course the result will be rounded to whole number too).
- Name at least five licenses commonly used for FOSS programs, five text editors/IDEs commonly used for programming and five operating systems whose source code is mostly free-licensed (none of these is allowed to be using the same or forked kernel of any other).
- What is the minimum number of bits that will allow us to represent 12345678910111213 distinct values?
- Give at least one example of analog electronic device and one of digital mechanical device.
- Transitive relation is such that if element A is in relation with B and B is in relation with C, then also A is in relation with C. Give one real life example of transitive relation and one real life example of relation that is NOT transitive.
- Is physical violence ever justified?
- Find a normalized (having length 1) normal (vector that's perpendicular to surface) of the triangle defined by vertices A = {1,2,3}, B = {5,5,1} and C = {1,5,2}. (Orientation doesn't matter. Geometric, not sexual.)
- Why will (in a typical programming language such as C) an infinite recursion crash the program but infinite loop generally won't?
- Answer yes/no to following: Is base-three number 2101 greater than base-seven number 206? Is using gemini a good idea when gopher exists? Is there any triangle (in Euclidean geometry) whose one side is longer than the sum of lengths of its other two sides?
- There are two walls 2 meters apart, the right wall is moving left by the speed 0.1 m/s, the left wall is moving right by the same speed 0.1 m/s. There is a fly in the middle between the walls, flying by speed 1 m/s. It is flying towards one wall, then when it reaches it it turns around and flies towards the other wall etc. When the walls completely close in, what distance would the fly have traveled? (There is a simple solution.)
- Solve these anagrams: no cure sir, come piss ron, ginger, nicer shops, fog tag, trek now.
- At what times, with precision to seconds, do clock hands overlap (just compute AM, PM is the same)?
- In 3D computer graphics what's the difference between shading and drawing shadows?
- Can we say that the traditional feed forward neural networks are Turing complete? Explain why or why not.
- Wicw mx uum yvfe bbt uhmtf ok?
- 8 bit binary value 10000101 will be interpreted as number 133 under unsigned, direct representation, but what number will it represent in two's complement representation?
- What is the Big O time complexity of worst case scenario for binary search?
- Does the statement "10 does not equal 10" logically imply that intelligent alien life exists?
- Consider a function f(x) = sqrt(1 - x^2) with x belonging to <-1,1>. Convert it to polar coordinates, i.e. write function g(angle) that for given angle (in radians) returns distance from origin and specify for which values of angle the function is defined.
- What is the principle of asymmetric cryptography and why is it called asymmetric?
- What is the main reason for Earth having seasons (summer, winter, ...)?
- Name at least three x86 assembly instructions and shortly explain what they do.
- Point out what's highly unusual or uncommon about this paragraph. That is find a quality of this paragraph that you wouldn't normally think to find if you took a random paragraph from, say, a random book in your library, or in similar work. It's not that difficult.
- 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 }
- Compare advantages and disadvantages of hash tables vs binary trees for storing text strings, especially in regards to searching the string database.
- A woman gave birth to two sons in the span of a single hour, i.e. they are of the same age, but they aren't twins. How is this possible?
- Name at least two TCP/IP or OSI network layers: about each shortly explain its purpose, addressing and at least one protocol of this layer.
- We know HTTPS is shit because it's encrypted and requires certificates. Explain what these certificates are, why HTTPS needs them, how their absence could be "abused" and who issues them.
- We have two barrels, one with water, one with wine, each having the same amount of liquid. We take a cup, fill it with water from the water barrel, pour it over to the wine barrel, mix it up, and then we fill the same cup with this mixture of water and wine from this barrel and pour it back to the water barrel. Both barrels now have the same amount of liquid again, but the liquids are mixed. What percentage of water is in the water barrel and what percentage of wine is in the wine barrel? Find a general formula for a cup of any size.
- In context of programming languages explain the difference between lvalue and rvalue -- Where do they appear? What are they? How do they differ and what conditions are placed on each? Also place each of the following expressions under these categories (i.e. say which are lvalues, rvalues or both; details may depend on programming language, so just comment on that):
123
,someVariable + 123
,someArray[20]
,*(somePointer + 4)
,someVariable
. - Which star is the closest to Earth?
- A symmetric relation is that for it hold that if A is in relation with B, then also B is in relation with A (for example "is married to"). Antisymmetric relation is that for which it holds that if A is in relation with B and A is distinct from B, then B is NOT in relation with A (for example "is parent of"). Give an example of relation that is both symmetric and antisymmetric.
- Is LGBT good?
- Write a C function in 60 characters or fewer that takes a string (
char *
, consider zero terminated ASCII string) and replaces all semicolons in it with colons (;
->:
). It can return nothing (void
). - Order the following people by date of their birth from oldest: Alan Turing, Caesar, Buddha (Siddhartha Gautama), Johannes Gutenberg, Aristotle, Charles Babbage, Linus Torvalds, Jesus, Adolf Hitler, Muhammad (prophet of Islam), Albert Einstein, Richard Stallman, Napoleon, Leonardo da Vinci, Karl Marx.
- Start with number 967; in each step you can either add all the digits (e.g. 456 -> 4 + 5 + 6 = 15), multiply all the digits (e.g. 45 -> 4 * 5 -> 20) or shuffle the digits in any way (e.g. 320 -> 23); your goal is to get to number 3. { This one is mine. ~drummyfish }
- State at least 5 reasons for why Rust sucks so much.
- Find at least one function f(x) that's defined for all non-negative integers and for which it holds that x + f(x) - f(x + 1) = 0. (It's enough if you show a sequence of numbers with obvious continuation.)
- What do we call a program that prints its own source code?
- You receive a 1 bit (black&white) image of 8x8 resolution encoded as hexadecimal string 0xf91919ffff98989f. The string encodes consecutive rows of pixels from top to bottom, each pixel with 1 bit. What does the image show?
- Show (even just geometrically) that for EVERY right triangle if we draw a circle going through all its vertices, the triangle's hypotenuse (longest side) will be the circle's diameter and the circle's center will lie in the middle of the hypotenuse.
- What was the name of the computer that first beat the world chess champion in an official match and in which year, with tolerance plus/minus 2, did it happen?
- Consider the following set of numbers: 416, 81, 82, 69, 94, 28, 785, 44. Which of the following numbers belongs among them: 609, 11, 436, 88, 61 or 325?
- As a programmer how would you represent a set that may contain integer numbers from 1 to 32 (including both)? What's the minimum number of bits you will need for storing this set? Additionally, how would you implement a multiset? I.e. what if you wanted to further allow any number in the set to potentially be present more than once (you can suppose an upper limit for this count at 255)? How many bits will you need then? Hint: set is much different from a list, for example order of its members doesn't matter.
- What's heavier, 20 kilograms of black hole or 30 kilograms of nothing?
- We have a village of 27 people; in upcoming elections 17 want to vote for candidate A and 10 for candidate B. People will be divided into 3 districts, each with 9 people -- in each district one candidate will be picked by majority of votes, and then the candidate who wins in most districts will win the elections. Sort people into districts so that candidate B wins.
- Some rich faggot got himself a house with opening roof -- it's a flat roof that after a button press will start to slide and so enlarge the hole in the roof linearly from 0 to 10 m^2 over 10 seconds. Closing is the same, just in opposite direction. Some idiot pressed the button during rain, the roof is opening and it's raining in the house all over his stereo and home cinema, he will close the roof but he can only do it once it has opened completely (so it will be raining inside for 20 seconds). The rain's intensity is such that 1 m^2 of area catches 1 litre of water in 1 second. When the roof has closed, how much water has poured into the room?
- Please tell me why a human without pressure suit diving under water to great depth will be rekt to pieces by the pressure while a small fish made out of jello is just fine under that enormous pressure.
- Rewrite the following snippet so that it doesn't perform any branching:
if (a > 10) a += 16; else a += 4;
. Watch out, you can't use the ternary operator (a += a > 10 ? 16 : 4;
) because that's typically just a syntax sugar for a branch. - Elon Musk's net worth is about 200 billion USD, suppose he spends all his net worth on $1 prostitutes, how many times to the Moon and back would they reach? Suppose the length of a woman with stretched arms is 2 meters, distance to the Moon 380000 km and neglect the fact that there are only 8 billion people on Earth. Also considering cost of normal living to be $30 per day and average life span 70 years how many lifetimes could he live off of this fortune?
- Say we have a square digital image, i.e. a grid of pixels of resolution N x N. We want to scale it down to N/2 x N/2. For this we could subdivide the image into 2x2 blocks and out of each block take only one pixel, for example the top left one, discarding the three other pixels. However there is a danger in doing this -- for example downscaling a black and white dithering pattern (a kind of checker board) this way would result in either a completely black or completely white image, drastically changing the overall brightness of the whole image! What's this problem called and how could we prevent it?
- Give numeric answers to queries that will follow, then compute average error against each correct answer; you want an error not greater than 3. Number of essential software freedoms defined by GNU. Year when Creative Commons non-profit was established. PDP 10 word size divided by 5 (use integer division). Century (its one-based sequential number) in which Western Roman Empire officially ended (lost its last emperor). Century in which Nikola Tesla was born. Year when first man set foot on the Moon.
- You've probably seen a game freeze and become unresponsive and then you likely heard audio get stuck too in a weird way: a short piece of sound is just played over and over like a broken vinyl record. Why does this happen? How and WHY is audio typically implemented here?
- Mention at least one advantage and one disadvantage of using matrices to represent transformations in 3D engines.
- A nudist is lying completely horizontally on a beach with his dick pointed up towards the sky when a hot 16 year old jailbait walks by and he gets an erection, the sun is shining under the angle 20 degrees (measured from horizon), his dick is now pointed up completely vertically and casts a shadow that reaches up to his feet, i.e. the shadow (completely horizontal) has a length of 60 cm. How long is his dick (with erection)?
- If your computer resides in a private network that's connected to the Internet through a router that performs network address translation (NAT, common with many ISPs), why you typically cannot host a server that would be publicly accessible from the outside Internet? I.e. explain how NAT works and say what's preventing outside computers from reaching your server behind it. How can you make your server work even behind NAT?
- We know that in C (C99) we can kind of use arrays and pointers "interchangeably", we are taught they are really the same. However show at least one example of when the difference matters, i.e. considering e.g.
int *a;
vsint a[N];
write some expressions witha
in it where the distinction will be significant. - Write sed substitution command (the one that starts with
s/
) that will convert Markdown links (format:[link text](destination)
) to HTML links (format:<a href="destination">link text</a>
). You probably need regular expression capture groups for this. - Give at least three examples of palindromic English words (read the same forward and backwards), each at least four letters long.
- Did you enjoy this quiz?
Answers
- Though legally similar (but not identical), free software is a movement based on ethics and pursuing freedom for the software user, open source is evil business movement that avoids talking about ethics, it was forked from free software and is solely focused on exploiting free software licenses for making profit.
- 6 / (1 - 3/4)
- C, C++, Java, JavaScrip, Python, Lisp, Forth, Brainfuck, Fortran, Pascal, Haskell, Prolog, Smalltalk, comun, ...
- The mirror doesn't really flip the text -- what's left/right in front of it is also left/right in it. It is you who flipped the text when you pointed it at the mirror -- you most likely flipped it horizontally so that's how you see it in the mirror, but you could as well have flipped it vertically; then the text would be flipped vertically in the mirror.
- Modulo bias happens when the random number generator's range is non-divisible by our desired range that we enforce with modulo operator -- with shown approach some numbers then have higher probability of being generated than others. For example if rand() here return numbers from 0 to 1023, there is only one way to get 999 (999 % 1000) but two ways to get 0 (0 % 1000 and 1000 % 1000), i.e. 0 is more likely to be generated. Common approach to reducing this effect is to repeatedly generate numbers until we get one falling into the "fair" range (this is not guaranteed to end so we should limit the maximum number of attempts).
- Round covers can't fall in round hole (if the hole radius is just a tiny bit smaller than the cover, which is needed for the cover to work); a square cover CAN fall down a square hole if it is rotated certain way (try it if you can't see it).
- The relationship is commonly described like this: information is interpreted data. I.e. data is just a sequence of symbols, information is the knowledge we extract from it.
- The probability of program breaking is 1 minus probability of it not breaking. For a program to NOT break during one year, all libraries have to stay unchanged (probability 0.95 for each one): that's 0.95 * 0.95 * 0.95 * ... = 0.95^10. Similarly the probability of it not breaking during 5 years is (0.95^10)^5, so the probability of the program breaking in 5 years is around 92%.
e
- Original Unix (around 1970), MS DOS (1981), Windows (1985), Linux (1998), TempleOS (2007). Linux stands out because it's not an operating system, it's a kernel (alternative answers are possible, for example TempleOS is the only software here developed by a single man).
- 80085
- third
- 2 * N. We can multiply the greatest values: (2^N - 1) * (2^N - 1) = 2^(2 * N) - 2^(N + 1) + 1; The greatest term 2^(2 * N) in binary is 1 with 2 * N zeros after it, subtracting (2^(N + 1) - 1) will always definitely shorten this number by at least one bit (1000... minus anything non-zero will shorten the number). So at most we will need 2 * N bits for the result, but we can't use fewer because for example 11 * 11 = 1001 -- in this case fewer than 2 * 2 = 4 bits wouldn't suffice. So in general we need 2 * N bits.
- two (try it, see coin rotation paradox)
- Bills: 9 mm, Steve: 5 mm.
- capitalism
- B00B5
- It's not because of the distance from the Earth, the force of gravity is practically the same there (from the Earth's perspective they're really not significantly far away, even the Moon still feels Earth's gravity very strongly so that it doesn't fly away). It's because they are orbiting the Earth, the path they are taking makes them constantly be in a kind of free fall while also preventing them from hitting the Earth (similarly to a comet who is kind of falling towards the Earth but just narrowly misses it, the orbital path of ISS is just much closer to being a circle than an ellipse). I.e. they feel the same kind of weightlessness you will feel in an elevator that's falling down.
- (2 * r * 314) / 100
- GPL, LGPL, AGPL, MIT, BSD, Apache, CC0, unlicense, zlib, WTFPL, ...; vim, emacs, Acme, Geany, vi, Notepad++, Neovim, Kate, nano, gedit, ...; Debian, 9front, OpenBSD, FreeDOS, Haiku, Minix, ReactOS, GNU/Hurd, V6 Unix, FreeRTOS, ...
- The number is N such that 2^N = 12345678910111213, rounded up, that is ceil(log2(12345678910111213)) = 54.
- amplifier, voltmeter, analog hardware for neural networks, ...; abacus, mechanical calculators such as Curta, Turing machine made of wood, ...
- transitive: e.g. "is older than", "weights the same as", "is descendant of", ... NOT transitive: e.g. "is in love with", "share at least one interest", "is (direct) parent of", ...
- no
- We can use cross product to find a vector perpendicular to two vectors, so we can take e.g. vectors U = B - A = {4,3,-2} and V = C - A = {0,3,-1}; their cross product is UxV = {3,4,12} = n (just look up the formula for cross product). This is the normal, to normalize it we'll first compute its length, i.e. |n| = sqrt(3^2 + 4^2 + 12^2) = 13 and then divide each component of n by this length, i.e. we finally get n0 = {3/13,4/13,12/13}. As a check we can compute dot product of this normal with both U and V and we should get 0 in both cases (meaning the vectors are perpendicular).
- Infinite loop just performs jumps back to some previous program instruction which can be repeated indefinitely, so unless there is something inside the loop that will lead to a crash after many repetitions, an infinite loop will just make the program run forever. With recursion, however, every successive recursive call allocates a new call frame on the call stack (so that the program knows where to return from the function) which will lead to running out of stack memory and to stack overflow.
- no, no, no
- The walls will collide in 10 seconds during which the fly has been constantly flying with the speed 1 m/s, so it traveled 10 meters.
- recursion, compression, nigger, censorship, faggot, network.
- 1:5:27, 2:10:54, 3:16:21, 4:21:49, 5:27:16, 6:32:43, 7:38:10, 8:43:38, 9:49:05, 10:54:32, 12:00:00, you can compute it by making equations for position of the hour and minute hand depending on time, setting them equal and solving, i.e. you get something like tm / (60 * 12) = (tm / 60) - (tm // 60) (where // is integer division and tm is time in minutes); you will find the times are those when minute hand is at multiples of 60 / 11 minues (5:27), i.e. there are 11 such times around the circle and they are evenly spaced.
- Shading is the process of computing surface color of 3D objects, typically depending on the object's material and done by GPU programs called shaders; shading involves for example applying textures, normal mapping and mainly lighting -- though it can make pixels lighter and darker, e.g. depending on surface normal, it only applies local models of light, i.e. doesn't compute true shadows cast by other objects. On the other hand computing shadows uses some method that works with the scene as a whole to compute true shadowing of objects by other objects.
- We can't really talk about Turing completeness of plain neural networks, they cannot be Turing complete because they just transform fixed length input into fixed length output -- a Turing complete model of computation must be able to operate with arbitrarily large input and output. In theory we can replace any neural network with logic circuit or even just plain lookup table. Significance of neural networks doesn't lie in their computational power but rather in their efficiency, i.e. a relatively small and simple neural network may replace what would otherwise be an enormously large and complicated circuit.
- two (or txq); The cipher offsets each letter by its position.
- The number will be negative because the highest (leftmost) bit is 1; to convert a negative number to positive (and vice versa) in two's complement we flip all bits and add 1, i.e. 10000101 -> 01111010 + 1 -> 01111011 which is 123; the original value therefore represents -123.
- log2(n); Binary search works by splitting the data in half, then moving inside the half which contains the searched item, recursively splitting that one in half again and so on -- for this the algorithm will perform at worst as many steps as how many times we can divide the data in halves which is what base 2 logarithm tells us.
- Yes, a false statement implies anything.
- The function plot is a half circle, so expression in polar coordinates is quite simple: g(alpha) = 1, alpha belongs to interval <0, pi>.
- The main difference against symmetric cryptography is we have two keys instead of one, one (private) for encrypting and one (public) for decrypting -- neither key can be used for the other task. Therefore encryption and decryption processes differ greatly (while in symmetric cryptography it's essentially the same, using the same key, just in reversed way), the problem looks different in one direction that the other, hence it is called asymmetric.
- It's not the distance from the Sun (the distance doesn't change that much and it also wouldn't explain why opposite hemispheres have opposite seasons) but the tilted Earth axis -- the tilt changes the maximum height to which the Sun rises above any specific spot and so the angle under which it shines on the that spot; the cosine of this angle says how much energy the place gets from the Sun (similarly to how we use cosine to determine how much light is reflected off of a surface in shaders).
- For example: MOV (moves values between memory locations or registers), JNE (jump if not equal, jumps to another instruction if comparison resulted in non-equality), ADD (adds values in memory or registers), CMP (compares two values and sets the flags register), RET (returns from procedure, pops return address and jumps there) etc.
- There is no letter "e", one of the most common letters in English and other languages -- this is very unlikely to happen by chance.
- 4 and 13, solution: make a table, columns are first integer, rows are second (remember, both P and S can be making their own table like this too). Cross out whole bottom triangle (symmetric values). P doesn't know the numbers, so cross out all combinations of two primes (he would know such numbers as they have only a unique product). S knew P didn't know the numbers, so the sum also mustn't be a sum of two primes (if the sum could be written as a prime plus prime, S couldn't have known that P didn't know the numbers, the numbers may have been those two primes and P would have known them). This means you can cross out all such numbers -- these are all bottom-left-to-top-right diagonals that go through at least one already crossed out number (combination of primes), as these diagonal have constant sum. Now P has a table like this with relatively few numbers left -- if he now leaves in only the numbers that make the product he knows, he'll very likely be left with only one combination of numbers -- there are still many combinations like this, but only the situation when the numbers are set to be 4 and 13 allows S to also deduce the numbers after P declares he knows the numbers -- this is because S knows the combination lies on one specific constant-sum diagonal and 4-13 lie on the only diagonal that in this situation has a unique product within the reduced table. So with some other combinations P could deduce the numbers too, but only with 4-13 S can finally say he knows them too.
- Hash table will only allow efficient searching of exact matches while binary tree will also allow efficient searching e.g. for all strings starting with some prefix. On the other hand hash table may be faster, in ideal case searching for the match in constant time, but this will depend on the quality of implementation (hash function, number of hash bits, ...), in worst case hash table can degenerate to a mere list. Binary trees will generally be a bit slower, with logarithmic time, but here we'll also have to ensure good implementation, especially balancing the tree -- badly implemented tree may also degenerate to a list.
- They are two of triplets (or quadruplets, ...).
- For example: application layer (highest level layer, concerned with applications communicating with each other, addressing by ports, protocols: HTTP, Gopher, FTP, DNS, SSH, ...), transport layer (middle level layer, concerned with delivering data over a potentially unreliable channel, implements establishment of connection, handshakes, reliable delivery, delivering in correct order etc., protocols: TCP, UDP, ...), network layer (below transport layer, concerned with delivering packets over a network, implements routing, forwarding etc., addressing by IP addresses, i.e. numerical machine addresses, protocols: IPv4, IPv6, ...), OSI physical layer (lowest level layer, concerned with sending bits between two directly connected devices, works with frequencies, electronic circuits etc., no addressing, protocols: ethernet, USB, Bluetooth, ...), ...
- Certificate is a file that contains the domain's public key (needed to communicate using asymmetric cryptography) that is digitally signed by some "trusted authority", a business that declares itself to be trusted and lets itself be paid for cryptographically confirming that public keys belong to specific servers. Without certificates a man in the middle "attack" could be performed in which a middle man could sneakily swap a public key that's being exchanged for his own public key which would then allow him to listen to the unencrypted communication.
- Let's say both barrels hold 1 unit of liquid volume at the beginning, n is the portion of one barrel we'll be pouring over (e.g. n = 4 means 1/4th of a barrel), x is water, y is wine. At beginning we have the following in respective barrels: x and y. After first pour over we have: x - x/n and y + x/n. After pour back we'll have: x - x/n + (y + x/n)/(n+1) and y + x/n - (y + x/n)/(n+1). Note: the division by n + 1 is important, dividing by n would be an error (we are taking away a part of barrel that is over its original capacity). Now we can just simplify the expressions to see the amount of water and wine in each barrel, i.e. we'll get: x * (1 - 1/n + 1/(n^2+n)) + y * 1/(n+1) and x * (1/n - 1/(n^2+n)) + y * (1 - 1/(n+1)). So for example amount of water in the first barrel is 1 - 1/n + 1/(n^2+n) which simplifies to n/(n+1) -- that is also the exact amount of wine in the other barrel (1 - 1/(n+1) simplifies to the same expression). So the answer is there is n/(n+1) of the barrel's original liquid (and 1 minus that of the other). Logically we see the purity of each barrel has to be the same just because of the conservation laws.
- The details may differ from language to language, but generally lvalues and rvalues appear in assignment commands -- lvalue is any value or expression that may appear on the left side of assignment, rvalue is that which may appear on the right. For example in
myVariable = x + 4
the left side,myVariable
, is lvalue, and the right side,x + 4
, is rvalue. From this follow the conditions on lvalues and rvalues, i.e. rvalue must be something that returns some computed value and lvalue must be something that identifies a place where a value can be stored -- sometimes an expression can be both lvalue and rvalue at the same time. Examples:123
is rvalue,someVariable + 123
is rvalue,someArray[20]
is both lvalue and rvalue,*(somePointer + 4)
is also both andsomeVariable
is both too. - The Sun. Some people get tricked here, not realizing Sun is a star.
- For example "is equal to" or empty relation (no element is in relation with any other). For such a relation it must generally hold that any element may only be in relation with itself.
- hell no
- For example:
void r(char *s) { while (*s) s += (*s -= *s == ';') != 0; }
; - Buddha (< -480), Diogenes (-404), Aristotle (-384), Caesar (-100), Jesus (around -5), Muhammad (around 570), Gutenberg (around 1400), Da Vinci (1452), Napoleon (1769), Babbage (1791), Marx (1818), Einstein (1879), Hitler (1889), Turing (1912), Stallman (1953), Torvalds (1969).
967 (*) --> 378 (*) --> 168 (*) --> 48 (+) --> 12 (+) --> 3
.- For example: it's bloated, slow, can't be compiled on good computers, it's tranny software with toxic fascist community, it has issues with legal freedom (trademarks), it has code of censorship, it has no specification, it's obsessed with "safety", the name is complete shit, it is associated with corporations, has some abomination of OOP, it's littered with dependencies, it's capitalist monopoly software, it's trying to displace C, it is hosted on GitHub, the users are and devs idiots and so on and so forth.
- We can rewrite the condition as f(x + 1) = f(x) + x from which it's clear that the next number in the sequence is the previous one minus its position (a bit similar to Fibonacci sequence), so for example this sequence will satisfy the equation: 0, 0, 1, 3, 6, 10, 15, ...
- quine
- swastika
- Draw any right triangle; drawing an identical triangle mirrored by the hypotenuse clearly makes the both triangles together form a rectangle (it can be shown generally all angles in it will always be 90 degrees) in which the hypotenuse (that the both triangles share) is the rectangle's diagonal. Now draw also the other diagonal of the rectangle. If we draw a circle going through all the rectangle's verticles (which is the same circle that goes through the original triangle's vertices), it is clear (e.g. just by symmetries) its center lies in the middle of the rectangle, i.e. on the intersection of the diagonals; i.e. the circle's center lies in the middle of the hypotenuse, which also implies the hypotenuse is the circle's diameter (it's a straight line going through the circle's center).
- Deep Blue, 1997
- 436; in the original group each number's digits have a total count of closed loops equal to 2.
- The most common and natural way is to use a bit field, i.e. an "array of bits" -- position of each bit is associated with an object that may potentially be present in the set and the bit's value then says if the object really is present or not. We want to be able to store 32 numbers, so we'll need 32 bits; the lowest bit says if number 1 is present, the next one says if number 2 is present etc. So we can really just use one 32 bit number to store this whole set. Implementing multiset is similar, we just allocate more bits for each potential member to indicate the count; in our case we suppose maximum value 255 so we can use 8 bits for each member (in C we would naturally implement this as an array of bytes), so we'll need 32 * 8 = 256 bits.
- I don't know lol. (That's the correct answer, it shows we can't know everything.)
- District one: all A voters, district two and three will each have 5 B voters and 4 A voters.
- The area of the roof hole says the rate at which the water pours in, we have to integrate the hole area over the 20 seconds. We can split this to two parts that we'll add: from 0 to 10 seconds the function that says the area of the hole is simply f1(t) = t; from 10 to 20 seconds we can use a function f2(t) = 10 - t from 0 to 10 seconds. Integral of f1 is 1/2 * t^2 which at t = 10 gives us 50 litres; integral of f2 is 10 * t - 1/2 * t^2 which also gives 50 litres (it's logical -- opening and closing of the roof is symmetric, same amount of water will fall in). So all in all there will be 100 litres of water in the room.
- Well, it's not the pressure alone that destroys you, it's the difference of external and internal pressure -- human has air of atmospheric pressur in his lungs and other parts of body but the pressure in the depth is greater and overpowers it, so you implode. The fish is happy because it has water inside it, the pressures are in balance.
- something like
a += 4 << ((a > 10) << 1);
- About 1052 distances to the Moon, about 260926 lives.
- It's called aliasing, it's addressed by antialiasing which usually suppresses or removes the effect by increasing the sampling frequency, in our case of downscaling image this would mean replacing each of the small 2x2 blocks by an average pixel value in that block, i.e. taking into account all four samples as opposed to just one.
- 4, 2001, 7 (the word size is 36), 5 (year 476), 19 (year 1856), 1969.
- Continuous audio is normally implemented with a circular buffer -- that is we have a buffer of audio samples of certain size N and that is being played over and over, with the play head going from start to finish and then back to start again; the program has to keep updating this buffer regularly to fill it with new samples to play and it has to keep ahead of the play head. Circular buffer is nice because we don't have to shift it as a whole (which would require moving a lot of values in memory), the only thing that is moving is the play head, that's why it's used as opposed to e.g. a queue. When a game freezes, it stops operating correctly and it stops updating the audio buffer, so whatever is in it will just be played over and over in a loop.
- Main advantage is that a matrix can hold any combination of transformations and that applying all the transformations is then simply performed by performing a single matrix multiplication which additionally may be implemented with quite fast matrix multiplication algorithms. Not only can a matrix represent for example the whole translation+rotation+scale transformation of a single object, it can hold any number of such transformations performed in any order so that we can for example precompute a matrix that will perform world transformation, camera space transformation and view space transformations all at once! That's very fast. Disadvantages of matrices may be that they can only hold affine transformations (i.e. they can't represent ANY transformation whatsoever), it may also be a bit harder to extract back the parameters of the transformation from a matrix (though it can be done) etc. Also in case of some extreme memory limitations matrices may take up more space than would be strictly needed.
- From the right triangle: dick_legth / shadow_length = tan(20 degrees) => dick_legth = tan(20 degrees) * shadow_length ~= 21.83 cm.
- Behind NAT you're in a private network, computers inside it have no public addresses (their IP addresses are in the private range and potentially same as addresses of computers in other private networks), only the router has a public IP address that's unique within the Internet, i.e. from Internet's point of view there is only one device connected -- your router. Computers behind this router are invisible, so no one can connect to the server that's behind it. The possibility of you having a two way communication from within this private network with the outside Internet is enabled by the router who communicates for you when you ask for it, i.e. when you (from inside the private network) initiate the connection -- the router then creates the connection for you and talks to the outside world for you (translating your private address to its public address, hence network address translation). But no one can initiate communication from the outside, the router wouldn't know to whom he wants to speak. This can be solved e.g. by port forwarding (setting some default computer to which communication from outside will be redirected) or tunneling (keeping a constant connection with some outside proxy server that's listening to requests and resending them).
- For example
sizeof(a)
: ifa
is a pointer, size of pointer will be returned whereas in case of array the size of the whole array will be returned. Similarly e.g.&a
: ifa
is a pointer, we'll get a pointer to pointer (generally a different address) whereas in case of arraya
and&a
gives the same address -- that of the array's first element (though the type will be different). - Something like
s/\[\([^]]*\)\](\([^)]*\))/<a href="\2">\1<\/a>/g
. - For example: poop, boob, civic, deed, level, rotor, madam, refer, stats etc.
- yes
Other
Make your own exercises in daily life, adopt a mindset of taking small intellectual (or even non-intellectual) challenges. Don't slip into conformist consumerist life of comfort and ignorance that will make your brain rot. Learn new things just for the sake of it -- make a game, learn a new language, learn to play music, learn chemistry, paint a picture, learn chess, read a whole encyclopedia, read Quran, solve puzzles in magazines, construct a machine out of wood, collect rocks, write a book, compose a song, multiply numbers in your head before sleep ... you get the idea. Even if you just play vidya games, at least play some puzzle game or a strategy game, or a creative sandbox game, or invent some self-imposed challenge and make it into a puzzle game if it's not, or write a bot that plays the game for you, don't be just a zombie staring into screen. It's good to make it a habit to do some small exercise every day, such as play one game of chess with your computer every single day, or watch one video about math etc. -- in a year or two you'll become pretty good at a new skill just by this. WARNING: do not confuse this with the so called "self improvement" cult, you'd be retarded to join that.