Qwertycode
From Esolang
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.
Contents |
[edit] 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.
[edit] How To
This section will explain how to do simple tasks, such as declaring subroutines.
[edit] 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)
[edit] 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]`
[edit] 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)
[edit] 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)
[edit] 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.
[edit] 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.
[edit] Examples
Below are a few examples of Qwertycode programs.
[edit] 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.
[edit] 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)
[edit] CAT Program
@(1)B,B.:(1)
[edit] 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].

