Abuse filter log

Abuse Filter navigation (Home | Recent filter changes | Examine past edits | Abuse log)
Jump to navigation Jump to search
Details for log entry 9,371

02:01, 10 October 2025: Waffelz (talk | contribs) triggered filter 16, performing the action "edit" on 81. Actions taken: Disallow; Filter description: the "User:" must not be hidden on links to userspace (examine)

Changes made in edit

{{Distinguish/Confusion|8}}
:''Note that 81 is always italicized.''

{{infobox proglang
|name=''81''
|paradigms=Imperative
|author=[[User:Waffelz]]
|year=[[:Category:2025|2025]]
|memsys=[[:Category:Cell-based|Cell-based]]
|dimensions=one-dimensional
|class=[[:Category:Turing complete|Turing complete]]
|files=<code>*.81</code>
}}

== About ==
''81'' is an esolang created by [[User:Waffelz|waffelz]] during class because he was bored. It is entirely based on base-81 literals, whose digits are listed in the table below:

{|class=wikitable style="font-family: Monospace; font-size: 12px"
|- style="background: black; color: white"; align="center"
| || X0 || X1 || X2 || X3 || X4 || X5 || X6 || X7 || X8 || X9
|- align="center"
| style="background: black; color: white" | 0X || 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9
|- align="center"
| style="background: black; color: white" | 1X || A || B || C || D || E || F || G || H || I || J
|- align="center"
| style="background: black; color: white" | 2X || K || L || M || N || O || P || Q || R || S || T
|- align="center"
| style="background: black; color: white" | 3X || U || V || W || X || Y || Z || a || b || c || d
|- align="center"
| style="background: black; color: white" | 4X || e || f || g || h || i || j || k || l || m || n
|- align="center"
| style="background: black; color: white" | 5X || o || p || q || r || s || t || u || v || w || x
|- align="center"
| style="background: black; color: white" | 6X || y || z || ! || @ || # || $ || % || ^ || & || *
|- align="center"
| style="background: black; color: white" | 7X || + || / || &vert; || \ || < || > || ~ || ` || ? || =
|- align="center"
| style="background: black; color: white" | 8X || _ || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" |
|}

In ''81'' code, number literals are surrounded in brackets (<code>[...]</code>), and memory addresses are surrounded in braces (<code>{...}</code>). It has a set of 28 opcodes, which are Turing-complete.

== Memory ==
There are 43,046,721 memory cells, indexed from [0] to [&thinsp;_&thinsp;_&thinsp;_&thinsp;], all initialized as 0. They can store integers from 0–15,009,4635,296,999,120, or [0] to [&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;]. It has built-in 5 registers — an accumulator (<code>A</code>), 3 general-purpose registers (<code>RX</code>/<code>RY</code>/<code>RZ</code>), and an overflow flag (<code>V</code>).

== Commands ==
''(<code>M1</code>/<code>M2</code> represent arbitrary memory addresses, <code>C1</code>/<code>C2</code> represent arbitrary number literals, and <code>label</code> represents an arbitrary label.)''

{|class=wikitable
|-
| style="font-family: Monospace; font-size: 12px" | CPY C1 M1 || Copies the value of C1 to M1.
|-
| style="font-family: Monospace; font-size: 12px" | INC M1 || Increment the value of M1.
|-
| style="font-family: Monospace; font-size: 12px" | DEC M1 || Decrement the value of M1.
|-
| style="font-family: Monospace; font-size: 12px" | ADD C1 C2 || Add the values of C1 and C2 and store it in the accumulator.
|-
| style="font-family: Monospace; font-size: 12px" | SUB C1 C2 || Subtract the values of C1 and C2 and store it in the accumulator.
|-
| style="font-family: Monospace; font-size: 12px" | MUL C1 C2 || Multiply the values of C1 and C2 and store it in the accumulator.
|-
| style="font-family: Monospace; font-size: 12px" | DIV C1 C2 || Divide the values of C1 and C2 and store it in the accumulator, rounding down if necessary.
|-
| style="font-family: Monospace; font-size: 12px" | POW C1 C2 || Raise the value of C1 to the value of C2 and store it in the accumulator.
|-
| style="font-family: Monospace; font-size: 12px" | CLR M1 || Reset the value of M1 to 0.
|-
| style="font-family: Monospace; font-size: 12px" | SWP M1 M2 || Swap the values of M1 and M2.
|-
| style="font-family: Monospace; font-size: 12px" | EQL C1 C2 || Store 1 in the accumulator if C1 is equal to C2, else 0.
|-
| style="font-family: Monospace; font-size: 12px" | NEQ C1 C2 || Store 1 in the accumulator if C1 is not equal to C2, else 0.
|-
| style="font-family: Monospace; font-size: 12px" | GRT C1 C2 || Store 1 in the accumulator if C1 is greater than C2, else 0.
|-
| style="font-family: Monospace; font-size: 12px" | LSS C1 C2 || Store 1 in the accumulator if C1 is less than C2, else 0.
|-
| style="font-family: Monospace; font-size: 12px" | ) label || Define a label for use with JMP or related commands.
|-
| style="font-family: Monospace; font-size: 12px" | JMP label || Move code execution to the specified label.
|-
| style="font-family: Monospace; font-size: 12px" | JEQ C1 C2 label || Move code execution to the specified label if C1 is equal to C2, else continue normally.
|-
| style="font-family: Monospace; font-size: 12px" | JNQ C1 C2 label || Move code execution to the specified label if C1 is not equal to C2, else continue normally.
|-
| style="font-family: Monospace; font-size: 12px" | JGR C1 C2 label || Move code execution to the specified label if C1 is greater than to C2, else continue normally.
|-
| style="font-family: Monospace; font-size: 12px" | JLS C1 C2 label || Move code execution to the specified label if C1 is less than C2, else continue normally.
|-
| style="font-family: Monospace; font-size: 12px" | JCD C1 label || Move code execution to the specified label if C1 is 1, else continue normally.
|-
| style="font-family: Monospace; font-size: 12px" | RET || Move code execution to the instruction after the last executed JMP (or related) command.
|-
| style="font-family: Monospace; font-size: 12px" | OUT C1 || Output the Unicode character whose codepoint is stored in C1.
|-
| style="font-family: Monospace; font-size: 12px" | INP || Take one character as input and store its Unicode codepoint in the accumulator.
|-
| style="font-family: Monospace; font-size: 12px" | †NOU C1 || Output the number in C1 in base 10.
|-
| style="font-family: Monospace; font-size: 12px" | †NIN || Take one base-10 number as input and store it in the accumulator.
|-
| style="font-family: Monospace; font-size: 12px" | HLT || Halt the program.
|-
| style="font-family: Monospace; font-size: 12px" | NOP || No-op (does nothing).
|}

''†This operator exists solely for user-friendliness. The programmer must use base 81 internally.''
<br>
''Note: A <code>HLT</code> command is not required for a program.''

== Syntax/Semantics ==
The syntax of ''81'' is very simple. Every command is on its own newline, followed by its arguments separated by one space.
<br>
''81'' has two types of comments — a normal (inline) comment, and a header. Inline comments are delimited via <code>@</code>, and everything after is ignored by the runtime. A header comment must be on its own line, and is surrounded by three equal signs (<code>=== ... ===</code>).

== Example Programs ==
:''Note: These programs contain the original comments from the draft of 81.''
=== “Hello, World!” ===
OUT [/] @ H (72)
OUT [1K] @ e (101)
OUT [1R] @ l (108)
OUT [1R] @ l (108)
OUT [1U] @ o (111)
OUT [i] @ , (44)
OUT [W] @ (32)
OUT [16] @ W (87)
OUT [1U] @ o (111
OUT [1X] @ r (114)
OUT [1R] @ l (108)
OUT [1J] @ d (100)
OUT [X] @ ! (33)
HLT

=== Fibonacci Numbers ===
=== input collection ===
NIN @ iteration count
CPY A G0
=== edge cases ===
JEQ G0 [0] _
JEQ G0 [1] c1
JEQ G0 [2] c2
=== prepare memory ==
CPY [0] {0}
CPY [1] {1}
DEC G0
DEC G0
=== set up output ===
OUT {0}
OUT [D]
OUT {1}
=== main loop ===
) loop
ADD {0} {1} @ calculate the next number based on
@ the current ones in memory
JCD V err @ jump to )err on an overflow
OUT [D] @ output a space, then the number
NOU A @ this stops trailing spaces in the
CPY {0} A @ program’s output.
SWP {0} {1} @ keep only what’s needed for the next
DEC G0 @ iteration
JGR G0 0 loop
=== 0 edge case ===
) _
HLT
=== 1 edge case ===
) c1
NOU {0}
HLT
=== 2 edge case ===
) c2
NOU {0}
OUT [D]
NOU {1}
HLT
=== overflow error ===
) err
OUT [*] @ E (69)
OUT [1X] @ r (114)
OUT [1X] @ r (114)

=== Primality Check ===
=== input collection ===
NIN @ the number to check
CPY RX A
=== handle n = 0 or 1 edge cases ===
JLS RX [2] N/A
=== prepare memory ===
CPY RY [2] @ the current integer being divided
=== main loop ===
) loop
@ if RY^2 > RX, and the loop is still going (meaning
@ it passed), stop the program
MUL RY RY
JGR A RX p
@ if RX % RY != 0, stop the program
DIV RX RY
MUL A RY
SUB RX A
JEQ A [0] _
@ increment RY and loop
INC RY
JMP loop
=== primality check indeterminant ===
) N/A
OUT [?] @ N (78)
OUT [l] @ / (47)
OUT [$] @ A (65)
HLT
=== primality check passed (prime) ===
) p
OUT [_4] @ T (84)
HLT
=== primality check failed (not prime) ===
) _
OUT [+] @ F (70)
HLT

[[Category:Low-level]]
[[Category:Cell-based]]
[[Category:Unimplemented]]
[[Category:Languages]]
[[Category:2025]]
[[Category:Turing complete]]

Action parameters

VariableValue
Edit count of the user (user_editcount)
9
Name of the user account (user_name)
'Waffelz'
Age of the user account (user_age)
24449059
Page ID (page_id)
0
Page namespace (page_namespace)
0
Page title (without namespace) (page_title)
'81'
Full page title (page_prefixedtitle)
'81'
Action (action)
'edit'
Edit summary/reason (summary)
''
Old content model (old_content_model)
''
New content model (new_content_model)
'wikitext'
Old page wikitext, before the edit (old_wikitext)
''
New page wikitext, after the edit (new_wikitext)
'{{Distinguish/Confusion|8}} :''Note that 81 is always italicized.'' {{infobox proglang |name=''81'' |paradigms=Imperative |author=[[User:Waffelz]] |year=[[:Category:2025|2025]] |memsys=[[:Category:Cell-based|Cell-based]] |dimensions=one-dimensional |class=[[:Category:Turing complete|Turing complete]] |files=<code>*.81</code> }} == About == ''81'' is an esolang created by [[User:Waffelz|waffelz]] during class because he was bored. It is entirely based on base-81 literals, whose digits are listed in the table below: {|class=wikitable style="font-family: Monospace; font-size: 12px" |- style="background: black; color: white"; align="center" | || X0 || X1 || X2 || X3 || X4 || X5 || X6 || X7 || X8 || X9 |- align="center" | style="background: black; color: white" | 0X || 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 |- align="center" | style="background: black; color: white" | 1X || A || B || C || D || E || F || G || H || I || J |- align="center" | style="background: black; color: white" | 2X || K || L || M || N || O || P || Q || R || S || T |- align="center" | style="background: black; color: white" | 3X || U || V || W || X || Y || Z || a || b || c || d |- align="center" | style="background: black; color: white" | 4X || e || f || g || h || i || j || k || l || m || n |- align="center" | style="background: black; color: white" | 5X || o || p || q || r || s || t || u || v || w || x |- align="center" | style="background: black; color: white" | 6X || y || z || ! || @ || # || $ || % || ^ || & || * |- align="center" | style="background: black; color: white" | 7X || + || / || &vert; || \ || < || > || ~ || ` || ? || = |- align="center" | style="background: black; color: white" | 8X || _ || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | |} In ''81'' code, number literals are surrounded in brackets (<code>[...]</code>), and memory addresses are surrounded in braces (<code>{...}</code>). It has a set of 28 opcodes, which are Turing-complete. == Memory == There are 43,046,721 memory cells, indexed from [0] to [&thinsp;_&thinsp;_&thinsp;_&thinsp;], all initialized as 0. They can store integers from 0–15,009,4635,296,999,120, or [0] to [&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;]. It has built-in 5 registers — an accumulator (<code>A</code>), 3 general-purpose registers (<code>RX</code>/<code>RY</code>/<code>RZ</code>), and an overflow flag (<code>V</code>). == Commands == ''(<code>M1</code>/<code>M2</code> represent arbitrary memory addresses, <code>C1</code>/<code>C2</code> represent arbitrary number literals, and <code>label</code> represents an arbitrary label.)'' {|class=wikitable |- | style="font-family: Monospace; font-size: 12px" | CPY C1 M1 || Copies the value of C1 to M1. |- | style="font-family: Monospace; font-size: 12px" | INC M1 || Increment the value of M1. |- | style="font-family: Monospace; font-size: 12px" | DEC M1 || Decrement the value of M1. |- | style="font-family: Monospace; font-size: 12px" | ADD C1 C2 || Add the values of C1 and C2 and store it in the accumulator. |- | style="font-family: Monospace; font-size: 12px" | SUB C1 C2 || Subtract the values of C1 and C2 and store it in the accumulator. |- | style="font-family: Monospace; font-size: 12px" | MUL C1 C2 || Multiply the values of C1 and C2 and store it in the accumulator. |- | style="font-family: Monospace; font-size: 12px" | DIV C1 C2 || Divide the values of C1 and C2 and store it in the accumulator, rounding down if necessary. |- | style="font-family: Monospace; font-size: 12px" | POW C1 C2 || Raise the value of C1 to the value of C2 and store it in the accumulator. |- | style="font-family: Monospace; font-size: 12px" | CLR M1 || Reset the value of M1 to 0. |- | style="font-family: Monospace; font-size: 12px" | SWP M1 M2 || Swap the values of M1 and M2. |- | style="font-family: Monospace; font-size: 12px" | EQL C1 C2 || Store 1 in the accumulator if C1 is equal to C2, else 0. |- | style="font-family: Monospace; font-size: 12px" | NEQ C1 C2 || Store 1 in the accumulator if C1 is not equal to C2, else 0. |- | style="font-family: Monospace; font-size: 12px" | GRT C1 C2 || Store 1 in the accumulator if C1 is greater than C2, else 0. |- | style="font-family: Monospace; font-size: 12px" | LSS C1 C2 || Store 1 in the accumulator if C1 is less than C2, else 0. |- | style="font-family: Monospace; font-size: 12px" | ) label || Define a label for use with JMP or related commands. |- | style="font-family: Monospace; font-size: 12px" | JMP label || Move code execution to the specified label. |- | style="font-family: Monospace; font-size: 12px" | JEQ C1 C2 label || Move code execution to the specified label if C1 is equal to C2, else continue normally. |- | style="font-family: Monospace; font-size: 12px" | JNQ C1 C2 label || Move code execution to the specified label if C1 is not equal to C2, else continue normally. |- | style="font-family: Monospace; font-size: 12px" | JGR C1 C2 label || Move code execution to the specified label if C1 is greater than to C2, else continue normally. |- | style="font-family: Monospace; font-size: 12px" | JLS C1 C2 label || Move code execution to the specified label if C1 is less than C2, else continue normally. |- | style="font-family: Monospace; font-size: 12px" | JCD C1 label || Move code execution to the specified label if C1 is 1, else continue normally. |- | style="font-family: Monospace; font-size: 12px" | RET || Move code execution to the instruction after the last executed JMP (or related) command. |- | style="font-family: Monospace; font-size: 12px" | OUT C1 || Output the Unicode character whose codepoint is stored in C1. |- | style="font-family: Monospace; font-size: 12px" | INP || Take one character as input and store its Unicode codepoint in the accumulator. |- | style="font-family: Monospace; font-size: 12px" | †NOU C1 || Output the number in C1 in base 10. |- | style="font-family: Monospace; font-size: 12px" | †NIN || Take one base-10 number as input and store it in the accumulator. |- | style="font-family: Monospace; font-size: 12px" | HLT || Halt the program. |- | style="font-family: Monospace; font-size: 12px" | NOP || No-op (does nothing). |} ''†This operator exists solely for user-friendliness. The programmer must use base 81 internally.'' <br> ''Note: A <code>HLT</code> command is not required for a program.'' == Syntax/Semantics == The syntax of ''81'' is very simple. Every command is on its own newline, followed by its arguments separated by one space. <br> ''81'' has two types of comments — a normal (inline) comment, and a header. Inline comments are delimited via <code>@</code>, and everything after is ignored by the runtime. A header comment must be on its own line, and is surrounded by three equal signs (<code>=== ... ===</code>). == Example Programs == :''Note: These programs contain the original comments from the draft of 81.'' === “Hello, World!” === OUT [/] @ H (72) OUT [1K] @ e (101) OUT [1R] @ l (108) OUT [1R] @ l (108) OUT [1U] @ o (111) OUT [i] @ , (44) OUT [W] @ (32) OUT [16] @ W (87) OUT [1U] @ o (111 OUT [1X] @ r (114) OUT [1R] @ l (108) OUT [1J] @ d (100) OUT [X] @ ! (33) HLT === Fibonacci Numbers === === input collection === NIN @ iteration count CPY A G0 === edge cases === JEQ G0 [0] _ JEQ G0 [1] c1 JEQ G0 [2] c2 === prepare memory == CPY [0] {0} CPY [1] {1} DEC G0 DEC G0 === set up output === OUT {0} OUT [D] OUT {1} === main loop === ) loop ADD {0} {1} @ calculate the next number based on @ the current ones in memory JCD V err @ jump to )err on an overflow OUT [D] @ output a space, then the number NOU A @ this stops trailing spaces in the CPY {0} A @ program’s output. SWP {0} {1} @ keep only what’s needed for the next DEC G0 @ iteration JGR G0 0 loop === 0 edge case === ) _ HLT === 1 edge case === ) c1 NOU {0} HLT === 2 edge case === ) c2 NOU {0} OUT [D] NOU {1} HLT === overflow error === ) err OUT [*] @ E (69) OUT [1X] @ r (114) OUT [1X] @ r (114) === Primality Check === === input collection === NIN @ the number to check CPY RX A === handle n = 0 or 1 edge cases === JLS RX [2] N/A === prepare memory === CPY RY [2] @ the current integer being divided === main loop === ) loop @ if RY^2 > RX, and the loop is still going (meaning @ it passed), stop the program MUL RY RY JGR A RX p @ if RX % RY != 0, stop the program DIV RX RY MUL A RY SUB RX A JEQ A [0] _ @ increment RY and loop INC RY JMP loop === primality check indeterminant === ) N/A OUT [?] @ N (78) OUT [l] @ / (47) OUT [$] @ A (65) HLT === primality check passed (prime) === ) p OUT [_4] @ T (84) HLT === primality check failed (not prime) === ) _ OUT [+] @ F (70) HLT [[Category:Low-level]] [[Category:Cell-based]] [[Category:Unimplemented]] [[Category:Languages]] [[Category:2025]] [[Category:Turing complete]]'
Unified diff of changes made by edit (edit_diff)
'@@ -1,0 +1,243 @@ +{{Distinguish/Confusion|8}} +:''Note that 81 is always italicized.'' + +{{infobox proglang + |name=''81'' + |paradigms=Imperative + |author=[[User:Waffelz]] + |year=[[:Category:2025|2025]] + |memsys=[[:Category:Cell-based|Cell-based]] + |dimensions=one-dimensional + |class=[[:Category:Turing complete|Turing complete]] + |files=<code>*.81</code> +}} + +== About == +''81'' is an esolang created by [[User:Waffelz|waffelz]] during class because he was bored. It is entirely based on base-81 literals, whose digits are listed in the table below: + +{|class=wikitable style="font-family: Monospace; font-size: 12px" +|- style="background: black; color: white"; align="center" +| || X0 || X1 || X2 || X3 || X4 || X5 || X6 || X7 || X8 || X9 +|- align="center" +| style="background: black; color: white" | 0X || 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 +|- align="center" +| style="background: black; color: white" | 1X || A || B || C || D || E || F || G || H || I || J +|- align="center" +| style="background: black; color: white" | 2X || K || L || M || N || O || P || Q || R || S || T +|- align="center" +| style="background: black; color: white" | 3X || U || V || W || X || Y || Z || a || b || c || d +|- align="center" +| style="background: black; color: white" | 4X || e || f || g || h || i || j || k || l || m || n +|- align="center" +| style="background: black; color: white" | 5X || o || p || q || r || s || t || u || v || w || x +|- align="center" +| style="background: black; color: white" | 6X || y || z || ! || @ || # || $ || % || ^ || & || * +|- align="center" +| style="background: black; color: white" | 7X || + || / || &vert; || \ || < || > || ~ || ` || ? || = +|- align="center" +| style="background: black; color: white" | 8X || _ || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | +|} + +In ''81'' code, number literals are surrounded in brackets (<code>[...]</code>), and memory addresses are surrounded in braces (<code>{...}</code>). It has a set of 28 opcodes, which are Turing-complete. + +== Memory == +There are 43,046,721 memory cells, indexed from [0] to [&thinsp;_&thinsp;_&thinsp;_&thinsp;], all initialized as 0. They can store integers from 0–15,009,4635,296,999,120, or [0] to [&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;]. It has built-in 5 registers — an accumulator (<code>A</code>), 3 general-purpose registers (<code>RX</code>/<code>RY</code>/<code>RZ</code>), and an overflow flag (<code>V</code>). + +== Commands == +''(<code>M1</code>/<code>M2</code> represent arbitrary memory addresses, <code>C1</code>/<code>C2</code> represent arbitrary number literals, and <code>label</code> represents an arbitrary label.)'' + +{|class=wikitable +|- +| style="font-family: Monospace; font-size: 12px" | CPY C1 M1 || Copies the value of C1 to M1. +|- +| style="font-family: Monospace; font-size: 12px" | INC M1 || Increment the value of M1. +|- +| style="font-family: Monospace; font-size: 12px" | DEC M1 || Decrement the value of M1. +|- +| style="font-family: Monospace; font-size: 12px" | ADD C1 C2 || Add the values of C1 and C2 and store it in the accumulator. +|- +| style="font-family: Monospace; font-size: 12px" | SUB C1 C2 || Subtract the values of C1 and C2 and store it in the accumulator. +|- +| style="font-family: Monospace; font-size: 12px" | MUL C1 C2 || Multiply the values of C1 and C2 and store it in the accumulator. +|- +| style="font-family: Monospace; font-size: 12px" | DIV C1 C2 || Divide the values of C1 and C2 and store it in the accumulator, rounding down if necessary. +|- +| style="font-family: Monospace; font-size: 12px" | POW C1 C2 || Raise the value of C1 to the value of C2 and store it in the accumulator. +|- +| style="font-family: Monospace; font-size: 12px" | CLR M1 || Reset the value of M1 to 0. +|- +| style="font-family: Monospace; font-size: 12px" | SWP M1 M2 || Swap the values of M1 and M2. +|- +| style="font-family: Monospace; font-size: 12px" | EQL C1 C2 || Store 1 in the accumulator if C1 is equal to C2, else 0. +|- +| style="font-family: Monospace; font-size: 12px" | NEQ C1 C2 || Store 1 in the accumulator if C1 is not equal to C2, else 0. +|- +| style="font-family: Monospace; font-size: 12px" | GRT C1 C2 || Store 1 in the accumulator if C1 is greater than C2, else 0. +|- +| style="font-family: Monospace; font-size: 12px" | LSS C1 C2 || Store 1 in the accumulator if C1 is less than C2, else 0. +|- +| style="font-family: Monospace; font-size: 12px" | ) label || Define a label for use with JMP or related commands. +|- +| style="font-family: Monospace; font-size: 12px" | JMP label || Move code execution to the specified label. +|- +| style="font-family: Monospace; font-size: 12px" | JEQ C1 C2 label || Move code execution to the specified label if C1 is equal to C2, else continue normally. +|- +| style="font-family: Monospace; font-size: 12px" | JNQ C1 C2 label || Move code execution to the specified label if C1 is not equal to C2, else continue normally. +|- +| style="font-family: Monospace; font-size: 12px" | JGR C1 C2 label || Move code execution to the specified label if C1 is greater than to C2, else continue normally. +|- +| style="font-family: Monospace; font-size: 12px" | JLS C1 C2 label || Move code execution to the specified label if C1 is less than C2, else continue normally. +|- +| style="font-family: Monospace; font-size: 12px" | JCD C1 label || Move code execution to the specified label if C1 is 1, else continue normally. +|- +| style="font-family: Monospace; font-size: 12px" | RET || Move code execution to the instruction after the last executed JMP (or related) command. +|- +| style="font-family: Monospace; font-size: 12px" | OUT C1 || Output the Unicode character whose codepoint is stored in C1. +|- +| style="font-family: Monospace; font-size: 12px" | INP || Take one character as input and store its Unicode codepoint in the accumulator. +|- +| style="font-family: Monospace; font-size: 12px" | †NOU C1 || Output the number in C1 in base 10. +|- +| style="font-family: Monospace; font-size: 12px" | †NIN || Take one base-10 number as input and store it in the accumulator. +|- +| style="font-family: Monospace; font-size: 12px" | HLT || Halt the program. +|- +| style="font-family: Monospace; font-size: 12px" | NOP || No-op (does nothing). +|} + +''†This operator exists solely for user-friendliness. The programmer must use base 81 internally.'' +<br> +''Note: A <code>HLT</code> command is not required for a program.'' + +== Syntax/Semantics == +The syntax of ''81'' is very simple. Every command is on its own newline, followed by its arguments separated by one space. +<br> +''81'' has two types of comments — a normal (inline) comment, and a header. Inline comments are delimited via <code>@</code>, and everything after is ignored by the runtime. A header comment must be on its own line, and is surrounded by three equal signs (<code>=== ... ===</code>). + +== Example Programs == +:''Note: These programs contain the original comments from the draft of 81.'' +=== “Hello, World!” === + OUT [/] @ H (72) + OUT [1K] @ e (101) + OUT [1R] @ l (108) + OUT [1R] @ l (108) + OUT [1U] @ o (111) + OUT [i] @ , (44) + OUT [W] @ (32) + OUT [16] @ W (87) + OUT [1U] @ o (111 + OUT [1X] @ r (114) + OUT [1R] @ l (108) + OUT [1J] @ d (100) + OUT [X] @ ! (33) + HLT + +=== Fibonacci Numbers === + === input collection === + NIN @ iteration count + CPY A G0 + + === edge cases === + JEQ G0 [0] _ + JEQ G0 [1] c1 + JEQ G0 [2] c2 + + === prepare memory == + CPY [0] {0} + CPY [1] {1} + DEC G0 + DEC G0 + + === set up output === + OUT {0} + OUT [D] + OUT {1} + + === main loop === + ) loop + ADD {0} {1} @ calculate the next number based on + @ the current ones in memory + + JCD V err @ jump to )err on an overflow + + OUT [D] @ output a space, then the number + NOU A @ this stops trailing spaces in the + CPY {0} A @ program’s output. + + SWP {0} {1} @ keep only what’s needed for the next + DEC G0 @ iteration + JGR G0 0 loop + + === 0 edge case === + ) _ + HLT + + === 1 edge case === + ) c1 + NOU {0} + HLT + + === 2 edge case === + ) c2 + NOU {0} + OUT [D] + NOU {1} + HLT + + === overflow error === + ) err + OUT [*] @ E (69) + OUT [1X] @ r (114) + OUT [1X] @ r (114) + +=== Primality Check === + === input collection === + NIN @ the number to check + CPY RX A + + === handle n = 0 or 1 edge cases === + JLS RX [2] N/A + + === prepare memory === + CPY RY [2] @ the current integer being divided + + === main loop === + ) loop + @ if RY^2 > RX, and the loop is still going (meaning + @ it passed), stop the program + MUL RY RY + JGR A RX p + + @ if RX % RY != 0, stop the program + DIV RX RY + MUL A RY + SUB RX A + JEQ A [0] _ + + @ increment RY and loop + INC RY + JMP loop + + === primality check indeterminant === + ) N/A + OUT [?] @ N (78) + OUT [l] @ / (47) + OUT [$] @ A (65) + HLT + + === primality check passed (prime) === + ) p + OUT [_4] @ T (84) + HLT + + === primality check failed (not prime) === + ) _ + OUT [+] @ F (70) + HLT + +[[Category:Low-level]] +[[Category:Cell-based]] +[[Category:Unimplemented]] +[[Category:Languages]] +[[Category:2025]] +[[Category:Turing complete]] '
New page size (new_size)
9457
Old page size (old_size)
0
Lines added in edit (added_lines)
[ 0 => '{{Distinguish/Confusion|8}}', 1 => ':''Note that 81 is always italicized.''', 2 => '', 3 => '{{infobox proglang', 4 => ' |name=''81''', 5 => ' |paradigms=Imperative', 6 => ' |author=[[User:Waffelz]]', 7 => ' |year=[[:Category:2025|2025]]', 8 => ' |memsys=[[:Category:Cell-based|Cell-based]]', 9 => ' |dimensions=one-dimensional', 10 => ' |class=[[:Category:Turing complete|Turing complete]]', 11 => ' |files=<code>*.81</code>', 12 => '}}', 13 => '', 14 => '== About ==', 15 => '''81'' is an esolang created by [[User:Waffelz|waffelz]] during class because he was bored. It is entirely based on base-81 literals, whose digits are listed in the table below:', 16 => '', 17 => '{|class=wikitable style="font-family: Monospace; font-size: 12px"', 18 => '|- style="background: black; color: white"; align="center"', 19 => '| || X0 || X1 || X2 || X3 || X4 || X5 || X6 || X7 || X8 || X9', 20 => '|- align="center"', 21 => '| style="background: black; color: white" | 0X || 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9', 22 => '|- align="center"', 23 => '| style="background: black; color: white" | 1X || A || B || C || D || E || F || G || H || I || J', 24 => '|- align="center"', 25 => '| style="background: black; color: white" | 2X || K || L || M || N || O || P || Q || R || S || T', 26 => '|- align="center"', 27 => '| style="background: black; color: white" | 3X || U || V || W || X || Y || Z || a || b || c || d', 28 => '|- align="center"', 29 => '| style="background: black; color: white" | 4X || e || f || g || h || i || j || k || l || m || n', 30 => '|- align="center"', 31 => '| style="background: black; color: white" | 5X || o || p || q || r || s || t || u || v || w || x', 32 => '|- align="center"', 33 => '| style="background: black; color: white" | 6X || y || z || ! || @ || # || $ || % || ^ || & || *', 34 => '|- align="center"', 35 => '| style="background: black; color: white" | 7X || + || / || &vert; || \ || < || > || ~ || ` || ? || =', 36 => '|- align="center"', 37 => '| style="background: black; color: white" | 8X || _ || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" | || style ="background: black; color: white" |', 38 => '|}', 39 => '', 40 => 'In ''81'' code, number literals are surrounded in brackets (<code>[...]</code>), and memory addresses are surrounded in braces (<code>{...}</code>). It has a set of 28 opcodes, which are Turing-complete.', 41 => '', 42 => '== Memory ==', 43 => 'There are 43,046,721 memory cells, indexed from [0] to [&thinsp;_&thinsp;_&thinsp;_&thinsp;], all initialized as 0. They can store integers from 0–15,009,4635,296,999,120, or [0] to [&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;_&thinsp;]. It has built-in 5 registers — an accumulator (<code>A</code>), 3 general-purpose registers (<code>RX</code>/<code>RY</code>/<code>RZ</code>), and an overflow flag (<code>V</code>). ', 44 => '', 45 => '== Commands ==', 46 => '''(<code>M1</code>/<code>M2</code> represent arbitrary memory addresses, <code>C1</code>/<code>C2</code> represent arbitrary number literals, and <code>label</code> represents an arbitrary label.)''', 47 => '', 48 => '{|class=wikitable', 49 => '|-', 50 => '| style="font-family: Monospace; font-size: 12px" | CPY C1 M1 || Copies the value of C1 to M1.', 51 => '|-', 52 => '| style="font-family: Monospace; font-size: 12px" | INC M1 || Increment the value of M1.', 53 => '|-', 54 => '| style="font-family: Monospace; font-size: 12px" | DEC M1 || Decrement the value of M1.', 55 => '|-', 56 => '| style="font-family: Monospace; font-size: 12px" | ADD C1 C2 || Add the values of C1 and C2 and store it in the accumulator.', 57 => '|-', 58 => '| style="font-family: Monospace; font-size: 12px" | SUB C1 C2 || Subtract the values of C1 and C2 and store it in the accumulator.', 59 => '|-', 60 => '| style="font-family: Monospace; font-size: 12px" | MUL C1 C2 || Multiply the values of C1 and C2 and store it in the accumulator.', 61 => '|-', 62 => '| style="font-family: Monospace; font-size: 12px" | DIV C1 C2 || Divide the values of C1 and C2 and store it in the accumulator, rounding down if necessary.', 63 => '|-', 64 => '| style="font-family: Monospace; font-size: 12px" | POW C1 C2 || Raise the value of C1 to the value of C2 and store it in the accumulator.', 65 => '|-', 66 => '| style="font-family: Monospace; font-size: 12px" | CLR M1 || Reset the value of M1 to 0.', 67 => '|-', 68 => '| style="font-family: Monospace; font-size: 12px" | SWP M1 M2 || Swap the values of M1 and M2.', 69 => '|-', 70 => '| style="font-family: Monospace; font-size: 12px" | EQL C1 C2 || Store 1 in the accumulator if C1 is equal to C2, else 0.', 71 => '|-', 72 => '| style="font-family: Monospace; font-size: 12px" | NEQ C1 C2 || Store 1 in the accumulator if C1 is not equal to C2, else 0.', 73 => '|-', 74 => '| style="font-family: Monospace; font-size: 12px" | GRT C1 C2 || Store 1 in the accumulator if C1 is greater than C2, else 0.', 75 => '|-', 76 => '| style="font-family: Monospace; font-size: 12px" | LSS C1 C2 || Store 1 in the accumulator if C1 is less than C2, else 0.', 77 => '|-', 78 => '| style="font-family: Monospace; font-size: 12px" | ) label || Define a label for use with JMP or related commands.', 79 => '|-', 80 => '| style="font-family: Monospace; font-size: 12px" | JMP label || Move code execution to the specified label.', 81 => '|-', 82 => '| style="font-family: Monospace; font-size: 12px" | JEQ C1 C2 label || Move code execution to the specified label if C1 is equal to C2, else continue normally.', 83 => '|-', 84 => '| style="font-family: Monospace; font-size: 12px" | JNQ C1 C2 label || Move code execution to the specified label if C1 is not equal to C2, else continue normally.', 85 => '|-', 86 => '| style="font-family: Monospace; font-size: 12px" | JGR C1 C2 label || Move code execution to the specified label if C1 is greater than to C2, else continue normally.', 87 => '|-', 88 => '| style="font-family: Monospace; font-size: 12px" | JLS C1 C2 label || Move code execution to the specified label if C1 is less than C2, else continue normally.', 89 => '|-', 90 => '| style="font-family: Monospace; font-size: 12px" | JCD C1 label || Move code execution to the specified label if C1 is 1, else continue normally.', 91 => '|-', 92 => '| style="font-family: Monospace; font-size: 12px" | RET || Move code execution to the instruction after the last executed JMP (or related) command.', 93 => '|-', 94 => '| style="font-family: Monospace; font-size: 12px" | OUT C1 || Output the Unicode character whose codepoint is stored in C1.', 95 => '|-', 96 => '| style="font-family: Monospace; font-size: 12px" | INP || Take one character as input and store its Unicode codepoint in the accumulator.', 97 => '|-', 98 => '| style="font-family: Monospace; font-size: 12px" | †NOU C1 || Output the number in C1 in base 10.', 99 => '|-', 100 => '| style="font-family: Monospace; font-size: 12px" | †NIN || Take one base-10 number as input and store it in the accumulator.', 101 => '|-', 102 => '| style="font-family: Monospace; font-size: 12px" | HLT || Halt the program.', 103 => '|-', 104 => '| style="font-family: Monospace; font-size: 12px" | NOP || No-op (does nothing).', 105 => '|}', 106 => '', 107 => '''†This operator exists solely for user-friendliness. The programmer must use base 81 internally.''', 108 => '<br>', 109 => '''Note: A <code>HLT</code> command is not required for a program.''', 110 => '', 111 => '== Syntax/Semantics ==', 112 => 'The syntax of ''81'' is very simple. Every command is on its own newline, followed by its arguments separated by one space.', 113 => '<br>', 114 => '''81'' has two types of comments — a normal (inline) comment, and a header. Inline comments are delimited via <code>@</code>, and everything after is ignored by the runtime. A header comment must be on its own line, and is surrounded by three equal signs (<code>=== ... ===</code>).', 115 => '', 116 => '== Example Programs ==', 117 => ':''Note: These programs contain the original comments from the draft of 81.''', 118 => '=== “Hello, World!” ===', 119 => ' OUT [/] @ H (72)', 120 => ' OUT [1K] @ e (101)', 121 => ' OUT [1R] @ l (108)', 122 => ' OUT [1R] @ l (108)', 123 => ' OUT [1U] @ o (111)', 124 => ' OUT [i] @ , (44)', 125 => ' OUT [W] @ (32)', 126 => ' OUT [16] @ W (87)', 127 => ' OUT [1U] @ o (111', 128 => ' OUT [1X] @ r (114)', 129 => ' OUT [1R] @ l (108)', 130 => ' OUT [1J] @ d (100)', 131 => ' OUT [X] @ ! (33)', 132 => ' HLT', 133 => '', 134 => '=== Fibonacci Numbers ===', 135 => ' === input collection ===', 136 => ' NIN @ iteration count', 137 => ' CPY A G0', 138 => ' ', 139 => ' === edge cases ===', 140 => ' JEQ G0 [0] _', 141 => ' JEQ G0 [1] c1', 142 => ' JEQ G0 [2] c2', 143 => ' ', 144 => ' === prepare memory ==', 145 => ' CPY [0] {0}', 146 => ' CPY [1] {1}', 147 => ' DEC G0', 148 => ' DEC G0', 149 => ' ', 150 => ' === set up output ===', 151 => ' OUT {0}', 152 => ' OUT [D]', 153 => ' OUT {1}', 154 => ' ', 155 => ' === main loop ===', 156 => ' ) loop', 157 => ' ADD {0} {1} @ calculate the next number based on', 158 => ' @ the current ones in memory', 159 => ' ', 160 => ' JCD V err @ jump to )err on an overflow', 161 => ' ', 162 => ' OUT [D] @ output a space, then the number', 163 => ' NOU A @ this stops trailing spaces in the', 164 => ' CPY {0} A @ program’s output.', 165 => ' ', 166 => ' SWP {0} {1} @ keep only what’s needed for the next', 167 => ' DEC G0 @ iteration', 168 => ' JGR G0 0 loop', 169 => ' ', 170 => ' === 0 edge case ===', 171 => ' ) _', 172 => ' HLT', 173 => ' ', 174 => ' === 1 edge case ===', 175 => ' ) c1', 176 => ' NOU {0}', 177 => ' HLT', 178 => ' ', 179 => ' === 2 edge case ===', 180 => ' ) c2', 181 => ' NOU {0}', 182 => ' OUT [D]', 183 => ' NOU {1}', 184 => ' HLT', 185 => ' ', 186 => ' === overflow error ===', 187 => ' ) err', 188 => ' OUT [*] @ E (69)', 189 => ' OUT [1X] @ r (114)', 190 => ' OUT [1X] @ r (114)', 191 => '', 192 => '=== Primality Check ===', 193 => ' === input collection ===', 194 => ' NIN @ the number to check', 195 => ' CPY RX A', 196 => ' ', 197 => ' === handle n = 0 or 1 edge cases ===', 198 => ' JLS RX [2] N/A', 199 => ' ', 200 => ' === prepare memory ===', 201 => ' CPY RY [2] @ the current integer being divided', 202 => ' ', 203 => ' === main loop ===', 204 => ' ) loop', 205 => ' @ if RY^2 > RX, and the loop is still going (meaning', 206 => ' @ it passed), stop the program', 207 => ' MUL RY RY', 208 => ' JGR A RX p', 209 => ' ', 210 => ' @ if RX % RY != 0, stop the program', 211 => ' DIV RX RY', 212 => ' MUL A RY', 213 => ' SUB RX A', 214 => ' JEQ A [0] _', 215 => ' ', 216 => ' @ increment RY and loop', 217 => ' INC RY', 218 => ' JMP loop', 219 => ' ', 220 => ' === primality check indeterminant ===', 221 => ' ) N/A', 222 => ' OUT [?] @ N (78)', 223 => ' OUT [l] @ / (47)', 224 => ' OUT [$] @ A (65)', 225 => ' HLT', 226 => ' ', 227 => ' === primality check passed (prime) ===', 228 => ' ) p', 229 => ' OUT [_4] @ T (84)', 230 => ' HLT', 231 => ' ', 232 => ' === primality check failed (not prime) ===', 233 => ' ) _', 234 => ' OUT [+] @ F (70)', 235 => ' HLT', 236 => '', 237 => '[[Category:Low-level]] ', 238 => '[[Category:Cell-based]] ', 239 => '[[Category:Unimplemented]] ', 240 => '[[Category:Languages]]', 241 => '[[Category:2025]]', 242 => '[[Category:Turing complete]]' ]
Unix timestamp of change (timestamp)
'1760061717'