heh
2015/8
| -rw-r--r-- | src/inp.txt | 639 | ||||
| -rw-r--r-- | src/main.rs | 89 | ||||
| -rw-r--r-- | x.py | 1 |
3 files changed, 304 insertions, 425 deletions
diff --git a/src/inp.txt b/src/inp.txt index 56cae92..0e80d0f 100644 --- a/src/inp.txt +++ b/src/inp.txt @@ -1,339 +1,300 @@ -af AND ah -> ai -NOT lk -> ll -hz RSHIFT 1 -> is -NOT go -> gp -du OR dt -> dv -x RSHIFT 5 -> aa -at OR az -> ba -eo LSHIFT 15 -> es -ci OR ct -> cu -b RSHIFT 5 -> f -fm OR fn -> fo -NOT ag -> ah -v OR w -> x -g AND i -> j -an LSHIFT 15 -> ar -1 AND cx -> cy -jq AND jw -> jy -iu RSHIFT 5 -> ix -gl AND gm -> go -NOT bw -> bx -jp RSHIFT 3 -> jr -hg AND hh -> hj -bv AND bx -> by -er OR es -> et -kl OR kr -> ks -et RSHIFT 1 -> fm -e AND f -> h -u LSHIFT 1 -> ao -he RSHIFT 1 -> hx -eg AND ei -> ej -bo AND bu -> bw -dz OR ef -> eg -dy RSHIFT 3 -> ea -gl OR gm -> gn -da LSHIFT 1 -> du -au OR av -> aw -gj OR gu -> gv -eu OR fa -> fb -lg OR lm -> ln -e OR f -> g -NOT dm -> dn -NOT l -> m -aq OR ar -> as -gj RSHIFT 5 -> gm -hm AND ho -> hp -ge LSHIFT 15 -> gi -jp RSHIFT 1 -> ki -hg OR hh -> hi -lc LSHIFT 1 -> lw -km OR kn -> ko -eq LSHIFT 1 -> fk -1 AND am -> an -gj RSHIFT 1 -> hc -aj AND al -> am -gj AND gu -> gw -ko AND kq -> kr -ha OR gz -> hb -bn OR by -> bz -iv OR jb -> jc -NOT ac -> ad -bo OR bu -> bv -d AND j -> l -bk LSHIFT 1 -> ce -de OR dk -> dl -dd RSHIFT 1 -> dw -hz AND ik -> im -NOT jd -> je -fo RSHIFT 2 -> fp -hb LSHIFT 1 -> hv -lf RSHIFT 2 -> lg -gj RSHIFT 3 -> gl -ki OR kj -> kk -NOT ak -> al -ld OR le -> lf -ci RSHIFT 3 -> ck -1 AND cc -> cd -NOT kx -> ky -fp OR fv -> fw -ev AND ew -> ey -dt LSHIFT 15 -> dx -NOT ax -> ay -bp AND bq -> bs -NOT ii -> ij -ci AND ct -> cv -iq OR ip -> ir -x RSHIFT 2 -> y -fq OR fr -> fs -bn RSHIFT 5 -> bq -0 -> c -14146 -> b -d OR j -> k -z OR aa -> ab -gf OR ge -> gg -df OR dg -> dh -NOT hj -> hk -NOT di -> dj -fj LSHIFT 15 -> fn -lf RSHIFT 1 -> ly -b AND n -> p -jq OR jw -> jx -gn AND gp -> gq -x RSHIFT 1 -> aq -ex AND ez -> fa -NOT fc -> fd -bj OR bi -> bk -as RSHIFT 5 -> av -hu LSHIFT 15 -> hy -NOT gs -> gt -fs AND fu -> fv -dh AND dj -> dk -bz AND cb -> cc -dy RSHIFT 1 -> er -hc OR hd -> he -fo OR fz -> ga -t OR s -> u -b RSHIFT 2 -> d -NOT jy -> jz -hz RSHIFT 2 -> ia -kk AND kv -> kx -ga AND gc -> gd -fl LSHIFT 1 -> gf -bn AND by -> ca -NOT hr -> hs -NOT bs -> bt -lf RSHIFT 3 -> lh -au AND av -> ax -1 AND gd -> ge -jr OR js -> jt -fw AND fy -> fz -NOT iz -> ja -c LSHIFT 1 -> t -dy RSHIFT 5 -> eb -bp OR bq -> br -NOT h -> i -1 AND ds -> dt -ab AND ad -> ae -ap LSHIFT 1 -> bj -br AND bt -> bu -NOT ca -> cb -NOT el -> em -s LSHIFT 15 -> w -gk OR gq -> gr -ff AND fh -> fi -kf LSHIFT 15 -> kj -fp AND fv -> fx -lh OR li -> lj -bn RSHIFT 3 -> bp -jp OR ka -> kb -lw OR lv -> lx -iy AND ja -> jb -dy OR ej -> ek -1 AND bh -> bi -NOT kt -> ku -ao OR an -> ap -ia AND ig -> ii -NOT ey -> ez -bn RSHIFT 1 -> cg -fk OR fj -> fl -ce OR cd -> cf -eu AND fa -> fc -kg OR kf -> kh -jr AND js -> ju -iu RSHIFT 3 -> iw -df AND dg -> di -dl AND dn -> do -la LSHIFT 15 -> le -fo RSHIFT 1 -> gh -NOT gw -> gx -NOT gb -> gc -ir LSHIFT 1 -> jl -x AND ai -> ak -he RSHIFT 5 -> hh -1 AND lu -> lv -NOT ft -> fu -gh OR gi -> gj -lf RSHIFT 5 -> li -x RSHIFT 3 -> z -b RSHIFT 3 -> e -he RSHIFT 2 -> hf -NOT fx -> fy -jt AND jv -> jw -hx OR hy -> hz -jp AND ka -> kc -fb AND fd -> fe -hz OR ik -> il -ci RSHIFT 1 -> db -fo AND fz -> gb -fq AND fr -> ft -gj RSHIFT 2 -> gk -cg OR ch -> ci -cd LSHIFT 15 -> ch -jm LSHIFT 1 -> kg -ih AND ij -> ik -fo RSHIFT 3 -> fq -fo RSHIFT 5 -> fr -1 AND fi -> fj -1 AND kz -> la -iu AND jf -> jh -cq AND cs -> ct -dv LSHIFT 1 -> ep -hf OR hl -> hm -km AND kn -> kp -de AND dk -> dm -dd RSHIFT 5 -> dg -NOT lo -> lp -NOT ju -> jv -NOT fg -> fh -cm AND co -> cp -ea AND eb -> ed -dd RSHIFT 3 -> df -gr AND gt -> gu -ep OR eo -> eq -cj AND cp -> cr -lf OR lq -> lr -gg LSHIFT 1 -> ha -et RSHIFT 2 -> eu -NOT jh -> ji -ek AND em -> en -jk LSHIFT 15 -> jo -ia OR ig -> ih -gv AND gx -> gy -et AND fe -> fg -lh AND li -> lk -1 AND io -> ip -kb AND kd -> ke -kk RSHIFT 5 -> kn -id AND if -> ig -NOT ls -> lt -dw OR dx -> dy -dd AND do -> dq -lf AND lq -> ls -NOT kc -> kd -dy AND ej -> el -1 AND ke -> kf -et OR fe -> ff -hz RSHIFT 5 -> ic -dd OR do -> dp -cj OR cp -> cq -NOT dq -> dr -kk RSHIFT 1 -> ld -jg AND ji -> jj -he OR hp -> hq -hi AND hk -> hl -dp AND dr -> ds -dz AND ef -> eh -hz RSHIFT 3 -> ib -db OR dc -> dd -hw LSHIFT 1 -> iq -he AND hp -> hr -NOT cr -> cs -lg AND lm -> lo -hv OR hu -> hw -il AND in -> io -NOT eh -> ei -gz LSHIFT 15 -> hd -gk AND gq -> gs -1 AND en -> eo -NOT kp -> kq -et RSHIFT 5 -> ew -lj AND ll -> lm -he RSHIFT 3 -> hg -et RSHIFT 3 -> ev -as AND bd -> bf -cu AND cw -> cx -jx AND jz -> ka -b OR n -> o -be AND bg -> bh -1 AND ht -> hu -1 AND gy -> gz -NOT hn -> ho -ck OR cl -> cm -ec AND ee -> ef -lv LSHIFT 15 -> lz -ks AND ku -> kv -NOT ie -> if -hf AND hl -> hn -1 AND r -> s -ib AND ic -> ie -hq AND hs -> ht -y AND ae -> ag -NOT ed -> ee -bi LSHIFT 15 -> bm -dy RSHIFT 2 -> dz -ci RSHIFT 2 -> cj -NOT bf -> bg -NOT im -> in -ev OR ew -> ex -ib OR ic -> id -bn RSHIFT 2 -> bo -dd RSHIFT 2 -> de -bl OR bm -> bn -as RSHIFT 1 -> bl -ea OR eb -> ec -ln AND lp -> lq -kk RSHIFT 3 -> km -is OR it -> iu -iu RSHIFT 2 -> iv -as OR bd -> be -ip LSHIFT 15 -> it -iw OR ix -> iy -kk RSHIFT 2 -> kl -NOT bb -> bc -ci RSHIFT 5 -> cl -ly OR lz -> ma -z AND aa -> ac -iu RSHIFT 1 -> jn -cy LSHIFT 15 -> dc -cf LSHIFT 1 -> cz -as RSHIFT 3 -> au -cz OR cy -> da -kw AND ky -> kz -lx -> a -iw AND ix -> iz -lr AND lt -> lu -jp RSHIFT 5 -> js -aw AND ay -> az -jc AND je -> jf -lb OR la -> lc -NOT cn -> co -kh LSHIFT 1 -> lb -1 AND jj -> jk -y OR ae -> af -ck AND cl -> cn -kk OR kv -> kw -NOT cv -> cw -kl AND kr -> kt -iu OR jf -> jg -at AND az -> bb -jp RSHIFT 2 -> jq -iv AND jb -> jd -jn OR jo -> jp -x OR ai -> aj -ba AND bc -> bd -jl OR jk -> jm -b RSHIFT 1 -> v -o AND q -> r -NOT p -> q -k AND m -> n -as RSHIFT 2 -> at +"azlgxdbljwygyttzkfwuxv" +"v\xfb\"lgs\"kvjfywmut\x9cr" +"merxdhj" +"dwz" +"d\\gkbqo\\fwukyxab\"u" +"k\xd4cfixejvkicryipucwurq\x7eq" +"nvtidemacj\"hppfopvpr" +"kbngyfvvsdismznhar\\p\"\"gpryt\"jaeh" +"khre\"o\x0elqfrbktzn" +"nugkdmqwdq\x50amallrskmrxoyo" +"jcrkptrsasjp\\\"cwigzynjgspxxv\\vyb" +"ramf\"skhcmenhbpujbqwkltmplxygfcy" +"aqjqgbfqaxga\\fkdcahlfi\"pvods" +"pcrtfb" +"\x83qg\"nwgugfmfpzlrvty\"ryoxm" +"fvhvvokdnl\\eap" +"kugdkrat" +"seuxwc" +"vhioftcosshaqtnz" +"gzkxqrdq\\uko\"mrtst" +"znjcomvy\x16hhsenmroswr" +"clowmtra" +"\xc4" +"jpavsevmziklydtqqm" +"egxjqytcttr\\ecfedmmovkyn\"m" +"mjulrvqgmsvmwf" +"o\\prxtlfbatxerhev\xf9hcl\x44rzmvklviv" +"lregjexqaqgwloydxdsc\\o\"dnjfmjcu" +"lnxluajtk\x8desue\\k\x7abhwokfhh" +"wrssfvzzn\"llrysjgiu\"npjtdli" +"\x67lwkks" +"bifw\"ybvmwiyi\"vhol\"vol\xd4" +"aywdqhvtvcpvbewtwuyxrix" +"gc\xd3\"caukdgfdywj" +"uczy\\fk" +"bnlxkjvl\x7docehufkj\\\"qoyhag" +"bidsptalmoicyorbv\\" +"jorscv\"mufcvvfmcv\"ga" +"sofpwfal\\a" +"kcuqtbboaly\"uj\"k" +"n\\c" +"x\"\xcaj\\xwwvpdldz" +"eyukphh" +"wcyjq" +"vjx\"\"hjroj\"l\x4cjwbr" +"xcodsxzfqw\\rowqtuwvjnxupjnrh" +"yc" +"fpvzldgbdtca\"hqwa" +"ymjq\x8ahohvafubra\"hgqoknkuyph" +"kx\\mkaaklvcup" +"belddrzegcsxsyfhzyz" +"fuyswi" +"\\hubzebo\"ha\\qyr\"dv\\" +"mxvlz\"fwuvx\"cyk\"" +"ftbh\"ro\\tmcpnpvh\"xx" +"ygi" +"rw\"\"wwn\\fgbjumq\"vgvoh\xd0\"mm" +"\"pat\"\x63kpfc\"\x2ckhfvxk\"uwqzlx" +"o" +"d\"hqtsfp\xceaswe\"\xc0lw" +"zajpvfawqntvoveal\"\"trcdarjua" +"xzapq" +"rkmhm" +"byuq" +"rwwmt\xe8jg\xc2\"omt" +"nfljgdmgefvlh\"x" +"rpjxcexisualz" +"doxcycmgaiptvd" +"rq\\\"mohnjdf\\xv\\hrnosdtmvxot" +"oqvbcenib\"uhy\\npjxg" +"pkvgnm\\ruayuvpbpd" +"kknmzpxqfbcdgng" +"piduhbmaympxdexz" +"vapczawekhoa\\or" +"tlwn\"avc\"bycg\"\"xuxea" +"\xcdvryveteqzxrgopmdmihkcgsuozips" +"kpzziqt" +"sdy\\s\"cjq" +"yujs" +"qte\"q" +"qyvpnkhjcqjv\"cclvv\"pclgtg\xeak\"tno" +"xwx" +"vibuvv" +"qq\"" +"wwjduomtbkbdtorhpyalxswisq\"r" +"afuw\\mfjzctcivwesutxbk\"lk" +"e\xcef\\hkiu" +"ftdrgzvygcw\"jwsrcmgxj" +"zrddqfkx\x21dr\"ju\"elybk\"powj\"\"kpryz" +"dttdkfvbodkma\"" +"lzygktugpqw" +"qu\x83tes\\u\"tnid\"ryuz" +"\\o\"pe\\vqwlsizjklwrjofg\xe2oau\\rd" +"mikevjzhnwgx\"fozrj\"h\"" +"ligxmxznzvtachvvbahnff" +"d\\kq" +"tnbkxpzmcakqhaa" +"g\\yeakebeyv" +"cqkcnd\"sxjxfnawy\x31zax\x6ceha" +"m\x0dtqotffzdnetujtsgjqgwddc" +"masnugb\"etgmxul\x3bqd\\tmtddnvcy" +"floediikodfgre\x23wyoxlswxflwecdjpt" +"zu" +"r" +"\"ashzdbd\"pdvba\xeeumkr\\amnj" +"ckslmuwbtfouwpfwtuiqmeozgspwnhx" +"t\\qjsjek\xf9gjcxsyco\"r" +"hoed\x1b\\tcmaqch\"epdy" +"mgjiojwzc\\ypqcn\xb1njmp\"aeeblxt" +"\xdf\"h\x5enfracj" +"\x6fpbpocrb" +"jbmhrswyyq\\" +"wtyqtenfwatji\"ls\\" +"voy" +"awj" +"rtbj\"j" +"hynl" +"orqqeuaat\\xu\\havsgr\xc5qdk" +"g\"npyzjfq\"rjefwsk" +"rk\\kkcirjbixr\\zelndx\"bsnqvqj\"" +"tecoz" +"dn\"uswngbdk\"" +"qb\\" +"wpyis\\ebq" +"ppwue\\airoxzjjdqbvyurhaabetv" +"fxlvt" +"ql\"oqsmsvpxcg\"k" +"vqlhuec\\adw" +"qzmi\xffberakqqkk" +"tisjqff\"wf" +"yhnpudoaybwucvppj" +"xhfuf\\ehsrhsnfxcwtibd\"ubfpz" +"ihgjquzhf\"" +"ff\x66dsupesrnusrtqnywoqcn\\" +"z\x77zpubbjmd" +"\"vhzlbwq\"xeimjt\\xe\x85umho\"m\"\"bmy" +"mmuvkioocmzjjysi\"mkfbec\"" +"rpgghowbduw\x2fayslubajinoik\xd0hcfy" +"xrkyjqul\xdexlojgdphczp\"jfk" +"mg\x07cnr\x8b\x67xdgszmgiktpjhawho" +"kdgufhaoab" +"rlhela\"nldr" +"wzye\x87u" +"yif\x75bjhnitgoarmfgqwpmopu" +"pvlbyez\"wyy\x3dpgr" +"ezdm\"ovkruthkvdwtqwr\"ibdoawzgu" +"qubp" +"b\\kcpegcn\\zgdemgorjnk" +"gjsva\\kzaor\"\"gtpd" +"\"kt" +"rlymwlcodix" +"qqtmswowxca\"jvv" +"jni\xebwhozb" +"zhino\"kzjtmgxpi\"zzexijg" +"tyrbat\\mejgzplufxixkyg" +"lhmopxiao\x09\"p\xebl" +"xefioorxvate" +"nmcgd\x46xfujt\"w" +"\xe3wnwpat\"gtimrb" +"wpq\"xkjuw\xebbohgcagppb" +"fmvpwaca" +"mlsw" +"fdan\\\x9e" +"\"f\"fmdlzc" +"nyuj\\jnnfzdnrqmhvjrahlvzl" +"zn\"f\xcfsshcdaukkimfwk" +"uayugezzo\\\"e\"blnrgjaupqhik" +"efd\"apkndelkuvfvwyyatyttkehc" +"ufxq\\\"m\"bwkh\x93kapbqrvxxzbzp\\" +"fgypsbgjak\x79qblbeidavqtddfacq\\i\"h" +"kcfgpiysdxlgejjvgndb\\dovfpqodw" +"\"onpqnssmighipuqgwx\"nrokzgvg" +"vhjrrhfrba\"jebdanzsrdusut\\wbs" +"o\xdakymbaxakys" +"uwxhhzz\\mtmhghjn\\\\tnhzbejj" +"yd\\" +"bpgztp\\lzwpdqju\"it\x35qjhihjv" +"\\my\\b\"klnnto\\\xb3mbtsh" +"ezyvknv\"l\x2bdhhfjcvwzhjgmhwbqd\"\\" +"ftkz\"amoncbsohtaumhl\"wsodemopodq" +"ifv" +"dmzfxvzq" +"sped\"bvmf\"mmevl\"zydannpfny" +"fjxcjwlv\"pnqyrzatsjwsqfidb" +"muc\xfdqouwwnmuixru\\zlhjintplvtee" +"mraqgvmj" +"njopq\"ftcsryo" +"enoh\"n" +"t\"ntjhjc\"nzqh\xf7dcohhlsja\x7dtr" +"flbqcmcoun" +"dxkiysrn\\dyuqoaig" +"nehkzi\"h\"syktzfufotng\xdafqo" +"dzkjg\\hqjk\\\"zfegssjhn" +"sadlsjv" +"vmfnrdb\"" +"ac\\bdp\"n" +"qt\x89h" +"lsndeugwvijwde\\vjapbm\\k\\nljuva" +"twpmltdzyynqt\\z\\tnund\x64hm" +"hpcyata\"ocylbkzdnhujh" +"hskzq\"knntuhscex\"q\\y\\vqj\x3an" +"eekwyufvji\\mqgeroekxeyrmymq" +"hl\"durthetvri\xebw\\jxu\"rcmiuy" +"\"fxdnmvnftxwesmvvq\"sjnf\xaabpg\"iary" +"\"\"nksqso" +"ruq\xbezugge\"d\"hwvoxmy\"iawikddxn\"x" +"rxxnlfay" +"stcu\"mv\xabcqts\\fasff" +"yrnvwfkfuzuoysfdzl\x02bk" +"qbdsmlwdbfknivtwijbwtatqfe" +"\"erqh\\csjph" +"ikfv" +"\xd2cuhowmtsxepzsivsvnvsb" +"vj" +"d" +"\\g" +"porvg\x62qghorthnc\"\\" +"tiks\\kr\"\x0fuejvuxzswnwdjscrk" +"xmgfel\"atma\\zaxmlgfjx\"ajmqf" +"oz\\rnxwljc\\\"umhymtwh" +"wlsxxhm\x7fqx\\gjoyrvccfiner\\qloluqv" +"k\\ieq" +"xidjj\"ksnlgnwxlddf\\s\\kuuleb" +"wjpnzgprzv\\maub\x0cj" +"r" +"y" +"\"yecqiei\"ire\\jdhlnnlde\xc5u" +"drvdiycqib" +"egnrbefezcrhgldrtb" +"plqodxv\\zm\"uodwjdocri\x55ucaezutm" +"f\"wexcw\x02ekewx\"alyzn" +"pqajwuk\\\\oatkfqdyspnrupo" +"rkczj\"fzntabpnygrhamk\\km\x68xfkmr" +"wejam\xbac\x37kns" +"qqmlwjk\"gh" +"fdcjsxlgx" +"\\cxvxy\"kb\"\"unubvrsq\\y\\awfhbmarj\\" +"geunceaqr" +"tpkg\"svvngk\\sizlsyaqwf" +"\"pa\\x\x18od\\emgje\\" +"ffiizogjjptubzqfuh\"cctieqcdh" +"yikhiyyrpgglpos" +"h\\" +"jotqojodcv" +"ervsz\x87ade\"fevq\\tcqowt" +"\\y\"fgrxtppkcseeg\\onxjarx\\hyhfn\x5fi" +"kxndlabn\\wwumctuzdcfiitrbnn" +"eoosynwhwm" +"\"c\x04" +"ny\xf6vuwlec" +"ubgxxcvnltzaucrzg\\xcez" +"pnocjvo\\yt" +"fcabrtqog\"a\"zj" +"o\\bha\\mzxmrfltnflv\xea" +"tbfvzwhexsdxjmxejwqqngzixcx" +"wdptrakok\"rgymturdmwfiwu" +"reffmj" +"lqm" +"\\oc" +"p\"" +"ygkdnhcuehlx" +"vsqmv\"bqay\"olimtkewedzm" +"isos\x6azbnkojhxoopzetbj\xe1yd" +"yo\\pgayjcyhshztnbdv" +"fg\"h" +"vcmcojolfcf\\\\oxveua" +"w\"vyszhbrr\"jpeddpnrjlca\x69bdbopd\\z" +"jikeqv" +"\"dkjdfrtj" +"is" +"hgzx" +"z\"" +"woubquq\\ag\"" +"xvclriqa\xe6ltt" +"tfxinifmd" +"mvywzf\"jz" +"vlle" +"c\"rf\"wynhye\x25vccvb\"" +"zvuxm" +"\xf2\"jdstiwqer\"h" +"kyogyogcknbzv\x9f\\\\e" +"kspodj\"edpeqgypc" +"oh\\x\\h" +"julb" +"bmcfkidxyilgoy\\xmu\"ig\\qg" +"veqww\"ea" +"fkdbemtgtkpqisrwlxutllxc\"mbelhs" +"e" +"ecn\x50ooprbstnq" +"\"\xe8\"ec\xeah\"qo\\g\"iuqxy\"e\"y\xe7xk\xc6d" +"lwj\"aftrcqj" +"jduij\x97zk\"rftjrixzgscxxllpqx\"bwwb" +"fqcditz" +"f\x19azclj\"rsvaokgvty\"aeq" +"erse\x9etmzhlmhy\x67yftoti" +"lsdw\xb3dmiy\\od" +"x\x6fxbljsjdgd\xaau" +"hjg\\w\"\x78uoqbsdikbjxpip\"w\"jnhzec" +"gk" +"\\zrs\\syur" diff --git a/src/main.rs b/src/main.rs index fe94dab..36bb618 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,94 +40,11 @@ pub mod util; use atools::prelude::*; pub use util::prelude::*; -#[derive(Debug)] -struct Gate<'s> { - inp: GateTy<'s>, - run: bool, -} -impl<'s> Gate<'s> { - pub fn new(x: GateTy<'s>) -> Self { - Gate { inp: x, run: false } - } -} -#[derive(Debug)] -enum GateTy<'s> { - Unary(fn(u16) -> u16, &'s str, &'s str), - Binary(fn(u16, u16) -> u16, [&'s str; 2], &'s str), - With(fn(u16, u16) -> u16, u16, &'s str, &'s str), -} #[no_mangle] pub fn p1(x: &str) -> impl Display { - let mut wires = HashMap::default(); - let mut gates = Vec::with_capacity(128); - let mut ending = None; - for connection in x.行() { - if connection.starts_with(b"NOT") { - let [_, x, _, out] = connection.str().split(' ').carr(); - gates.push(Gate { - inp: GateTy::Unary(|x| !x, x, out), - run: false, - }); - continue; - } - let [a, op, out] = connection.μₙ(b' ').carr::<3>(); - - if op == b"->" { - if let Ok(x) = a.str().parse::<u16>() { - wires.insert(out.str(), x); - } else { - ending = Some(a.str()); - } - continue; - } - let [a, _, b, _, out] = connection.μₙ(b' ').carr(); - if let Ok(x) = a.str().parse::<u16>() { - gates.push(Gate { - inp: GateTy::With(|a, b| a & b, x, b.str(), out.str()), - run: false, - }); - continue; - } - - let [a, op, b, _, out] = connection.str().split(' ').carr(); - gates.push(match op { - "AND" => Gate::new(GateTy::Binary(|a, b| a & b, [a, b], out)), - "OR" => Gate::new(GateTy::Binary(|a, b| a | b, [a, b], out)), - "LSHIFT" => Gate::new(GateTy::With(|a, b| a << b, b.λ(), a, out)), - "RSHIFT" => Gate::new(GateTy::With(|a, b| a >> b, b.λ(), a, out)), - x => panic!("{}", x), - }); - } - // wires.insert("b", 956); - let mut all_run = false; - while !all_run { - all_run = true; - for gate in &mut gates { - if gate.run { - continue; - }; - match gate.inp { - GateTy::Unary(op, input, output) => wires.get(input).copied().map(|x| { - gate.run = true; - wires.insert(output, op(x)) - }), - GateTy::Binary(op, [a, b], output) => wires - .get(a) - .copied() - .zip(wires.get(b).copied()) - .map(|(a, b)| { - gate.run = true; - wires.insert(output, op(a, b)) - }), - GateTy::With(op, with, input, output) => wires.get(input).copied().map(|x| { - gate.run = true; - wires.insert(output, op(x, with)) - }), - }; - all_run &= gate.run; - } - } - wires[ending.unwrap()] + x.行() + .map(|x| format!("{:?}", x.str()).len() - x.len()) + .sum::<usize>() } fn main() { @@ -0,0 +1 @@ +print(sum(map(lambda line: len(line) - 1 - eval(f"len({line})"), open(0).readlines()))) |