QSet interpreter
#
c++
qset
esolang
ctf
QSet is an esoteric programming language from the ABCTF-2016 challenge. The program is a sequence of pairs of symbol lists. The syntax is:
symbol = ALPHA
multiset = symbol / symbol " " multiset
instruction = multiset "|" multiset
program = instruction / instruction "\n" program
The semantic is like:
multiset<symbol> state = input
while True:
for (L, R) : (multiset<symbol>, multiset<symbol>) in program:
if R ⊆ S:
state = state - R + L
break
if state is not modified:
break
multiset<symbol> output = state
Both input and output are finite sequences of positive integers.
Symbols i0
, i1
, i2
and so on are pre-defined with input sequence
Symbols o0
, o1
and so on are used for output.
About the project itself
Just an interpreter for such an interesting language. Made just for fun. By the way, I’ve solved that CTF challenge by writing a specific optimizing compiler which compiles programs into the QSet code.
References
- Reference implementation
- Challenge Writeup (not mine)