halfwit
v1.0.1
Published
Halfwit is an experimental golfing language that fits most commands in half a byte.
Downloads
1
Readme
Halfwit
Halfwit is an experimental golfing language that fits most commands in half a byte. It's stack-based.
Usage
npm install halfwit
node main.js <filename> [single string of flags] [inputs]
Or in node.js:
const halfwit = require('halfwit')
Or in a website:
<script src='/path/to/halfwit.js'></script>
Flags
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
Builtins
Some builtins take up .5 bytes, some 1, and some 1.5.
.5 bytes
[
- 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.
1 byte
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
1.5 bytes
kk[
/0
- 100kkM
/1
- 256kk{
/2
- 26kk;
/3
- 50kk+
/4
- [0, 1]kk*
/5
- 128kkJ
/6
- 64kk>
/7
- 32kk<
/8
- 16kkN
/9
- 1000kkf
/s
- sort / prime factorskkb
/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 newlinekkk
/.
- Print as chars without trailing newline
Not scored
These are debugging instructions that aren't included in the codepage.
x
- Print stack