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.

Qwertycode

From Esolang
Jump to navigation Jump to search

Qwertycode is an esoteric programming language created by nullbyte00, that has a command and operation for every character on a standard QWERTY keyboard, hence its name. However, the only characters that do not have a command associated with them are whitespace and 0-9, which for obvious reasons can not be used. Qwertycode is similar to brainfuck in that it makes use of a tape, but has many more commands and supports subroutines, looping, conditionals, and gotos.

Commands

Qwertycode has over 50 commands and operators represented by a single character. They are:

Command Description
A Assigns a value to a byte
B Value of current byte
C Assigns a constant value to a byte
D Value of previous byte
E Exits the program
F Sets all bytes to 0
G Greater than
H Outputs the ASCII value of all bytes
I Outputs int value of all bytes
J Change the pointer to the specified value
K Stops the program, and returns an error message
L Less than
M Multiplies all bytes by 2
N Divides all bytes by 2
O Sorts the bytes from lowest to highest
P Pauses the program
Q Total number of bytes
R Random value between 0 and 255
S Stops the program
T Value of next byte
U Increase all bytes by 1
V Decrease all bytes by 1
W Pauses for a specified number of microseconds
X Performs either E, H, K, M, N, O, P, S, U, V, or Y at random
Y Sorts all bytes by random
Z Value of the pointer
~ Defines a subroutine
` Outputs int value of a byte
! Inequality comparison
@ Label
#...#(n) Everything in between the #'s gets repeated n times
$ Call to subroutine
% Square roots a byte
^ Squares a byte
& Greater than or equal to
| Less than or equal to
* Multiplies a byte
_ Prints a new line
- Decrements a byte
+ Increments a byte
= Equality comparison
: Goto
; Accepts input in form of an int, then stores in a byte
"..." Conditional, where everything in between the "'s is the condition
'...' Comment, where everything in between the 's is a comment
< Decrements the pointer
> Increments the pointer
, Accepts input in form of ASCII, then stores in a byte
. Outputs ASCII value of a byte
? Begins conditional
/ Divides a byte by 2
\ True if two values are within a range of 1
(...) Group (many commands need their arguments within a group)
[...] Index
{...} Conditional and subroutine block

Although all commands are listed in uppercase, Qwertycode is case-insensitive so lowercase is alright. Whitespace is also ignored, but preferred for readability.

How To

This section will explain how to do simple tasks, such as declaring subroutines.

Assign a value to a byte

When assigning a value to a byte, you simply list the byte you want to assign the value to, followed by an A or C (if you want it constant), then the int value in a group. Here are three examples:

This assigns 65 to the current byte:

BA(65)

This assigns 5 to the 8th byte:

B[7]A(5)

This assigns a random value to the current byte:

BA(R)

Output the value of a byte

To output the value of a byte, you simple list the byte who's value you want outputted, then either a . or a ` (dpending on whether you want the int value or the ASCII value outputted). Here are two examples:

This assigns 65 to the current byte, and outputs its ASCII value (which is A):

BA(65)
B.

This assigns 66 to the 2nd byte, and outputs its int value (which is 66):

