diff options
author | Christian Neukirchen <chneukirchen@gmail.com> | 2015-12-07 15:08:58 +0100 |
---|---|---|
committer | Christian Neukirchen <chneukirchen@gmail.com> | 2015-12-07 15:08:58 +0100 |
commit | aaf16ff170dfceb12c816f01ec7870f5fc285885 (patch) | |
tree | 48eb88b2363c2fa47f62c6a14209ca5e651ca959 /day7.k | |
parent | be8000bb4e4ec9f32efc71a32990968827f64e9e (diff) | |
download | adventofcode2015-aaf16ff170dfceb12c816f01ec7870f5fc285885.tar.gz adventofcode2015-aaf16ff170dfceb12c816f01ec7870f5fc285885.tar.xz adventofcode2015-aaf16ff170dfceb12c816f01ec7870f5fc285885.zip |
day7
Diffstat (limited to 'day7.k')
-rw-r--r-- | day7.k | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/day7.k b/day7.k new file mode 100644 index 0000000..69411c6 --- /dev/null +++ b/day7.k @@ -0,0 +1,49 @@ +d:0:"day7"; + +ss:{1 _' (&y=y,x) _ y,x}; / split x at y +l:ss[;" "]' d; + +/ 16-bit "arithmetics" +bits16:{-16#(16#0), 2 _vs x}; +lshift:{-16#x,y#0}; +rshift:{16#(y#0),x}; + +dp:[]; +cl:[]; +dep:{ + :[ "NOT"~x[0]; (dp[`$x[3]]: ,`$x[1]; cl[`$x[3]]: x) + "AND"~x[1]; (dp[`$x[4]]: `$x[0 2]; cl[`$x[4]]: x) + "OR"~x[1]; (dp[`$x[4]]: `$x[0 2]; cl[`$x[4]]: x) + "LSHIFT"~x[1]; (dp[`$x[4]]: ,`$x[0]; cl[`$x[4]]: x) + "RSHIFT"~x[1]; (dp[`$x[4]]: ,`$x[0]; cl[`$x[4]]: x) + 1; (dp[`$x[2]]: 0#`; cl[`$x[2]]: x) + ] +}; + +dep' l; / trace dependencies +{dp[x]:0#`}'(,/dp[!dp]) _dvl !dp; / completion +/ now sort topologically +order:{[s]?|,/{?,/s@x}\!s}; / variant of nsl order.k +o: (order dp) _dvl `a `"1"; / drop 1 and a, instead use lx + +v:[]; / variables +v[`"1"]: bits16 1; / constant 1 + +/ interpreter +op:{ + :["NOT"~x[0]; v[`$x[3]]: ~v[`$x[1]] + "AND"~x[1]; v[`$x[4]]: v[`$x[0]]&v[`$x[2]] + "OR"~x[1]; v[`$x[4]]: v[`$x[0]]|v[`$x[2]] + "LSHIFT"~x[1]; v[`$x[4]]: lshift[v[`$x[0]];0$x[2]] + "RSHIFT"~x[1]; v[`$x[4]]: rshift[v[`$x[0]];0$x[2]] + 1; v[`$x[2]]: bits16 0$x[0]] +}; + +op' cl[o]; +a: 2 _sv v[`lx] + +/ part 2 + +cl[`b]: ($a;"->";"b"); +op' cl[o]; +a: 2 _sv v[`lx] |