wpkpp
Woodpecker++: alternative VM for woodpecker esolang scripts. Now with compression, static testcases, minified instruction set, JSON output and more.
Original repo | Original challenge website
Install
git clone https://github.com/4yn/wpkpp.git
cd wpkpp
cargo install --path .
Usage
wpkpp grade [task] [file.(wpk|wpkm)]
Grades a woodpecker task. Currently implemented up to stage 5. See the original repo for full task description.
Challenge testcases are seeded according to the WPKPP_SEED
environment variable.
Optional flags:
--noprogress
: hide progress bar--nocolor
: disable terminal colors--json
: JSON output
$ cat 0.wpkm
>?<?>>!
$ wpkpp grade 0 0.wpkm
XOOXXOOOXOOXOOXOXXOXXXOOXOOXXXOXXOXXOOOXOOXOOOOOXOXXXOXXOXOOXOXXXXOOXOXOOOXXOOXOOXOOXXOOOXXXOXXOOXOX
Verdict: WA ❌
Score: 52/100
Instructions: 6
Memory Usage: 3
Instruction Counts: INC 2 / CDEC 1 / LOAD 2 / INV 1
Time: Parse 0.000s / VM Setup 0.112s / Grading 4.230s
$ wpkpp grade 0 0.wpkm --json
{"verdict":"WA","score":48,"total":100,"runtime":7,"memory":4,"instructions":{"inc":3,"cdec":1,"load":2,"inv":1},"time_taken":{"parse":0.000043039,"vm":0.118700937,"grade":4.168959827}}
Some extra tasks are also available in addition to the original woodpecker challenge:
- Task
2a
- 16 bit subtraction modulo 2^16, requiring underflow - Task
4a
- 16 bit subtraction modulo 2**16 - 17 - Task
5a
- 16 bit multiplicative inverse modulo 2**16 - 17
wpkpp compress [infile.(wpk|wpkm)] [outfile.(wpk|wpkm)]
Compresses a woodpecker script to use repeat INC/CDEC instructions.
$ cat 0.wpkm
>>>>>>>>>?
$ wpkpp compress 0.wpkm 0c.wpkm
Reading file 0.wpkm
Writing to file 0.wpkm
Done
$ cat 0c.wpkm
9>?
.wpkm
syntax
wpkpp
will parse woodpecker scripts differently based on the file extension. .wpk
files follow original syntax while .wpkm
"minified" scripts uses one character per instruction:
INC
is>
,INC n
isn>
CDEC
is<
,CDEC n
isn<
LOAD
is?
orv
INV
is!
or^
For example, the following 0.wpk
INC
LOAD
CDEC
LOAD
INC
INC
INV
is equivalent to this 0.wpkm
>?<?>>!