Halfwit is an experimental golfing language that fits most commands in half a byte. It's stack-based.
npm install halfwit
node main.js <filename> [single string of flags] [inputs]
Or clone this repo.
Or in node.js:
const halfwit = require('halfwit')
Or in a website:
<script src='/path/to/halfwit.js'></script>
Or, you can try it online at DSO.
Halfwit has several flags:
e
- execute the filename as codeA
- print as charsc
- print compiled codeC
- count source length in Halfwit codepages
- compress list / intt
- print tokensp
- print parsed tokensh
- print flag help menu
Some builtins take up .5 bytes, some 1, and some 1.5.
[
- condition ([...;
)M
- map (M...;
){
- while (condition) do stuff ({...;...;
), condition = first part;
; - terminate structure+
- Addition, vectorising*
- Multiplication, vectorisingJ
- join - append / prepend / pair>
- Starts a compressed int ->...<
/ adds to a compressed int list>...>...<
<
- end int / intlist (see above) / length / range 0...n-1N
- negate / reversef
- flatten / squareb
- base conversion:- Int, int -> to_base
- Int, list -> to-custom-base
- List, int -> from-base
- list, list -> from-custom-base
:
- Duplicate$
- Swap?
- Take inputk
- Digraph modifier
Note that all of these can be represented as a single character as well as the encoding.
k*
/e
- exponentiation, vectorisingk+
//
- floor divisionk[
/|
-[...|...;
else in an if block, otherwise|...;
-> if notkM
/(
-> for (same stack) -(...;
k;
/%
- modulo (vectorising)k{
/E
- Eqiuvalent of(n
kN
/n
-- in
(
/M
/F
: Push context (loop var) - in global scope: Push 1
- in
kJ
/S
- Sum / is primek?
/i
- index value (s) into list / bitwise xork<
/l
- Comparison (less than)kf
/F
- Filter -F...;
kb
/R
- ReduceR...;
k:
/_
- Pop stackk>
/}
- rotate stack rightk$
/r
- range (inclusive)kk
: useful constants
-
kk[
/0
- 100 -
kkM
/1
- 256 -
kk{
/2
- 26 -
kk;
/3
- 50 -
kk+
/4
- [0, 1] -
kk*
/5
- 128 -
kkJ
/6
- 64 -
kk>
/7
- 32 -
kk<
/8
- 16 -
kkN
/9
- 1000 -
kkf
/s
- sort / prime factors -
kkb
/Z
:- list, list -> zip
- int, list -> repeat (vectorised)
- list, int -> repeat
- int, int -> repeat
-
kk:
/D
- is a divisible by B? (vectorising) -
kk$
/W
- stack = [stack] -
kk?
/,
- prettyprint with trailing newline -
kkk
/.
- Print as chars without trailing newline
These are debugging instructions that aren't included in the codepage.
x
- Print stack