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(nkN/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