Mеmоrу
- Not to be confused with Memory.
Mеmоrу (or Remember, uniсоdе-free), is created by user:iddi01, inspired by the fact that to-do lists sometimes contain "Remember x" entries for very important stuff, and sometimes you need to add more entries to Remember that entry, eventually causing an infinite loop.
An interesting thing about Mеmоrу is the pseudo-random abilities triggered by broken programs.
Execution
The interpreter Remembered the first entry of a to-do list, and following it, Remembering more each time. The interpreter only knows XOR logic, so if being prompted for a second time to Remember something, it forgets it! Each cycle, it executes everything it Remembered from execution of the last cycle. If the state of the Memory had not been changed from the last cycle, it checks its Memory.
If the whole list is Remembered, execution is Forgot. Otherwise, the uniсоdе value of individual numbers of Forgotten list entries is output in top-down order, and a new entry is added on the lowest positive unoccupied number and is Remembered. If only one entry is Forgotten, the new entry is "Remember: x" where x is the number of the Forgotten entry, otherwise it is "Remember everything above". Then it continues the normal execution sequence. Speaking of which, these are the only allowed (case sensitive) entries in the list:
Remember: x
Where x is the number of the entry that will be Remembered. Note that two entries can have the same number, allowing the execution to fork, and the entries does not necessarily need to be in numerical order.
Remember everything above
Self-explanatory, but Remember that Remembering is a XOR operation.
Remember everything below
Occupy: x
Marks the number x as occupied, preventing it to appear in entry additions.
Do nothing
Input should be added to the end of the program with each character being an entry with the number being the uniсоdе value of the character and the operation being Do nothing
. That doesn't mean "Do nothing" can't be added into a program.
Trying to add anything else to the list will place a horrible scene into your Memory if the interpreter is working correctly. (and this is serious!)
Example of a complete list entry:
32. Do nothing
Entries must be separated by lines.
Ехаmрlеѕ
Pseudo-randomly output uniсоdе
This should be taken as an error, for being the most common outcome of a broken program. But the following is a one-line program that does it:
0. Remember: 1
Infinite loop without output
This is also a demonstration of same-number entries.
0. Remember: 0 0. Remember: 0
This works on all extensions with an even number of entries, but odd-numbered ones instead loops with output.
Hello World
Trying to output a given string at an arbitrary point of execution is however very difficult.
0. Do nothing 72. Do nothing 101. Do nothing 108. Do nothing 108. Do nothing 111. Do nothing 44. Do nothing 32. Do nothing 87. Do nothing 111. Do nothing 114. Do nothing 108. Do nothing 100. Do nothing 33. Do nothing
Cat program
The null program is a cat program, similarly to Fuеuе.
To make a true cat program (avoid losing the first character of input):
0. Do nothing
To make a true null program:
0. Remember everything below
Truth machine
This outputs uniсоdе if the input is 0, so it's not a true truth machine.
2. Remember: 3 3. Remember: 49 3. Occupy: 0 3. Remember: 48 48. Remember: 1 49. Remember: 0
Anything else is extremely difficult to make.
The interpreter, in Python
#program input and parsing program = [input("Program (interrupt to exit): ")] try: while True: program += [input()] except KeyboardInterrupt: occupied = set() memory = [] oldmem = [] indexes = {} for line in range(len(program)): ind = program[line].index('. ') no_ = int(program[line][:ind]) occupied.update({no_}) memory.append(0) oldmem.append(0) indexes[no_] = [line] if no_ not in indexes else indexes[no_] + [line] program[line] = program[line][ind+2:] if ': ' in program[line]: ind = program[line].index(': ') comm = program[line][:ind] program[line] = int(program[line][ind+2:]) else: comm = program[line] program[line] = (no_, comm, program[line]) memory[0] = 1 #main program forgot = 1 while forgot: while True: newmem = memory[:] for index in range(len(program)): if memory[index] and not oldmem[index]: oldmem[index] = 1 line = program[index] if line[1] == "Remember": try: for ind in indexes[line[2]]: newmem[ind] ^= 1 oldmem[ind] = 0 except KeyError: newmem[index] = 0 elif line[1] == "Remember everything above": for ind in range(index): newmem[ind] ^= 1 oldmem[ind] = 0 elif line[1] == "Remember everything below": for ind in range(index+1, len(memory)): newmem[ind] ^= 1 oldmem[ind] = 0 elif line[1] == "Occupy": occupied.update({line[2]}) elif line[1] == "Do nothing": "DO NOTHING! i said do nothing! why do you force me to add something here?!" else:
#the purpose of the code in this block is to create terror in suddenly seeing a red screen (in most cases) and that Python "broke" after this
import sys import time sys.stderr.write("Unknown command, use Do nothing to do nothing. ████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████" + "█" * 40251) sys.stdout.close() sys.stderr.close() time.sleep(180) print("now look, you have broke Python.") if newmem == memory: break else: memory = newmem forgot = set() for m in range(len(program)): if not memory[m]: no_ = program[m][0] forgot.update({no_}) print(chr(no_), end="") if forgot: no_ = 0 while no_ in occupied: no_ += 1 if len(forgot) == 1: program.append((no_, "Remember", forgot.pop())) forgot = 1 else: program.append((no_, "Remember everything above")) occupied.update({no_}) indexes[no_] = [len(program) - 1] memory.append(1) oldmem.append(0)