B[1]A(66)
B[1]`

Use subroutines

To declare a subroutine, you use the ~ followed by a group of numbers which is the name of the subroutine.

This declares a subroutine called 2:

~(2)

To then put code inside the subroutine, the group is followed by an opening curly, your code, then a closing curly. Example:

~(2){
UB.
}

Finally, to make a call to a subroutine, you use the $, followed by a group containing the name of your subroutine. Example:

~(2){
UB.
}
$(2)

Create a loop

To create a loop, every command you want looped goes between two #s, then a group saying how many times it should loop.

This will output A 10 times:

BA(65)
#B.#(10)

Use gotos

To use a goto, you must first create a label by using the @ character, followed by a group of numbers, which is the name.

This will create a label named 1:

@(1)

To jump, or goto, that label, use the : character followed by a group containing the name of the label. Example:

@(1)'some code goes here':(1)

This would of course create an infinite loop however.

Use conditionals

To use conditionals, you use the ? character followed by a condition surrounded in "s. Example:

?"B=(10)"

To then execute code if the condition is true, you use a pair of curly brackets. Example:

?"B=(10)"{UB.}

There are a limited amount of functions you can perform in a condition. You can check for equality, inequality, etc. See the list of commands for everything you can use.

Examples

Below are a few examples of Qwertycode programs.

Hello World!

BA(72)B.
BA(101)B.
BA(108)#B.#(2)
BA(111)B.
BA(32)B.
BA(87)B.
BA(111)B.
BA(114)B.
BA(108)B.
BA(100)B.
BA(33)B.

99 Bottles of Beer

BA(99)>
~(1){
BA(32) B.
BA(98) B.
BA(111) B.
BA(116) B.
BA(116) B.
BA(108) B.
BA(101) B.
BA(115) B.
BA(32) B.
BA(111) B.
BA(102) B.
BA(32) B.
BA(98) B.
BA(101) B.
BA(101) B.
BA(114) B.
BA(32) B.
BA(111) B.
BA(110) B.
BA(32) B.
BA(116) B.
BA(104) B.
BA(101) B.
BA(32) B.
BA(119) B.
BA(97) B.
BA(108) B.
BA(108) B.
BA(44) B.
BA(32) B.
}
~(2){
BA(32) B.
BA(98) B.
BA(111) B.
BA(116) B.
BA(116) B.
BA(108) B.
BA(101) B.
BA(115) B.
BA(32) B.
BA(111) B.
BA(102) B.
BA(32) B.
BA(98) B.
BA(101) B.
BA(101) B.
BA(114) B.
BA(33) B.
BA(32) B.
BA(84) B.
BA(97) B.
BA(107) B.
BA(101) B.
BA(32) B.
BA(111) B.
BA(110) B.
BA(101) B.
BA(32) B.
BA(100) B.
BA(111) B.
BA(119) B.
BA(110) B.
BA(44) B.
BA(32) B.
BA(112) B.
BA(97) B.
BA(115) B.
BA(115) B.
BA(32) B.
BA(105) B.
BA(116) B.
BA(32) B.
BA(97) B.
BA(114) B.
BA(111) B.
BA(117) B.
BA(110) B.
BA(100) B.
BA(44) B.
BA(32) B.
}
~(3){
BA(32) B.
BA(98) B.
BA(111) B.
BA(116) B.
BA(116) B.
BA(108) B.
BA(101) B.
BA(115) B.
BA(32) B.
BA(111) B.
BA(102) B.
BA(32) B.
BA(98) B.
BA(101) B.
BA(101) B.
BA(114) B.
BA(32) B.
BA(111) B.
BA(110) B.
BA(32) B.
BA(116) B.
BA(104) B.
BA(101) B.
BA(32) B.
BA(119) B.
BA(97) B.
BA(108) B.
BA(108) B.
BA(33) B.
}
#< B`>$(1)< B`>$(2)< B- B`>$(3)_ #(99)

CAT Program

@(1)B,B.:(1)

Alphabet

B[1]A(32)
B[2]A(91)
B[3]A(93)
B[4]A(65)
B[5]A(83)
B[6]A(67)
B[7]A(73)
B[8]A(60)
B[9]A(62)
B[10]A(84)
B[11]A(66)
B[12]A(76)
B[13]A(69)
B[14]A(82)
B[15]A(68)
B[16]A(47)
B[17]A(32)
B[18]A(72)
B[19]A(67)
B[20]A(79)
B[21]A(34)
B[22]A(61)
B[23]A(49)
B[0]A(65)
B[8].
B[10].
B[4].
B[11].
B[12].
B[13].
B[17].
B[11].
B[20].
B[14].
B[15].
B[13].
B[14].
B[22].
B[21].
B[23].
B[21].
B[9].
B[8].
B[10].
B[14].
B[9].
B[8].
B[10].
B[15].
B[9].
B[8].
B[11].
B[9].
B[19].
B[18].
B[4].
B[14].
B[8].
B[11].
B[17].
B[16].
B[9].
B[8].
B[10].
B[15].
B[17].
B[16].
B[9].
B[8].
B[10].
B[15].
B[9].
B[8].
B[11].
B[9].
B[4].
B[5].
B[6].
#B[7].#(2)
B[8].
B[11].
B[17].
B[16].
B[9].
B[8].
B[10].
B[15].
B[17].
B[16].
B[9].
#
B[8].
B[10].
B[14].
B[9].
B[8].
B[10].
B[15].
B[9].
B[0].
B[8].
B[10].
B[15].
B[17].
B[16].
B[9].
B[8].
B[10].
B[15].
B[9].
B[0]`
B[8].
B[10].
B[15].
B[17].
B[16].
B[9].
B[8].
B[10].
B[14].
B[17].
B[16].
B[9].
B[0]+
#
(26)
B[8].
B[10].
B[4].
B[11].
B[12].
B[13].
B[17].
B[16].
B[9].

External resources