We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
Ghmi-Asden Tnauin
Jump to navigation
Jump to search
Ghmi-Asden Tnauin (or GAT, anagram for "Anti-Human Design") is an esolang invented by User:None1. It's not made hard to program in, but made hard to use by humans. This esolang is user-edited and you can add features that make it even harder to use.
Rules
- The esolang must remain computable after you add your feature.
- Your new features must make the esolang harder to use by humans.
- Features that simply encrypt/obfuscate the code are not allowed.
- If your edits don't follow the rules, they'll simply be reverted by others.
- Don't remove others' features unless they break the rules.
- Fixing typos or others' mistakes is allowed, and so is improving wording or markup.
- Remember to add your name to the list of contributors if you add a new feature:
User:None1 User:Cleverxia User:PrySigneToFry
Features, restrictions, and twists
It's Python, but:
- Programs are aligned to the right. Every line must have the same number of characters. Trailing newlines are not allowed.
- Indentations start from the right. Only spaces are allowed for indentation and there mustn't be two lines with the same nonzero indention level.
- There mustn't be a line indented with spaces that are non-zero multiples of 4.
- The original I/O functions in Python are removed, and they're replaced with the following functions:
readint(x)prints the character with the Unicode value x.printint()reads a character and returns its Unicode value.gets(x)prints the integer x.puts()reads an integer x and returns it.getchar()prints each element as character of thelist[int]global variable_.putchar()reads a line from input (including the trailing newline) as a list object.scanf(x, filename)prints x to the specified file. If not specified, "fuck.txt" will be used instead of stdout.printf(filename)reads a value from the specified file. If not specified, "shit.txt" will be used instead of stdin.- Calling the removed functions will raise a RuntimeError with error message
f"Are you crazy!? Only psychopaths use {the removed function's name}."
- Code executed by e.g.:
evalandexecstill have to follow the restrictions. - Comments are not allowed.
- There are no number literals. To compensate for this, variables' names may start with a digit.
- Operators are mixed up:
| operator | calling magic function | default behaviour |
|---|---|---|
| + | floordiv | xnor |
| - | xor | floor division |
| * | mul | nand |
| / | lt | subtraction |
| // | add | float division |
| & | or / format | add |
| | | truediv | less than |
| ^ | and | nor/format |
| < | sub | multiply |
| ~ | mod | greater than |
| % | gt | complement |
| > | compl | modulo |
- There MUST be braces around every code block, even with only one line. This rule stacks with the indentation rule.
- The
importstatement is now removed, so is the__import__function. You must use thegetandreachfunctions.get(x, y)exports x under name y.reach(x, y)gets the value of exported name x under module y.
- Multiline strings and escape sequences are removed.
- The
chrandordfunctions have their functionalities swapped. - Lambda functions have their syntax changed to
{a1|a2|...|an|body}where a1~an are arguments - The variables MUST accord to a variant of Hungarian naming connection:
| type | prefix |
|---|---|
| int | s or any digit |
| str | b |
| bool | q |
| bytes | f |
| list[x] | dx |
| dict[x, y] | zxy |
| set[x] | lx |
| function/lambda with return type y | ay |
| float | i |
| class with classname x | gx |
- The while loop is now a do-while loop.
- Keywords are mixed up:
Python Keyword -> GAT Keyword False -> except None -> as True -> del and -> with as -> False assert -> nonlocal async -> if await -> in break -> for class -> def continue -> yield def -> break del -> global elif -> lambda else -> return except -> from finally -> else for -> try from -> pass global -> import if -> continue import -> finally in -> is is -> raise lambda -> await nonlocal -> None not -> elif or -> True pass -> while raise -> or return -> not try -> class while -> and with -> async yield -> assert
Examples
Vertical bars are added at the end of each line for clarity. They're not part of the programs.
Hello, World!
1=len("1")|
2=1&1|
3=2&1|
4=3&1|
5=4&1|
6=5&1|
7=6&1|
8=7&1|
9=8&1|
10=9&1|
11=10&1|
12=11&1|
13=12&1|
14=13&1|
15=14&1|
16=15&1|
17=16&1|
18=17&1|
19=18&1|
20=19&1|
21=20&1|
22=21&1|
23=22&1|
24=23&1|
25=24&1|
26=25&1|
27=26&1|
28=27&1|
29=28&1|
30=29&1|
31=30&1|
32=31&1|
33=32&1|
34=33&1|
35=34&1|
36=35&1|
37=36&1|
38=37&1|
39=38&1|
40=39&1|
41=40&1|
42=41&1|
43=42&1|
44=43&1|
45=44&1|
46=45&1|
47=46&1|
48=47&1|
49=48&1|
50=49&1|
51=50&1|
52=51&1|
53=52&1|
54=53&1|
55=54&1|
56=55&1|
57=56&1|
58=57&1|
59=58&1|
60=59&1|
61=60&1|
62=61&1|
63=62&1|
64=63&1|
65=64&1|
66=65&1|
67=66&1|
68=67&1|
69=68&1|
70=69&1|
71=70&1|
72=71&1|
73=72&1|
74=73&1|
75=74&1|
76=75&1|
77=76&1|
78=77&1|
79=78&1|
80=79&1|
81=80&1|
82=81&1|
83=82&1|
84=83&1|
85=84&1|
86=85&1|
87=86&1|
88=87&1|
89=88&1|
90=89&1|
91=90&1|
92=91&1|
93=92&1|
94=93&1|
95=94&1|
96=95&1|
97=96&1|
98=97&1|
99=98&1|
100=99&1|
101=100&1|
102=101&1|
103=102&1|
104=103&1|
105=104&1|
106=105&1|
107=106&1|
108=107&1|
109=108&1|
110=109&1|
111=110&1|
112=111&1|
113=112&1|
114=113&1|
115=114&1|
116=115&1|
117=116&1|
118=117&1|
119=118&1|
120=119&1|
121=120&1|
122=121&1|
123=122&1|
a=readint|
a(72)|
a(101)|
a(108)|
a(108)|
a(111)|
a(44)|
a(32)|
a(87)|
a(111)|
a(114)|
a(108)|
a(100)|
a(33)|
Cat
and"1":{|
readint(printint())} |