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

From Esolang
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

  1. The esolang must remain computable after you add your feature.
  2. Your new features must make the esolang harder to use by humans.
  3. Features that simply encrypt/obfuscate the code are not allowed.
  4. If your edits don't follow the rules, they'll simply be reverted by others.
  5. Don't remove others' features unless they break the rules.
  6. Fixing typos or others' mistakes is allowed, and so is improving wording or markup.
  7. 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 the list[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.: eval and exec still 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:
Caption text
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 import statement is now removed, so is the __import__ function. You must use the get and reach functions.
    • 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 chr and ord functions 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:
Caption text
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())} |