Bawkbawk²

Bawkbawk² is a variant of Bawkbawk that is much easier to read and looks more "in the language of the chickens", but on text. It is made by User:Lilchiky.
==Syntax and Overview==
Bawkbawk² has (not so) similar syntax as Bawkbawk, but it has many more features. 
One of the major differences is that Bawkbawk² no longer has a limit on the amount loops available. 
=== Chickens ===
Bawkbawk² has a data type called a 'chicken'. A chicken has a single character as an identifier and
can store Bawkbawk² code, there can be unlimited chickens; You can now append to the chicken in bulk with code grouping!
A chicken's scripts can be ran using the command, followed by the identifier,
and it will concurrently run along the main chicken.
=== Commands ===
Bawkbawk² now has unbounded memory and the mathematical operations now work on
base-15 numbers instead of binary numbers. The value of the cell is still in decimal.
The (modified, new and removed) commands are:
Command	Bawkbawk equivalent 	Function
° 	 	Multiply
/ 	 	Divide and truncate
^ 	 	Jump to the specified command
> 	 	Outputs the current cell's value
~ 	 	See
∆ 	 	User input
Π 	None 	Get raw user input (only accepts base-15)
∅ 	 	Skip the next command if cell = 0
¼ 	None 	Skip the next command if cell >= 1
v 	 	Decrement the cell
! 	 	Increment the cell
« 	 	Jump to the beginning
Removed	 	Binary 1
Removed	 	Binary 0
' 	/ 	Start/end of comment
% 	None 	Modulo
§ 	None 	Print the value of the cell without conversion to characters
¶ 	 	Print a newline
• 	forage sad theeggcamefirst	Set the cell to 0
¿ 	None 	Increase the accumulator by a random number between 1 and 0
↑ 	None 	Terminate the program
< 	None 	Creates a chicken
√ 	None 	Executes a chicken
( 	None 	Code grouping, see here
) 	None 	Code grouping
¡ 	None 	Increase the pointer
← 	None 	Decrease the pointer
♪ 	None 	Switch between axis (x and y)
Newlines are ignored.
=== Memory ===
Bawkbawk² has unbounded memory of a 2-dimensional plane along positive-x and positive-y, and the pointer begins at (meaning x and y cannot be below 0). The pointer travels along the x-axis by default and can be changed via .
===Code grouping===
Code can be grouped with and , which can used to append code to a chicken in bulk, like this:
[identifier] ( [code] )
=== and ===
A chicken can be created with and executed with .
The syntax for is as follows:
[code (a single command)] < [identifier]
 is a single command that will be appended to the chicken with the mentioned .
A chicken is ran as follows:
√ [identifier]
===~ (forage)===
The ~ command may be hard to understand at first. Its usage is as follows:
~ [pentadecimal number] [suffix]
[pentadecimal number] can be any base-15 number, like a5 or 3d9. 
[suffix] can be any of the following commands:
* °
* /
* ^
* %
Example for all 4 of them:
====° (theeggcamefirst)====
!~483°
§
Does 1 * 1023.
====/ (rationtheworms)====
!~400°
~30/
§
Does 900 / 45
====% (modulo)====
!~400°
~2d%
§
Does 900 % 43
====^ (flyoverthehouse)====
!§¶°1^
Counts.
== Examples ==
=== Hello, World! ===
!~4c°>•!~6b°>•!~73°>>•!~76°>•
!~2e°>•!~22°>•
!~7e°>•!~76°>•!~79°>•!~73°>•!~6a°>•
!~23°>
=== 99 bottles of beer ===
!~69°
b(
 §¡•!~22°>•!~68°>•!~76°>•!~7b°>•!~7b°>•!~73°>•!~6b°>
 •!~7a°>•!~22°>•!~76°>•!~6c°>•!~22°>•!~68°>•!~6b°>
 •!~6b°>•!~79°>•!~22°>•!~76°>•!~75°>•!~22°>•!~7b°>
 •!~6e°>•!~6b°>•!~22°>•!~7e°>•!~67°>•!~73°>•!~73°>
 •!~2e°>•!~a°>¶←
 §¡•!~22°>•!~68°>•!~76°>•!~7b°>•!~7b°>•!~73°>•!~6b°>
 •!~7a°>•!~22°>•!~76°>•!~6c°>•!~22°>•!~68°>•!~6b°>
 •!~6b°>•!~79°>•!~31°>←
 •!~a°>•!~59°>•!~67°>•!~72°>•!~6b°>•!~22°>•!~76°>•!~75°>•!~6b°>•!~22°>•!~6a°>
 •!~76°>•!~7e°>•!~75°>•!~22°>•!~67°>•!~75°>•!~6a°>•!~22°>•!~77°>•!~67°>•!~7a°>
 •!~7a°>•!~22°>•!~70°>•!~7b°>•!~22°>•!~67°>•!~79°>•!~76°>•!~7c°>•!~75°>•!~6a°>
 •!~2e°>•!~a°>←v
 §¡•!~22°>•!~68°>•!~76°>•!~7b°>•!~7b°>•!~73°>•!~6b°>
 •!~7a°>•!~22°>•!~76°>•!~6c°>•!~22°>•!~68°>•!~6b°>
 •!~6b°>•!~79°>•!~31°>¶¶←∅«
)
√b
Displays '0 bottles on the wall' at the end.
(This program was generated with this script.)
=== Convert base-15 into decimal ===
Π§
 automatically converts its input into decimal if possible.
=== Cat program ===
∆>¶«
=== Truth machine ===
Π§¼↑§~5^
Or, preferably, an unoptimized version that makes use of chickens:
§<c«<cΠ§¼↑√c
Or you could do this:
c(§«)Π§¼↑√c
==Text to Bawkbawk²==
Converting text to Bawkbawk² is really easy.
To convert text to Bawkbawk², you get the ASCII code for each character, then convert it into pentadecimal and add on
 then add it together, like so:
h — 104
e — 101
l — 108
l — 108
o — 111
104 -> •!~6e°>
101 -> •!~6b°>
108 -> •!~73°>
108 -> •!~73°>
111 -> •!~76°>
hello = •!~6e°>•!~6b°>•!~73°>•!~73°>•!~76°>
 
===Converter in Python===
def text_to_bawkbawk(string):
 result = ''
 
 for char in string:
 ascii_ = ord(char)
 pentadecimal = ""
 
 while ascii_ > 0:
 dig = int(ascii_%15)
 if dig < 10:
 pentadecimal += str(dig)
 else:
 pentadecimal += chr(ord('a')+dig-10)
 ascii_ //= 15
 
 pentadecimal = pentadecimal[::-1]
 
 result += f'•!~{pentadecimal}°>'
 return result
==Computational class==
Bawkbawk² is (probably) Turing-complete.
This can be proved by translating a Minsky machine to Bawkbawk².
In a Minsky machine, there are two instructions available:
* Increment the register and move to the next
* Decrement the register and move to the next; unless it is 0, then skip to another instruction.
Checking for a in a register could be done like this:
∅√a
assuming the chicken named contains the code that is needed to run if the register is 0.
From here it is (at least it should be) straightforward to convert any Minsky machine into Bawkbawk².
Since the set of Minsky machines is Turing-complete, Bawkbawk² should also be Turing Complete.
==Implementations==
This is the original implementation.
Category:Implemented Category:2023 Category:Concurrent programming Category:Turing complete
==See also==
* Bawkbawk