115 lines
3.4 KiB
Org Mode
115 lines
3.4 KiB
Org Mode
#+title: Half-Broken Car in Heavy Traffic
|
|
#&summary
|
|
An esoteric programming language with compiler/interpreter
|
|
#&
|
|
#+license: wtfpl
|
|
#+startup: showall
|
|
#&toc
|
|
|
|
* Half-Broken Car in Heavy Traffic
|
|
|
|
Half-Broken Car in Heavy Traffic is a difficult programming language with only
|
|
5 combined operators and direction "signs" for 2D grids.
|
|
|
|
hbcht is a Python 3.1+ combined compiler/interpreter for the language.
|
|
|
|
** Example program
|
|
|
|
#+BEGIN_SRC
|
|
; Increment the first memory cell once without changing the other cells.
|
|
|
|
> ^ <
|
|
> v <
|
|
#
|
|
^< >
|
|
^
|
|
^ ^<>
|
|
^
|
|
> ^<
|
|
^
|
|
> v < o v
|
|
v
|
|
v
|
|
< > v
|
|
v v
|
|
v v
|
|
v v
|
|
v v
|
|
> ^ <
|
|
#+END_SRC
|
|
|
|
When compiled, this can be called as
|
|
: ./test 51
|
|
which will return
|
|
: 0: 52
|
|
because 51 + 1 = 52.
|
|
|
|
** Language documentation
|
|
|
|
This is the official documentation of HBCHT.
|
|
|
|
HBCHT is a 2D grid-based programming language. You are a car fighting to get to
|
|
the exit of a very chaotic highway. You have to follow the signs, but whenever
|
|
you do that, you also change your memory. The value of your current memory cell
|
|
can be incremented or decremented and your memory cell index can change. You
|
|
can also find signs that tell you to turn either right or not turn at all,
|
|
depending on your memory.
|
|
|
|
The car can drive in four directions: up, right, down, and left. Because of the
|
|
chaos, you never know which direction the car is headed when the program
|
|
starts. This makes it easy to randomize the output.
|
|
|
|
To make things worse (actually, it's to make programming in HBCHT possible),
|
|
you cannot turn left because your car is half-broken. You can drive straight
|
|
ahead, you can turn right, and you can reverse.
|
|
|
|
*** Markers
|
|
|
|
: o car
|
|
: # exit, return/print
|
|
|
|
*** Operations
|
|
|
|
: > go right, next memory cell
|
|
: < go left, previous memory cell
|
|
: ^ go up, increment
|
|
: v go down, decrement
|
|
: / go right if the current memory cell has the same value as the previous
|
|
: memory cell, else continue (if the previous memory cell does not exist,
|
|
: its value is zero)
|
|
|
|
*** Rules
|
|
|
|
+ There can be only one car and only one exit
|
|
+ The car cannot turn left; any relative left turns will be ignored along with
|
|
their memory effects
|
|
+ The program always starts at memory cell #0
|
|
+ All memory cells have the value 0 by default
|
|
+ Input values cannot be negative, but values returned by a program can
|
|
+ The car cannot go out of bound; if it exits to the right, it reenters to the
|
|
left, etc.
|
|
+ Values cannot be input to memory cells below memory cell #0, but the program
|
|
can set values in these
|
|
+ Values can be arbitrarily large. An interpreter or compiler without this
|
|
feature is valid, but not perfect (note that hbcht's C translator uses
|
|
32-bit ints and is thereby not perfect).
|
|
|
|
A semicolon denotes a comment. Anything from the semicolon to the end of the
|
|
line is ignored.
|
|
|
|
If a program file contains a line that starts with =@intext=, it will see
|
|
input as text and convert the text to ordinals before running the core
|
|
function.
|
|
|
|
If a program file contains a line that starts with =@outtext=, it will show
|
|
output as a text string instead of a list of numbers.
|
|
|
|
|
|
** Download
|
|
|
|
hbcht is released under the WTFPL. [[hbcht-0.1.0.tar.gz][Download]].
|
|
|
|
hbcht can also be found in the [[http://pypi.python.org/pypi/hbcht][Python Package Index]]. hbcht has its code at
|
|
Gitorious; see [[http://gitorious.org/hbcht]].
|
|
|