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.
Kitanai
Jump to navigation
Jump to search
Kitanai is an interpreted esoteric language.
The original interpreter is made with C++.
(By the way, Kitanai means "dirty" in Japanese (Obviously refering to the language's syntax))
Full language Syntax :
- ( : Begin Instruction Bloc
Usage : (Any code goes here)
- ) : Stop Instruction Bloc
- [ : Begin Memory Access
Usage : [Any code goes here]
- ] : Stop Memory Access
- ? : Condition
Usage : ?(condition code)(code executed if condition code returns anything except 0)(code executed if condition code returns 0).
- $ : AccessMemoryPosition
Usage : $"position" OR $366
Description : "position" is the name of the "variable" you want to access and "366" is the sub-case of your variable).
- : : CurrentStackPosition
Usage : :
Description : Return the current position of the stack as a string.
- ; : CurrentSubStackPosition
Usage : ;
Description : Return the current sub-position of the stack as a number.
- < : StackLeft
Usage : <
Description : Decrease the sub-position of the stack.
- > : StackRight
Usage : >
Description : Increase the sub-position of the stack.
- ^ : StackSize
Usage : ^
Description : Returns the current stack size.
- @ : CurrentMemoryValue
Usage : @
Description : Returns the current value pointed in the Memory.
- # : Flag
Usage : #
Description : Creates a new flag.
- + : FlagCount
Usage : +
Description : Returns the flag count as a number.
- & : Goto
Usage : &(x)
Description : Jump to the (x) flag (Where x is the number of the flag).
- * : GotoNoOrigin
Usage : *(x)
Description : Jump to the (x) flag (Where x is the number of the flag) without adding the origin to the pile.
- ~ : Origin
Usage : &~
Description : Jump to the DynamicFlag created just after the previous Goto.
- ! : ToggleExecution
Usage : !
Description : Pause code execution until encountering a new ToggleExecution.
- % : End
Usage : %
Description : Ends the program.
Standard Library
Here are the available functions :
- add (string) (string) :
Description : Returns the concatenation of the two strings given as parameters.
- add (number) (number) :
Description : Returns the sum of the two numbers given as parameters.
- sub (number) (number) :
Description : Returns the subtraction of the two numbers given as parameters.
- mul (number) (number) :
Description : Returns the multiplication of the two numbers given as parameters.
- div (number) (number) :
Description : Returns the division of the two numbers given as parameters.
- eq (string) (string) :
Description : Returns the Number(1) is the two strings are equal else it returns Number(0).
- eq (number) (number) :
Description : Returns the Number(1) is the two numbers are equal else it returns Number(0).
- neq (string) (string) :
Description : Returns the Number(0) is the two strings are equal else it returns Number(1).
- neq (number) (number) :
Description : Returns the Number(0) is the two numbers are equal else it returns Number(1).
- gt (string) (string) :
Description : Returns the Number(1) is the first string has a greater length than the second string else it returns Number(0).
- gt (number) (number) :
Description : Returns the Number(1) is the first number is greater than the second one else it returns Number(0).
- ge (string) (string) :
Description : Returns the Number(1) is the first string has a greater or equivalent length than the second string else it returns Number(0).
- ge (number) (number) :
Description : Returns the Number(1) is the first number is greater or equal than the second one else it returns Number(0).
- lt (string) (string) :
Description : Returns the Number(1) is the second string has a greater length than the first string else it returns Number(0).
- lt (number) (number) :
Returns the Number(1) is the second number is greater than the first one else it returns Number(0).
- le (string) (string) :
Description : Returns the Number(1) is the second string has a greater or equivalent length than the first string else it returns Number(0).
- le (number) (number) :
Returns the Number(1) is the second number is greater or equal than the first one else it returns Number(0).
- print (string) :
Description : Prints the (string).
- println (string) :
Description : Prints the (string) and appends a newline.
- printerr (string) :
Description : Prints the (string) in stderr.
- input (string) :
Description : Returns the string entered by the user and displays the (string) as a prompt.
- string (string) :
Description : Does nothing.
- string (number) :
Description : Converts an int to a string.
- int (string) :
Description : Converts a string to an int.
- int (number) :
Description : Does nothing.
- random () :
Description : Returns a random Number from 0 to 1.
- time ()
Description : Returns the current epoch time
- split (string target, string value, string delimiter)
Description : Splits the string "value" with the delimiter "delimiter" and place the result in the stack "target".
- func (string function_name, int arg_count, instruction code)
Description : Creates a new function named "function_name" with "arg_count" arguments that will execute "code" instruction
You can retrieve arguments in the "args" stack.
- substr (string) (number) (number) :
Description : Returns the substring of (string) between the first and the second number.
- bsfe (string) :
Description : Returns the (string) encoded with base64. (Base Sixty Four = bsf)
- bsfd (string) :
Description : Returns the (string) decoded with base64 (Base Sixty Four = bsf)
Examples
- Hello World
(All of the following versions works)
print "Hello, world!"
print("Hello, world!")
print"Hello, world!"
["Hello, world!"] print @
["Hello, world!"] print(@)
["Hello, world!"]print@
- Cat
print(input(""))
- Fibonacci
$0[int(input "Fib : ")]
$1[1]$2[1]
#
$3[$1@]
$1[$2@]
$2[add @ ($3@)]
$0[sub @ 1]
?(neq ($0@) 1) (&1)
print($1@)
- 99 bottles of beer
$"quant"[99]
#
?(gt @ 1) (
print((add(add(add (string @) " bottles of beer on the wall, ")(string @)) " bottles of beer."))
?(gt @ 2) (
$"suffix"[add (string(sub ($"quant"@) 1)) " bottles of beer on the wall."]
) (
$"suffix"["1 bottle of beer on the wall."]
)
) (
?(eq ($"quant"@) 1) (
print "1 bottle of beer on the wall, 1 bottle of beer."
$"suffix"["no more beer on the wall!"]
)
)
print (add "Take one down, pass it around, " ($"suffix"@))
print ""
$"quant"[sub @ 1]
?(neq @ 0) (&1)
%
- Compact Deadfish Interpreter :
$0[0]#$1[input">> "]?(add(eq($0@)256) (eq($0@)-1))([0])?(eq($1@)"i")($0[add@1])? (eq($1@)"d")($0[sub@1])?(eq($1@)"o") (print($0@))?(eq($1@)"s")($0[mul@@])&1
- Clean Deadfish Interpreter :
$"accumulator"[0]
#
$"userInput"[input">> "]
?(eq ($"accumulator" @) 256)
($"accumulator"[0])
?(eq ($"accumulator" @) -1)
($"accumulator"[0])
?(eq ($"userInput" @) "i")
($"accumulator"[add @ 1])
?(eq ($"userInput" @) "d")
($"accumulator"[sub @ 1])
?(eq ($"userInput" @) "o")
(print($"accumulator" @))
?(eq ($"userInput" @) "s")
($"accumulator"[mul @ @])
&1
- Compact More or Less Game
println(bsfd"QmllbnZlbnVlIHN1ciBsZSBqZXUgZHUgcGx1cyBvdSBtb2lucw==") $"s"[int(mul random 100)]$"t"[6]$"f"[0]#$"i"[int(input(add(add (bsfd"RW50cmV6IHVuIG5vbWJyZSAo")($"t"@))(bsfd"IGVzc2FpcykgOiA=")$"i"))] &2?(eq($"t"@)0)(&3)?(eq($"f"@)1)(&4)&1#?(eq($"s"@)($"i"@))($"f"[1]&~ )($"t"[sub@1]?(gt($"s"@)($"i"@))(println(bsfd"Qydlc3QgcGx1cyAh"))( println(bsfd"Qydlc3QgbW9pbnMgIQ=="))&~)#println(bsfd"TG9vc2Vy")%# println(add(add(bsfd"V2lubmVyIGVuIA==")(sub 6($"t"@)))(bsfd"IGVzc2Fpcw=="))%
- Clean More or less Game
print "Bienvenue sur le jeu du plus ou moins"
$"secretNumber" [int(mul random 100)]
$"try" [6]
$"numberFound" [0]
#
$"userInput" [int(input(add(add "Entrez un nombre (" ($"try"@)) " essais) : "$"userInput"))]
&2
?(eq ($"try"@) 0) (
&3
)
?(eq ($"numberFound"@) 1) (
&4
)
&1
#
?(eq ($"secretNumber"@) ($"userInput"@)) (
$"numberFound" [1]
&~
) (
$"try" [sub @ 1]
?(gt ($"secretNumber"@) ($"userInput"@)) (
print "C'est plus !"
) (
print "C'est moins !"
)
&~
)
#
print "Looser"
%
#
print(add(add "Winner en " (sub 6 ($"try"@))) " essais")
%
- Function definition
func "sum" 2 ( $"args" add($0@)($1@) )