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

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

External resources