86 lines
2.9 KiB
Org Mode
86 lines
2.9 KiB
Org Mode
|
#+title: Half-Broken Car in Heavy Traffic
|
||
|
#&summary
|
||
|
An esoteric programming language with compiler/interpreter
|
||
|
#&
|
||
|
#+license: bysa, text
|
||
|
#+license: agpl 3+, program
|
||
|
#&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.
|
||
|
|
||
|
** 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 AGPLv3+.
|
||
|
|
||
|
[[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]].
|
||
|
|