# Binary Forthleq Calculus

Jump to navigation Jump to search

Binary Forthleq Calculus is an esoteric programming language created by Kamila Szewczyk for the Esolang Reverse Engineering Contest.

## Interpreter (C)

```#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#define nt op[op[0]++]
#define ot *sp--
#define C;break;case
typedef struct c_{struct c_*Q,*W;int E,R;}Z;long ip,_A;_B[10000];
Z _R={.E=999};Z*Y,*S,*W=&_R;FILE*in;void G(Z*p){for(;p&&p!=&_R;p=
p->W){if(--p->E)break;G(p->Q);p->Q=Y;Y=p;}}char I(){int c;while((
c=fgetc(in))!=EOF&&(c<'0'||c>'9'));return c==EOF?-1:c&1;}_P(){int
t,s=_A,b,m=0;for(;;){if((b=I())==-1){if(!m)break;}else if(b){for(
t=0;I(); )++t;_B[_A++]=1;_B[_A++]=t;break;}else if(I()){t=_A;_A+=
2;_B[t]=2;_B[t+1]=_P();m=1;}else{_B[_A++]=2+1;}}return _A-s;}main
(int _,char*v[]){long i;char*k="CVDCJBADCDCCBADCECBBAAAC";for(_A=
0;_A<24;++_A)_B[_A]=k[_A]-'A';++_A;in=fopen(v[1],"rb");_B[24]=_P(
);char o[ftell(in)];int po=0;rewind(in);Z *t,*e;for(;;)switch(_B[
ip]){C 1:e=t=W;for(int i=0;i<_B[ip+1]&&e!=&_R;++i)e=e->Q;ip=e->R;
W=(++(e->W)->E,e->W);G(t);break;C 2:if(!(t=Y)){t=calloc(1,sizeof(
Z));}Y=t->Q;t->E=1;t->R=ip+2+_B[ip+1];t->W=t->R>_B[1]&&t->R!=_A?(
++W->E,W):&_R;t->Q=S;S=t;ip+=2;C 3:if(!S){long s=0L,ind=0,c;while
(!feof(in)){c=fgetc(in);if(c==EOF)break;s+=c; if(isdigit(c))if(o[
ind++]!=(c&1))exit(1);}if(s%2!=o[ind])exit(1);rewind(in);ip=0;fth
();exit(0);}Z*t=S;S=t->Q;t->Q=W;W=t;++ip;C 0:o[po++]=ip&1;ip=2;G(
W);W=&_R;break;}}op[60000]={32},L=1,t=64,w,STK[10000],*sp=STK,top
;char s[10000];void _W(x){nt=L;L=*op-1;nt=t;nt=x;fscanf(in,"%s",s
+t);t+=strlen(s+t)+1;}exec(x){switch(op[x++]){C 5:for(w=fscanf(in
,"%s",s)<1?exit(0),0:L;strcmp(s,&s[op[w+1]]);w=op[w]);w-1?exec(w+
2):(nt=2,nt=atoi(s))C 12:ip=op[op[1]--] C 2:op[++op[1]]=ip;ip=x C
15:top=sp[-top] C 1:nt=x C 7:op[top]=ot;top=ot C 0:*++sp=top;top=
op[ip++]C 8:top=ot-top C 6:top=op[top] C 10:top=ot/top C 3:_W(1);
nt=2 C 11:top=top<=0; C 4:*op-=2;nt=2; C 13:putchar(top);top=ot C
14:*++sp=top;top=getchar();C 9:top*=ot;}}fth(){_W(3);_W(4);_W(1);
w=*op;nt=5;nt=2;ip=*op;nt=w;nt=ip-1;for(w=6;w<16;)_W(1),nt=w++;op
[1]=*op;*op+=512;for(;;)exec(op[ip++]);}
```

## Hint

The encrypted hint attached to the interpreter, in xxd hex dump format:

```00000000: 726a 0346 0130 3030 3107 3130 30e6 3130  rj.F.0001.100.10
00000010: 3081 ce1b 9e20 3030 3034 c531 3030 c5c5  0.... 0004.100..
00000020: 2922 d6cf cfcf cfdc bd23 1379 4b58 49d4  )".......#.yKXI.
00000030: 227b 0001 8c66 7253 ef87 2cfd 73ec aa09  "{...frS..,.s...
00000040: cb05 fcff 79f6 289f a3ee 47e2 1b89 b5cb  ....y.(...G.....
00000050: 2ac3 2d80 1661 be59 aea9 44a6 bff5 64c2  *.-..a.Y..D...d.
00000060: 42d9 94b9 3d76 c3a8 75fe 5b43 1142 d9ca  B...=v..u.[C.B..
00000070: 6019 ebbb 2542 3b9d 3112 ea65 9252 4257  `...%B;.1..e.RBW
00000080: 2855 524a 3b13 0323 5921 0d11 830c dd27  (URJ;..#Y!.....'
00000090: b7e1 a282 f8b3 c542 8ef4 d697 dce1 f240  .......B.......@
000000a0: 856a 120e ccf8 4728 eda4 2fce 934d b520  .j....G(../..M.
000000b0: b807 3339 783b e782 7ebf f85d 5d76 0afd  ..39x;..~..]]v..
000000c0: dfaf 0252 0c62 fcf7 1a36 84bd 1362 bad7  ...R.b...6...b..
000000d0: 8a86 2329 4d2b e3e8 a0cc 8e09 341f a3e3  ..#)M+......4...
000000e0: 6d96 3e4a 42dc 345c 4e46 0105 ef24 0421  m.>JB.4\NF...\$.!
000000f0: ef72 142a e3d2 5f8f 106a 9305 92f8 6f8f  .r.*.._..j....o.
00000100: effc 9dc2 ed9e a8d7 196d d740 ddeb 9d3c  .........m.@...<
00000110: 40c8 1e05 b363 f470 8c0f 8345 cb1e 22af  @....c.p...E..".
00000120: bfbd 3b34 f442 2b52 69cd c4a8 dbff 54e5  ..;4.B+Ri.....T.
00000130: 0b08 9fd2 725b 28c4 ae48 c451 be5a a44f  ....r[(..H.Q.Z.O
00000140: c6bd 58b2 c860 5761                      ..X..`Wa
```