Qwertycode
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].