@@ 1,7 1,7 @@
#include <stdio.h>
typedef struct Grid {
- int w, h, l;
+ int w, h, l, f;
int lock[256 * 256];
char data[256 * 256];
} Grid;
@@ 59,7 59,7 @@ lock(Grid *g, int x, int y)
/* Library */
void
-_0(Grid *g, int x, int y)
+_0(void)
{
}
@@ 86,11 86,21 @@ _b(Grid *g, int x, int y)
void
_c(Grid *g, int x, int y)
{
+ char rate = get(g, x - 1, y);
+ char mod = get(g, x + 1, y);
+ set(g, x, y + 1, cchr(g->f / rate % mod, ciuc(mod)));
+ lock(g, x, y + 1);
+ lock(g, x, y + 1);
}
void
_d(Grid *g, int x, int y)
{
+ char rate = get(g, x - 1, y);
+ char mod = get(g, x + 1, y);
+ set(g, x, y + 1, g->f % (rate * mod) == 0 ? '*' : '.');
+ lock(g, x, y + 1);
+ lock(g, x, y + 1);
}
void
@@ 127,11 137,18 @@ _h(Grid *g, int x, int y)
void
_i(Grid *g, int x, int y)
{
+ char step = get(g, x - 1, y);
+ char mod = get(g, x + 1, y);
+ char val = get(g, x, y + 1);
+ set(g, x, y + 1, cchr((cint(val) + cint(step)) % cint(mod), ciuc(mod)));
+ lock(g, x, y + 1);
}
void
_j(Grid *g, int x, int y)
{
+ set(g, x, y + 1, get(g, x, y - 1));
+ lock(g, x, y + 1);
}
void
@@ 206,11 223,24 @@ _s(Grid *g, int x, int y)
void
_t(Grid *g, int x, int y)
{
+ int key = cint(get(g, x - 2, y));
+ int len = cint(get(g, x - 1, y));
+ int i;
+ for(i = 0; i < len; ++i)
+ lock(g, x + 1 + i, y);
+ set(g, x, y + 1, get(g, x + 1 + (key % len), y));
+ lock(g, x, y + 1);
}
void
_u(Grid *g, int x, int y)
{
+ int max = cint(get(g, x - 1, y));
+ int step = cint(get(g, x + 1, y));
+ int bucket = (step * (g->f + max - 1)) % max + step;
+ set(g, x, y + 1, bucket >= max ? '*' : '.');
+ lock(g, x + 1, y);
+ lock(g, x, y + 1);
}
void
@@ 233,16 263,31 @@ _w(Grid *g, int x, int y)
void
_x(Grid *g, int x, int y)
{
+ int tx = cint(get(g, x - 2, y));
+ int ty = cint(get(g, x - 1, y));
+ set(g, x + tx, y + ty + 1, get(g, x + 1, y));
+ lock(g, x + 1, y);
+ lock(g, x + tx, y + ty + 1);
}
void
_y(Grid *g, int x, int y)
{
+ set(g, x + 1, y, get(g, x - 1, y));
+ lock(g, x + 1, y);
}
void
_z(Grid *g, int x, int y)
{
+ int rate = cint(get(g, x - 1, y));
+ char target = get(g, x + 1, y);
+ char val = cint(get(g, x, y + 1));
+ int t = cint(target);
+ int mod = val < t ? rate : val > t ? -rate : 0;
+ set(g, x, y + 1, cchr(val + mod, ciuc(target)));
+ lock(g, x + 1, y);
+ lock(g, x, y + 1);
}
/* clang-format off */
@@ 304,6 349,7 @@ main(int argc, char *argv[])
{
FILE *f;
Grid g;
+ g.f = 0;
if(argc < 2)
return error("No input.");
f = fopen(argv[1], "r");