CTFuck
CTFuck is a turing complete esolang created by User:Pro465, based on a tag system, with I/O support. this is kinda simliar to Boolfuck, in that it operates on bits and has I/O support. however, CTFuck is based on a tag system.
The reference implementation along with examples are here.
Commands
supported commands are:
command | operation |
---|---|
$ |
pop 1 bit off the front of queue |
0 |
push 0 to the back of queue
|
1 |
push 1 to the back of queue
|
: |
duplicate bit at the front of queue, and push it to the back of queue |
. |
output the bit at the front of the queue |
, |
get the next bit of input and push it to the back of the queue |
[..|..] |
see note |
any character other than these are ignored.
Turing Completeness
CTFuck is turing complete. To prove this, we can take a similar path to how BCT was proved turing complete: we can translate each CT (we are using the same language the BCT page used) command to an equivalent sequence of commands in CTF.
CT command | CTF Equivalent |
---|---|
<program end> | [1|1]
|
0 |
0
|
1 |
1
|
; |
\n$[|<current line number + 1>]
|
...or we can just compile boolfuck to it
Sample Programs
Cat
0 $,.[1|1]
Truth Machine
,[|3] $1010.$...$..$..[|2] $010....$..$..
Hello world
0...$1.$0..$1.$0. $1.$0.$1.$0..$1..$0. ..$1..$0.$1..$0. ..$1..$0.$1..$0. $1....$0.$1..$0. ..$1..$0.$1.$0.. .....$1.$0.. $1...$0.$1...$0. $1....$0.$1..$0. .$1.$0..$1...$0. ..$1..$0.$1..$0. ..$1.$0..$1..$0. $1.$0....$1.$0.. .$1.$0.$1.$0....
Notes
IO endianness
Like BoolFuck, IO in CTF is little-endian.
The [if_num|else_num]
command
it takes two numbers in base-10 format, separated by `|` (pipe symbol).
when it is executed, it checks the bit at the top of the queue;
if it is 1 it calls goto(if_num)
, otherwise it calls goto(else_num)
.
goto(n)
is defined as follows:
if n == 0 || n == "": pass else: jump to the first command in line n
Halting
execution is halted when either:
- the interpreter reaches the end of the program source.
- the interpreter tries to execute one of the following commands and the queue is empty:
[..|..]
$
.
See also
Other languages operating on bits (implemented only):