From ccf1a5828fc26a82545c7accf1ce7916daa08a2d Mon Sep 17 00:00:00 2001
From: alyx <alyx@aleteoryx.me>
Date: Mon, 20 Nov 2023 17:12:15 -0500
Subject: Reorganize using workspaces

---
 2015/rs/Cargo.lock               |   40 +-
 2015/rs/Cargo.toml               |   46 +-
 2015/rs/code/eight/Cargo.toml    |    8 +
 2015/rs/code/eight/src/input.txt |  300 ++++++++++++
 2015/rs/code/eight/src/main.rs   |   55 +++
 2015/rs/code/five/Cargo.toml     |    8 +
 2015/rs/code/five/src/input.txt  | 1000 ++++++++++++++++++++++++++++++++++++++
 2015/rs/code/five/src/main.rs    |   52 ++
 2015/rs/code/four/Cargo.toml     |    9 +
 2015/rs/code/four/src/main.rs    |   46 ++
 2015/rs/code/nine/Cargo.toml     |    8 +
 2015/rs/code/nine/src/input.txt  |   28 ++
 2015/rs/code/nine/src/main.rs    |   53 ++
 2015/rs/code/one/Cargo.toml      |    8 +
 2015/rs/code/one/src/input.txt   |    1 +
 2015/rs/code/one/src/main.rs     |   11 +
 2015/rs/code/seven/Cargo.toml    |    8 +
 2015/rs/code/seven/src/input.txt |  339 +++++++++++++
 2015/rs/code/seven/src/main.rs   |   94 ++++
 2015/rs/code/six/Cargo.toml      |    8 +
 2015/rs/code/six/src/input.txt   |  300 ++++++++++++
 2015/rs/code/six/src/main.rs     |   57 +++
 2015/rs/code/three/Cargo.toml    |    8 +
 2015/rs/code/three/src/input.txt |    1 +
 2015/rs/code/three/src/main.rs   |   29 ++
 2015/rs/code/two/Cargo.toml      |    8 +
 2015/rs/code/two/src/input.txt   | 1000 ++++++++++++++++++++++++++++++++++++++
 2015/rs/code/two/src/main.rs     |   31 ++
 2015/rs/src/base.rs              |    5 -
 2015/rs/src/eight.rs             |   55 ---
 2015/rs/src/eight.txt            |  300 ------------
 2015/rs/src/five.rs              |   52 --
 2015/rs/src/five.txt             | 1000 --------------------------------------
 2015/rs/src/four.rs              |   46 --
 2015/rs/src/nine.rs              |   53 --
 2015/rs/src/nine.txt             |   28 --
 2015/rs/src/one.rs               |   11 -
 2015/rs/src/one.txt              |    1 -
 2015/rs/src/seven.rs             |   94 ----
 2015/rs/src/seven.txt            |  339 -------------
 2015/rs/src/six.rs               |   57 ---
 2015/rs/src/six.txt              |  300 ------------
 2015/rs/src/three.rs             |   29 --
 2015/rs/src/three.txt            |    1 -
 2015/rs/src/two.rs               |   31 --
 2015/rs/src/two.txt              | 1000 --------------------------------------
 46 files changed, 3509 insertions(+), 3449 deletions(-)
 create mode 100644 2015/rs/code/eight/Cargo.toml
 create mode 100644 2015/rs/code/eight/src/input.txt
 create mode 100644 2015/rs/code/eight/src/main.rs
 create mode 100644 2015/rs/code/five/Cargo.toml
 create mode 100644 2015/rs/code/five/src/input.txt
 create mode 100644 2015/rs/code/five/src/main.rs
 create mode 100644 2015/rs/code/four/Cargo.toml
 create mode 100644 2015/rs/code/four/src/main.rs
 create mode 100644 2015/rs/code/nine/Cargo.toml
 create mode 100644 2015/rs/code/nine/src/input.txt
 create mode 100644 2015/rs/code/nine/src/main.rs
 create mode 100644 2015/rs/code/one/Cargo.toml
 create mode 100644 2015/rs/code/one/src/input.txt
 create mode 100644 2015/rs/code/one/src/main.rs
 create mode 100644 2015/rs/code/seven/Cargo.toml
 create mode 100644 2015/rs/code/seven/src/input.txt
 create mode 100644 2015/rs/code/seven/src/main.rs
 create mode 100644 2015/rs/code/six/Cargo.toml
 create mode 100644 2015/rs/code/six/src/input.txt
 create mode 100644 2015/rs/code/six/src/main.rs
 create mode 100644 2015/rs/code/three/Cargo.toml
 create mode 100644 2015/rs/code/three/src/input.txt
 create mode 100644 2015/rs/code/three/src/main.rs
 create mode 100644 2015/rs/code/two/Cargo.toml
 create mode 100644 2015/rs/code/two/src/input.txt
 create mode 100644 2015/rs/code/two/src/main.rs
 delete mode 100644 2015/rs/src/base.rs
 delete mode 100644 2015/rs/src/eight.rs
 delete mode 100644 2015/rs/src/eight.txt
 delete mode 100644 2015/rs/src/five.rs
 delete mode 100644 2015/rs/src/five.txt
 delete mode 100644 2015/rs/src/four.rs
 delete mode 100644 2015/rs/src/nine.rs
 delete mode 100644 2015/rs/src/nine.txt
 delete mode 100644 2015/rs/src/one.rs
 delete mode 100644 2015/rs/src/one.txt
 delete mode 100644 2015/rs/src/seven.rs
 delete mode 100644 2015/rs/src/seven.txt
 delete mode 100644 2015/rs/src/six.rs
 delete mode 100644 2015/rs/src/six.txt
 delete mode 100644 2015/rs/src/three.rs
 delete mode 100644 2015/rs/src/three.txt
 delete mode 100644 2015/rs/src/two.rs
 delete mode 100644 2015/rs/src/two.txt

(limited to '2015/rs')

diff --git a/2015/rs/Cargo.lock b/2015/rs/Cargo.lock
index fcc0eb5..5f198ba 100644
--- a/2015/rs/Cargo.lock
+++ b/2015/rs/Cargo.lock
@@ -37,6 +37,21 @@ dependencies = [
  "crypto-common",
 ]
 
+[[package]]
+name = "eight"
+version = "0.1.0"
+
+[[package]]
+name = "five"
+version = "0.1.0"
+
+[[package]]
+name = "four"
+version = "0.1.0"
+dependencies = [
+ "md-5",
+]
+
 [[package]]
 name = "generic-array"
 version = "0.14.7"
@@ -58,11 +73,28 @@ dependencies = [
 ]
 
 [[package]]
-name = "rs"
+name = "nine"
+version = "0.1.0"
+
+[[package]]
+name = "one"
+version = "0.1.0"
+
+[[package]]
+name = "seven"
+version = "0.1.0"
+
+[[package]]
+name = "six"
+version = "0.1.0"
+
+[[package]]
+name = "three"
+version = "0.1.0"
+
+[[package]]
+name = "two"
 version = "0.1.0"
-dependencies = [
- "md-5",
-]
 
 [[package]]
 name = "typenum"
diff --git a/2015/rs/Cargo.toml b/2015/rs/Cargo.toml
index e35c00b..943e005 100644
--- a/2015/rs/Cargo.toml
+++ b/2015/rs/Cargo.toml
@@ -1,43 +1,3 @@
-[package]
-name = "rs"
-version = "0.1.0"
-edition = "2021"
-
-[[bin]]
-name = "one"
-path = "src/one.rs"
-
-[[bin]]
-name = "two"
-path = "src/two.rs"
-
-[[bin]]
-name = "three"
-path = "src/three.rs"
-
-[[bin]]
-name = "four"
-path = "src/four.rs"
-
-[[bin]]
-name = "five"
-path = "src/five.rs"
-
-[[bin]]
-name = "six"
-path = "src/six.rs"
-
-[[bin]]
-name = "seven"
-path = "src/seven.rs"
-
-[[bin]]
-name = "eight"
-path = "src/eight.rs"
-
-[[bin]]
-name = "nine"
-path = "src/nine.rs"
-
-[dependencies]
-md-5 = "0.10.6"
+[workspace]
+members = ["code/*"]
+resolver = "2"
diff --git a/2015/rs/code/eight/Cargo.toml b/2015/rs/code/eight/Cargo.toml
new file mode 100644
index 0000000..3000071
--- /dev/null
+++ b/2015/rs/code/eight/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "eight"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2015/rs/code/eight/src/input.txt b/2015/rs/code/eight/src/input.txt
new file mode 100644
index 0000000..0e80d0f
--- /dev/null
+++ b/2015/rs/code/eight/src/input.txt
@@ -0,0 +1,300 @@
+"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/2015/rs/code/eight/src/main.rs b/2015/rs/code/eight/src/main.rs
new file mode 100644
index 0000000..b51f436
--- /dev/null
+++ b/2015/rs/code/eight/src/main.rs
@@ -0,0 +1,55 @@
+static INPUT: &'static str = include_str!("input.txt");
+
+#[derive(Copy, Clone)]
+enum ParseState {
+  Verbatim,
+  Esc,
+  Hex1,
+  Hex2(u32)
+}
+
+fn main() {
+  let valueified = INPUT.split('\n')
+    .filter(|s| !s.is_empty());
+
+  let (oglen, parsedlen) = valueified.clone()
+    .map(|s| {
+      let rs = s.strip_prefix('"').and_then(|s| s.strip_suffix('"')).unwrap();
+      let mut buf = String::with_capacity(s.len());
+      let mut state = ParseState::Verbatim;
+      for c in rs.chars() {
+        match (state, c) {
+          (ParseState::Verbatim, '\\') => { state = ParseState::Esc; },
+          (ParseState::Verbatim, c) => { buf.push(c); },
+
+          (ParseState::Esc, 'x') => { state = ParseState::Hex1; },
+          (ParseState::Esc, c) => { buf.push(c); state = ParseState::Verbatim; },
+
+          (ParseState::Hex1, c) => { state = ParseState::Hex2(c.to_digit(16).unwrap() * 16); },
+          (ParseState::Hex2(n), c) => { buf.push(/*char::from_u32(n + c.to_digit(16).unwrap()).unwrap()*/'?'); state = ParseState::Verbatim; },
+        }
+      }
+      (s, buf)
+    })
+    .fold((0, 0), |(a1, b1), (a2, b2)| (a1 + a2.len(), b1 + b2.len()));
+  let lendiff = oglen - parsedlen;
+  println!("Literal Length - Parsed Length: {lendiff}");
+
+  let (oglen, enclen) = valueified
+    .map(|s| {
+      let mut buf = String::with_capacity(s.len() * 2);
+      buf.push('"');
+      for c in s.chars() {
+        match c {
+          '\\' => { buf += "\\\\" },
+          '"' => { buf += "\\\"" },
+          c => { buf.push(c) },
+        }
+      }
+      buf.push('"');
+      (s, buf)
+    })
+    .fold((0, 0), |(a1, b1), (a2, b2)| (a1 + a2.len(), b1 + b2.len()));
+  let lendiff = enclen - oglen;
+  println!("Encoded Length - Literal Length: {lendiff}");
+}
diff --git a/2015/rs/code/five/Cargo.toml b/2015/rs/code/five/Cargo.toml
new file mode 100644
index 0000000..7100f84
--- /dev/null
+++ b/2015/rs/code/five/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "five"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2015/rs/code/five/src/input.txt b/2015/rs/code/five/src/input.txt
new file mode 100644
index 0000000..a9b6e77
--- /dev/null
+++ b/2015/rs/code/five/src/input.txt
@@ -0,0 +1,1000 @@
+sszojmmrrkwuftyv
+isaljhemltsdzlum
+fujcyucsrxgatisb
+qiqqlmcgnhzparyg
+oijbmduquhfactbc
+jqzuvtggpdqcekgk
+zwqadogmpjmmxijf
+uilzxjythsqhwndh
+gtssqejjknzkkpvw
+wrggegukhhatygfi
+vhtcgqzerxonhsye
+tedlwzdjfppbmtdx
+iuvrelxiapllaxbg
+feybgiimfthtplui
+qxmmcnirvkzfrjwd
+vfarmltinsriqxpu
+oanqfyqirkraesfq
+xilodxfuxphuiiii
+yukhnchvjkfwcbiq
+bdaibcbzeuxqplop
+ivegnnpbiyxqsion
+ybahkbzpditgwdgt
+dmebdomwabxgtctu
+ibtvimgfaeonknoh
+jsqraroxudetmfyw
+dqdbcwtpintfcvuz
+tiyphjunlxddenpj
+fgqwjgntxagidhah
+nwenhxmakxqkeehg
+zdoheaxqpcnlhnen
+tfetfqojqcdzlpbm
+qpnxkuldeiituggg
+xwttlbdwxohahwar
+hjkwzadmtrkegzye
+koksqrqcfwcaxeof
+wulwmrptktliyxeq
+gyufbedqhhyqgqzj
+txpunzodohikzlmj
+jloqfuejfkemcrvu
+amnflshcheuddqtc
+pdvcsduggcogbiia
+yrioavgfmeafjpcz
+uyhbtmbutozzqfvq
+mwhgfwsgyuwcdzik
+auqylgxhmullxpaa
+lgelzivplaeoivzh
+uyvcepielfcmswoa
+qhirixgwkkccuzlp
+zoonniyosmkeejfg
+iayfetpixkedyana
+ictqeyzyqswdskiy
+ejsgqteafvmorwxe
+lhaiqrlqqwfbrqdx
+ydjyboqwhfpqfydc
+dwhttezyanrnbybv
+edgzkqeqkyojowvr
+rmjfdwsqamjqehdq
+ozminkgnkwqctrxz
+bztjhxpjthchhfcd
+vrtioawyxkivrpiq
+dpbcsznkpkaaclyy
+vpoypksymdwttpvz
+hhdlruwclartkyap
+bqkrcbrksbzcggbo
+jerbbbnxlwfvlaiw
+dwkasufidwjrjfbf
+kkfxtjhbnmqbmfwf
+vmnfziwqxmioukmj
+rqxvcultipkecdtu
+fhmfdibhtjzkiqsd
+hdpjbuzzbyafqrpd
+emszboysjuvwwvts
+msyigmwcuybfiooq
+druyksfnbluvnwoh
+fvgstvynnfbvxhsx
+bmzalvducnqtuune
+lzwkzfzttsvpllei
+olmplpvjamynfyfd
+padcwfkhystsvyfb
+wjhbvxkwtbfqdilb
+hruaqjwphonnterf
+bufjobjtvxtzjpmj
+oiedrjvmlbtwyyuy
+sgiemafwfztwsyju
+nsoqqfudrtwszyqf
+vonbxquiiwxnazyl
+yvnmjxtptujwqudn
+rrnybqhvrcgwvrkq
+taktoxzgotzxntfu
+quffzywzpxyaepxa
+rfvjebfiddcfgmwv
+iaeozntougqwnzoh
+scdqyrhoqmljhoil
+bfmqticltmfhxwld
+brbuktbyqlyfpsdl
+oidnyhjkeqenjlhd
+kujsaiqojopvrygg
+vebzobmdbzvjnjtk
+uunoygzqjopwgmbg
+piljqxgicjzgifso
+ikgptwcjzywswqnw
+pujqsixoisvhdvwi
+trtuxbgigogfsbbk
+mplstsqclhhdyaqk
+gzcwflvmstogdpvo
+tfjywbkmimyyqcjd
+gijutvhruqcsiznq
+ibxkhjvzzxgavkha
+btnxeqvznkxjsgmq
+tjgofgauxaelmjoq
+sokshvyhlkxerjrv
+ltogbivktqmtezta
+uduwytzvqvfluyuf
+msuckpthtgzhdxan
+fqmcglidvhvpirzr
+gwztkqpcwnutvfga
+bsjfgsrntdhlpqbx
+xloczbqybxmiopwt
+orvevzyjliomkkgu
+mzjbhmfjjvaziget
+tlsdxuhwdmghdyjb
+atoecyjhwmznaewi
+pyxpyvvipbqibiox
+ajbfmpqqobfsmesj
+siknbzefjblnohgd
+eqfhgewbblwdfkmc
+opylbscrotckkrbk
+lbwxbofgjkzdxkle
+ceixfjstaptdomvm
+hnkrqxifjmmjktie
+aqykzeuzvvetoygd
+fouahjimfcisxima
+prkzhutbqsyrhjzx
+qqwliakathnsbzne
+sayhgqtlcqqidqhj
+ygduolbysehdudra
+zricvxhdzznuxuce
+ucvzakslykpgsixd
+udirhgcttmyspgsb
+yuwzppjzfsjhhdzi
+gtqergjiuwookwre
+xvxexbjyjkxovvwf
+mlpaqhnnkqxrmwmm
+ezuqbrjozwuqafhb
+mcarusdthcbsonoq
+weeguqeheeiigrue
+pngtfugozxofaqxv
+copphvbjcmfspenv
+jiyahihykjjkdaya
+gdqnmesvptuyrfwp
+vbdscfywqmfxbohh
+crtrfuxyjypzubrg
+seihvevtxywxhflp
+fvvpmgttnapklwou
+qmqaqsajmqwhetpk
+zetxvrgjmblxvakr
+kpvwblrizaabmnhz
+mwpvvzaaicntrkcp
+clqyjiegtdsswqfm
+ymrcnqgcpldgfwtm
+nzyqpdenetncgnwq
+cmkzevgacnmdkqro
+kzfdsnamjqbeirhi
+kpxrvgvvxapqlued
+rzskbnfobevzrtqu
+vjoahbfwtydugzap
+ykbbldkoijlvicbl
+mfdmroiztsgjlasb
+quoigfyxwtwprmdr
+ekxjqafwudgwfqjm
+obtvyjkiycxfcdpb
+lhoihfnbuqelthof
+eydwzitgxryktddt
+rxsihfybacnpoyny
+bsncccxlplqgygtw
+rvmlaudsifnzhcqh
+huxwsyjyebckcsnn
+gtuqzyihwhqvjtes
+zreeyomtngvztveq
+nwddzjingsarhkxb
+nuqxqtctpoldrlsh
+wkvnrwqgjooovhpf
+kwgueyiyffudtbyg
+tpkzapnjxefqnmew
+ludwccvkihagvxal
+lfdtzhfadvabghna
+njqmlsnrkcfhtvbb
+cajzbqleghhnlgap
+vmitdcozzvqvzatp
+eelzefwqwjiywbcz
+uyztcuptfqvymjpi
+aorhnrpkjqqtgnfo
+lfrxfdrduoeqmwwp
+vszpjvbctblplinh
+zexhadgpqfifcqrz
+ueirfnshekpemqua
+qfremlntihbwabtb
+nwznunammfexltjc
+zkyieokaaogjehwt
+vlrxgkpclzeslqkq
+xrqrwfsuacywczhs
+olghlnfjdiwgdbqc
+difnlxnedpqcsrdf
+dgpuhiisybjpidsj
+vlwmwrikmitmoxbt
+sazpcmcnviynoktm
+pratafauetiknhln
+ilgteekhzwlsfwcn
+ywvwhrwhkaubvkbl
+qlaxivzwxyhvrxcf
+hbtlwjdriizqvjfb
+nrmsononytuwslsa
+mpxqgdthpoipyhjc
+mcdiwmiqeidwcglk
+vfbaeavmjjemfrmo
+qzcbzmisnynzibrc
+shzmpgxhehhcejhb
+wirtjadsqzydtyxd
+qjlrnjfokkqvnpue
+dxawdvjntlbxtuqc
+wttfmnrievfestog
+eamjfvsjhvzzaobg
+pbvfcwzjgxahlrag
+omvmjkqqnobvnzkn
+lcwmeibxhhlxnkzv
+uiaeroqfbvlazegs
+twniyldyuonfyzqw
+wgjkmsbwgfotdabi
+hnomamxoxvrzvtew
+ycrcfavikkrxxfgw
+isieyodknagzhaxy
+mgzdqwikzullzyco
+mumezgtxjrrejtrs
+nwmwjcgrqiwgfqel
+wjgxmebfmyjnxyyp
+durpspyljdykvzxf
+zuslbrpooyetgafh
+kuzrhcjwbdouhyme
+wyxuvbciodscbvfm
+kbnpvuqwmxwfqtqe
+zddzercqogdpxmft
+sigrdchxtgavzzjh
+lznjolnorbuddgcs
+ycnqabxlcajagwbt
+bnaudeaexahdgxsj
+rlnykxvoctfwanms
+jngyetkoplrstfzt
+tdpxknwacksotdub
+yutqgssfoptvizgr
+lzmqnxeqjfnsxmsa
+iqpgfsfmukovsdgu
+qywreehbidowtjyz
+iozamtgusdctvnkw
+ielmujhtmynlwcfd
+hzxnhtbnmmejlkyf
+ftbslbzmiqkzebtd
+bcwdqgiiizmohack
+dqhfkzeddjzbdlxu
+mxopokqffisxosci
+vciatxhtuechbylk
+khtkhcvelidjdena
+blatarwzfqcapkdt
+elamngegnczctcck
+xeicefdbwrxhuxuf
+sawvdhjoeahlgcdr
+kmdcimzsfkdfpnir
+axjayzqlosrduajb
+mfhzreuzzumvoggr
+iqlbkbhrkptquldb
+xcvztvlshiefuhgb
+pkvwyqmyoazocrio
+ajsxkdnerbmhyxaj
+tudibgsbnpnizvsi
+cxuiydkgdccrqvkh
+cyztpjesdzmbcpot
+nnazphxpanegwitx
+uphymczbmjalmsct
+yyxiwnlrogyzwqmg
+gmqwnahjvvdyhnfa
+utolskxpuoheugyl
+mseszdhyzoyavepd
+ycqknvbuvcjfgmlc
+sknrxhxbfpvpeorn
+zqxqjetooqcodwml
+sesylkpvbndrdhsy
+fryuxvjnsvnjrxlw
+mfxusewqurscujnu
+mbitdjjtgzchvkfv
+ozwlyxtaalxofovd
+wdqcduaykxbunpie
+rlnhykxiraileysk
+wgoqfrygttlamobg
+kflxzgxvcblkpsbz
+tmkisflhativzhde
+owsdrfgkaamogjzd
+gaupjkvkzavhfnes
+wknkurddcknbdleg
+lltviwincmbtduap
+qwzvspgbcksyzzmb
+ydzzkumecryfjgnk
+jzvmwgjutxoysaam
+icrwpyhxllbardkr
+jdopyntshmvltrve
+afgkigxcuvmdbqou
+mfzzudntmvuyhjzt
+duxhgtwafcgrpihc
+tsnhrkvponudumeb
+sqtvnbeiigdzbjgv
+eczmkqwvnsrracuo
+mhehsgqwiczaiaxv
+kaudmfvifovrimpd
+lupikgivechdbwfr
+mwaaysrndiutuiqx
+aacuiiwgaannunmm
+tjqjbftaqitukwzp
+lrcqyskykbjpaekn
+lirrvofbcqpjzxmr
+jurorvzpplyelfml
+qonbllojmloykjqe
+sllkzqujfnbauuqp
+auexjwsvphvikali
+usuelbssqmbrkxyc
+wyuokkfjexikptvv
+wmfedauwjgbrgytl
+sfwvtlzzebxzmuvw
+rdhqxuechjsjcvaf
+kpavhqkukugocsxu
+ovnjtumxowbxduts
+zgerpjufauptxgat
+pevvnzjfwhjxdoxq
+pmmfwxajgfziszcs
+difmeqvaghuitjhs
+icpwjbzcmlcterwm
+ngqpvhajttxuegyh
+mosjlqswdngwqsmi
+frlvgpxrjolgodlu
+eazwgrpcxjgoszeg
+bbtsthgkjrpkiiyk
+tjonoglufuvsvabe
+xhkbcrofytmbzrtk
+kqftfzdmpbxjynps
+kmeqpocbnikdtfyv
+qjjymgqxhnjwxxhp
+dmgicrhgbngdtmjt
+zdxrhdhbdutlawnc
+afvoekuhdboxghvx
+hiipezngkqcnihty
+bbmqgheidenweeov
+suprgwxgxwfsgjnx
+adeagikyamgqphrj
+zzifqinoeqaorjxg
+adhgppljizpaxzld
+lvxyieypvvuqjiyc
+nljoakatwwwoovzn
+fcrkfxclcacshhmx
+ownnxqtdhqbgthch
+lmfylrcdmdkgpwnj
+hlwjfbvlswbzpbjr
+mkofhdtljdetcyvp
+synyxhifbetzarpo
+agnggugngadrcxoc
+uhttadmdmhidpyjw
+ohfwjfhunalbubpr
+pzkkkkwrlvxiuysn
+kmidbxmyzkjrwjhu
+egtitdydwjxmajnw
+civoeoiuwtwgbqqs
+dfptsguzfinqoslk
+tdfvkreormspprer
+zvnvbrmthatzztwi
+ffkyddccrrfikjde
+hrrmraevdnztiwff
+qaeygykcpbtjwjbr
+purwhitkmrtybslh
+qzziznlswjaussel
+dfcxkvdpqccdqqxj
+tuotforulrrytgyn
+gmtgfofgucjywkev
+wkyoxudvdkbgpwhd
+qbvktvfvipftztnn
+otckgmojziezmojb
+inxhvzbtgkjxflay
+qvxapbiatuudseno
+krpvqosbesnjntut
+oqeukkgjsfuqkjbb
+prcjnyymnqwqksiz
+vuortvjxgckresko
+orqlyobvkuwgathr
+qnpyxlnazyfuijox
+zwlblfkoklqmqzkw
+hmwurwtpwnrcsanl
+jzvxohuakopuzgpf
+sfcpnxrviphhvxmx
+qtwdeadudtqhbely
+dbmkmloasqphnlgj
+olylnjtkxgrubmtk
+nxsdbqjuvwrrdbpq
+wbabpirnpcsmpipw
+hjnkyiuxpqrlvims
+enzpntcjnxdpuqch
+vvvqhlstzcizyimn
+triozhqndbttglhv
+fukvgteitwaagpzx
+uhcvukfbmrvskpen
+tizcyupztftzxdmt
+vtkpnbpdzsaluczz
+wodfoyhoekidxttm
+otqocljrmwfqbxzu
+linfbsnfvixlwykn
+vxsluutrwskslnye
+zbshygtwugixjvsi
+zdcqwxvwytmzhvoo
+wrseozkkcyctrmei
+fblgtvogvkpqzxiy
+opueqnuyngegbtnf
+qxbovietpacqqxok
+zacrdrrkohfygddn
+gbnnvjqmkdupwzpq
+qgrgmsxeotozvcak
+hnppukzvzfmlokid
+dzbheurndscrrtcl
+wbgdkadtszebbrcw
+fdmzppzphhpzyuiz
+bukomunhrjrypohj
+ohodhelegxootqbj
+rsplgzarlrknqjyh
+punjjwpsxnhpzgvu
+djdfahypfjvpvibm
+mlgrqsmhaozatsvy
+xwktrgyuhqiquxgn
+wvfaoolwtkbrisvf
+plttjdmguxjwmeqr
+zlvvbwvlhauyjykw
+cigwkbyjhmepikej
+masmylenrusgtyxs
+hviqzufwyetyznze
+nzqfuhrooswxxhus
+pdbdetaqcrqzzwxf
+oehmvziiqwkzhzib
+icgpyrukiokmytoy
+ooixfvwtiafnwkce
+rvnmgqggpjopkihs
+wywualssrmaqigqk
+pdbvflnwfswsrirl
+jeaezptokkccpbuj
+mbdwjntysntsaaby
+ldlgcawkzcwuxzpz
+lwktbgrzswbsweht
+ecspepmzarzmgpjm
+qmfyvulkmkxjncai
+izftypvwngiukrns
+zgmnyjfeqffbooww
+nyrkhggnprhedows
+yykzzrjmlevgffah
+mavaemfxhlfejfki
+cmegmfjbkvpncqwf
+zxidlodrezztcrij
+fseasudpgvgnysjv
+fupcimjupywzpqzp
+iqhgokavirrcvyys
+wjmkcareucnmfhui
+nftflsqnkgjaexhq
+mgklahzlcbapntgw
+kfbmeavfxtppnrxn
+nuhyvhknlufdynvn
+nviogjxbluwrcoec
+tyozixxxaqiuvoys
+kgwlvmvgtsvxojpr
+moeektyhyonfdhrb
+kahvevmmfsmiiqex
+xcywnqzcdqtvhiwd
+fnievhiyltbvtvem
+jlmndqufirwgtdxd
+muypbfttoeelsnbs
+rypxzbnujitfwkou
+ubmmjbznskildeoj
+ofnmizdeicrmkjxp
+rekvectjbmdnfcib
+yohrojuvdexbctdh
+gwfnfdeibynzjmhz
+jfznhfcqdwlpjull
+scrinzycfhwkmmso
+mskutzossrwoqqsi
+rygoebkzgyzushhr
+jpjqiycflqkexemx
+arbufysjqmgaapnl
+dbjerflevtgweeoj
+snybnnjlmwjvhois
+fszuzplntraprmbj
+mkvaatolvuggikvg
+zpuzuqygoxesnuyc
+wnpxvmxvllxalulm
+eivuuafkvudeouwy
+rvzckdyixetfuehr
+qgmnicdoqhveahyx
+miawwngyymshjmpj
+pvckyoncpqeqkbmx
+llninfenrfjqxurv
+kzbjnlgsqjfuzqtp
+rveqcmxomvpjcwte
+bzotkawzbopkosnx
+ktqvpiribpypaymu
+wvlzkivbukhnvram
+uohntlcoguvjqqdo
+ajlsiksjrcnzepkt
+xsqatbldqcykwusd
+ihbivgzrwpmowkop
+vfayesfojmibkjpb
+uaqbnijtrhvqxjtb
+hhovshsfmvkvymba
+jerwmyxrfeyvxcgg
+hncafjwrlvdcupma
+qyvigggxfylbbrzt
+hiiixcyohmvnkpgk
+mmitpwopgxuftdfu
+iaxderqpceboixoa
+zodfmjhuzhnsqfcb
+sthtcbadrclrazsi
+bkkkkcwegvypbrio
+wmpcofuvzemunlhj
+gqwebiifvqoeynro
+juupusqdsvxcpsgv
+rbhdfhthxelolyse
+kjimpwnjfrqlqhhz
+rcuigrjzarzpjgfq
+htxcejfyzhydinks
+sxucpdxhvqjxxjwf
+omsznfcimbcwaxal
+gufmtdlhgrsvcosb
+bssshaqujtmluerz
+uukotwjkstgwijtr
+kbqkneobbrdogrxk
+ljqopjcjmelgrakz
+rwtfnvnzryujwkfb
+dedjjbrndqnilbeh
+nzinsxnpptzagwlb
+lwqanydfirhnhkxy
+hrjuzfumbvfccxno
+okismsadkbseumnp
+sfkmiaiwlktxqvwa
+hauwpjjwowbunbjj
+nowkofejwvutcnui
+bqzzppwoslaeixro
+urpfgufwbtzenkpj
+xgeszvuqwxeykhef
+yxoldvkyuikwqyeq
+onbbhxrnmohzskgg
+qcikuxakrqeugpoa
+lnudcqbtyzhlpers
+nxduvwfrgzaailgl
+xniuwvxufzxjjrwz
+ljwithcqmgvntjdj
+awkftfagrfzywkhs
+uedtpzxyubeveuek
+bhcqdwidbjkqqhzl
+iyneqjdmlhowwzxx
+kvshzltcrrururty
+zgfpiwajegwezupo
+tkrvyanujjwmyyri
+ercsefuihcmoaiep
+ienjrxpmetinvbos
+jnwfutjbgenlipzq
+bgohjmrptfuamzbz
+rtsyamajrhxbcncw
+tfjdssnmztvbnscs
+bgaychdlmchngqlp
+kfjljiobynhwfkjo
+owtdxzcpqleftbvn
+ltjtimxwstvzwzjj
+wbrvjjjajuombokf
+zblpbpuaqbkvsxye
+gwgdtbpnlhyqspdi
+abipqjihjqfofmkx
+nlqymnuvjpvvgova
+avngotmhodpoufzn
+qmdyivtzitnrjuae
+xfwjmqtqdljuerxi
+csuellnlcyqaaamq
+slqyrcurcyuoxquo
+dcjmxyzbzpohzprl
+uqfnmjwniyqgsowb
+rbmxpqoblyxdocqc
+ebjclrdbqjhladem
+ainnfhxnsgwqnmyo
+eyytjjwhvodtzquf
+iabjgmbbhilrcyyp
+pqfnehkivuelyccc
+xgjbyhfgmtseiimt
+jwxyqhdbjiqqqeyy
+gxsbrncqkmvaryln
+vhjisxjkinaejytk
+seexagcdmaedpcvh
+lvudfgrcpjxzdpvd
+fxtegyrqjzhmqean
+dnoiseraqcoossmc
+nwrhmwwbykvwmgep
+udmzskejvizmtlce
+hbzvqhvudfdlegaa
+cghmlfqejbxewskv
+bntcmjqfwomtbwsb
+qezhowyopjdyhzng
+todzsocdkgfxanbz
+zgjkssrjlwxuhwbk
+eibzljqsieriyrzr
+wamxvzqyycrxotjp
+epzvfkispwqynadu
+dwlpfhtrafrxlyie
+qhgzujhgdruowoug
+girstvkahaemmxvh
+baitcrqmxhazyhbl
+xyanqcchbhkajdmc
+gfvjmmcgfhvgnfdq
+tdfdbslwncbnkzyz
+jojuselkpmnnbcbb
+hatdslkgxtqpmavj
+dvelfeddvgjcyxkj
+gnsofhkfepgwltse
+mdngnobasfpewlno
+qssnbcyjgmkyuoga
+glvcmmjytmprqwvn
+gwrixumjbcdffsdl
+lozravlzvfqtsuiq
+sicaflbqdxbmdlch
+inwfjkyyqbwpmqlq
+cuvszfotxywuzhzi
+igfxyoaacoarlvay
+ucjfhgdmnjvgvuni
+rvvkzjsytqgiposh
+jduinhjjntrmqroz
+yparkxbgsfnueyll
+lyeqqeisxzfsqzuj
+woncskbibjnumydm
+lltucklragtjmxtl
+ubiyvmyhlesfxotj
+uecjseeicldqrqww
+xxlxkbcthufnjbnm
+lhqijovvhlffpxga
+fzdgqpzijitlogjz
+efzzjqvwphomxdpd
+jvgzvuyzobeazssc
+hejfycgxywfjgbfw
+yhjjmvkqfbnbliks
+sffvfyywtlntsdsz
+dwmxqudvxqdenrur
+asnukgppdemxrzaz
+nwqfnumblwvdpphx
+kqsmkkspqvxzuket
+cpnraovljzqiquaz
+qrzgrdlyyzbyykhg
+opoahcbiydyhsmqe
+hjknnfdauidjeydr
+hczdjjlygoezadow
+rtflowzqycimllfv
+sfsrgrerzlnychhq
+bpahuvlblcolpjmj
+albgnjkgmcrlaicl
+pijyqdhfxpaxzdex
+eeymiddvcwkpbpux
+rqwkqoabywgggnln
+vckbollyhgbgmgwh
+ylzlgvnuvpynybkm
+hpmbxtpfosbsjixt
+ocebeihnhvkhjfqz
+tvctyxoujdgwayze
+efvhwxtuhapqxjen
+rusksgefyidldmpo
+nkmtjvddfmhirmzz
+whvtsuadwofzmvrt
+iiwjqvsdxudhdzzk
+gucirgxaxgcassyo
+rmhfasfzexeykwmr
+hynlxcvsbgosjbis
+huregszrcaocueen
+pifezpoolrnbdqtv
+unatnixzvdbqeyox
+xtawlpduxgacchfe
+bdvdbflqfphndduf
+xtdsnjnmzccfptyt
+nkhsdkhqtzqbphhg
+aqcubmfkczlaxiyb
+moziflxpsfubucmv
+srdgnnjtfehiimqx
+pwfalehdfyykrohf
+sysxssmvewyfjrve
+brsemdzosgqvvlxe
+bimbjoshuvflkiat
+hkgjasmljkpkwwku
+sbnmwjvodygobpqc
+bbbqycejueruihhd
+corawswvlvneipyc
+gcyhknmwsczcxedh
+kppakbffdhntmcqp
+ynulzwkfaemkcefp
+pyroowjekeurlbii
+iwksighrswdcnmxf
+glokrdmugreygnsg
+xkmvvumnfzckryop
+aesviofpufygschi
+csloawlirnegsssq
+fkqdqqmlzuxbkzbc
+uzlhzcfenxdfjdzp
+poaaidrktteusvyf
+zrlyfzmjzfvivcfr
+qwjulskbniitgqtx
+gjeszjksbfsuejki
+vczdejdbfixbduaq
+knjdrjthitjxluth
+jweydeginrnicirl
+bottrfgccqhyycsl
+eiquffofoadmbuhk
+lbqfutmzoksscswf
+xfmdvnvfcnzjprba
+uvugkjbkhlaoxmyx
+wadlgtpczgvcaqqv
+inzrszbtossflsxk
+dbzbtashaartczrj
+qbjiqpccefcfkvod
+hluujmokjywotvzy
+thwlliksfztcmwzh
+arahybspdaqdexrq
+nuojrmsgyipdvwyx
+hnajdwjwmzattvst
+sulcgaxezkprjbgu
+rjowuugwdpkjtypw
+oeugzwuhnrgiaqga
+wvxnyymwftfoswij
+pqxklzkjpcqscvde
+tuymjzknntekglqj
+odteewktugcwlhln
+exsptotlfecmgehc
+eeswfcijtvzgrqel
+vjhrkiwmunuiwqau
+zhlixepkeijoemne
+pavfsmwesuvebzdd
+jzovbklnngfdmyws
+nbajyohtzfeoiixz
+ciozmhrsjzrwxvhz
+gwucrxieqbaqfjuv
+uayrxrltnohexawc
+flmrbhwsfbcquffm
+gjyabmngkitawlxc
+rwwtggvaygfbovhg
+xquiegaisynictjq
+oudzwuhexrwwdbyy
+lengxmguyrwhrebb
+uklxpglldbgqsjls
+dbmvlfeyguydfsxq
+zspdwdqcrmtmdtsc
+mqfnzwbfqlauvrgc
+amcrkzptgacywvhv
+ndxmskrwrqysrndf
+mwjyhsufeqhwisju
+srlrukoaenyevykt
+tnpjtpwawrxbikct
+geczalxmgxejulcv
+tvkcbqdhmuwcxqci
+tiovluvwezwwgaox
+zrjhtbgajkjqzmfo
+vcrywduwsklepirs
+lofequdigsszuioy
+wxsdzomkjqymlzat
+iabaczqtrfbmypuy
+ibdlmudbajikcncr
+rqcvkzsbwmavdwnv
+ypxoyjelhllhbeog
+fdnszbkezyjbttbg
+uxnhrldastpdjkdz
+xfrjbehtxnlyzcka
+omjyfhbibqwgcpbv
+eguucnoxaoprszmp
+xfpypldgcmcllyzz
+aypnmgqjxjqceelv
+mgzharymejlafvgf
+tzowgwsubbaigdok
+ilsehjqpcjwmylxc
+pfmouwntfhfnmrwk
+csgokybgdqwnduwp
+eaxwvxvvwbrovypz
+nmluqvobbbmdiwwb
+lnkminvfjjzqbmio
+mjiiqzycqdhfietz
+towlrzriicyraevq
+obiloewdvbrsfwjo
+lmeooaajlthsfltw
+ichygipzpykkesrw
+gfysloxmqdsfskvt
+saqzntehjldvwtsx
+pqddoemaufpfcaew
+mjrxvbvwcreaybwe
+ngfbrwfqnxqosoai
+nesyewxreiqvhald
+kqhqdlquywotcyfy
+liliptyoqujensfi
+nsahsaxvaepzneqq
+zaickulfjajhctye
+gxjzahtgbgbabtht
+koxbuopaqhlsyhrp
+jhzejdjidqqtjnwe
+dekrkdvprfqpcqki
+linwlombdqtdeyop
+dvckqqbnigdcmwmx
+yaxygbjpzkvnnebv
+rlzkdkgaagmcpxah
+cfzuyxivtknirqvt
+obivkajhsjnrxxhn
+lmjhayymgpseuynn
+bbjyewkwadaipyju
+lmzyhwomfypoftuu
+gtzhqlgltvatxack
+jfflcfaqqkrrltgq
+txoummmnzfrlrmcg
+ohemsbfuqqpucups
+imsfvowcbieotlok
+tcnsnccdszxfcyde
+qkcdtkwuaquajazz
+arcfnhmdjezdbqku
+srnocgyqrlcvlhkb
+mppbzvfmcdirbyfw
+xiuarktilpldwgwd
+ypufwmhrvzqmexpc
+itpdnsfkwgrdujmj
+cmpxnodtsswkyxkr
+wayyxtjklfrmvbfp
+mfaxphcnjczhbbwy
+sjxhgwdnqcofbdra
+pnxmujuylqccjvjm
+ivamtjbvairwjqwl
+deijtmzgpfxrclss
+bzkqcaqagsynlaer
+tycefobvxcvwaulz
+ctbhnywezxkdsswf
+urrxxebxrthtjvib
+fpfelcigwqwdjucv
+ngfcyyqpqulwcphb
+rltkzsiipkpzlgpw
+qfdsymzwhqqdkykc
+balrhhxipoqzmihj
+rnwalxgigswxomga
+ghqnxeogckshphgr
+lyyaentdizaumnla
+exriodwfzosbeoib
+speswfggibijfejk
+yxmxgfhvmshqszrq
+hcqhngvahzgawjga
+qmhlsrfpesmeksur
+eviafjejygakodla
+kvcfeiqhynqadbzv
+fusvyhowslfzqttg
+girqmvwmcvntrwau
+yuavizroykfkdekz
+jmcwohvmzvowrhxf
+kzimlcpavapynfue
+wjudcdtrewfabppq
+yqpteuxqgbmqfgxh
+xdgiszbuhdognniu
+jsguxfwhpftlcjoh
+whakkvspssgjzxre
+ggvnvjurlyhhijgm
+krvbhjybnpemeptr
+pqedgfojyjybfbzr
+jzhcrsgmnkwwtpdo
+yyscxoxwofslncmp
+gzjhnxytmyntzths
+iteigbnqbtpvqumi
+zjevfzusnjukqpfw
+xippcyhkfuounxqk
+mcnhrcfonfdgpkyh
+pinkcyuhjkexbmzj
+lotxrswlxbxlxufs
+fmqajrtoabpckbnu
+wfkwsgmcffdgaqxg
+qfrsiwnohoyfbidr
+czfqbsbmiuyusaqs
+ieknnjeecucghpoo
+cevdgqnugupvmsge
+gjkajcyjnxdrtuvr
+udzhrargnujxiclq
+zqqrhhmjwermjssg
+ggdivtmgoqajydzz
+wnpfsgtxowkjiivl
+afbhqawjbotxnqpd
+xjpkifkhfjeqifdn
+oyfggzsstfhvticp
+kercaetahymeawxy
+khphblhcgmbupmzt
+iggoqtqpvaebtiol
+ofknifysuasshoya
+qxuewroccsbogrbv
+apsbnbkiopopytgu
+zyahfroovfjlythh
+bxhjwfgeuxlviydq
+uvbhdtvaypasaswa
+qamcjzrmesqgqdiz
+hjnjyzrxntiycyel
+wkcrwqwniczwdxgq
+hibxlvkqakusswkx
+mzjyuenepwdgrkty
+tvywsoqslfsulses
+jqwcwuuisrclircv
+xanwaoebfrzhurct
+ykriratovsvxxasf
+qyebvtqqxbjuuwuo
+telrvlwvriylnder
+acksrrptgnhkeiaa
+yemwfjhiqlzsvdxf
+banrornfkcymmkcc
+ytbhxvaeiigjpcgm
+crepyazgxquposkn
+xlqwdrytzwnxzwzv
+xtrbfbwopxscftps
+kwbytzukgseeyjla
+qtfdvavvjogybxjg
+ytbmvmrcxwfkgvzw
+nbscbdskdeocnfzr
+sqquwjbdxsxhcseg
+ewqxhigqcgszfsuw
+cvkyfcyfmubzwsee
+dcoawetekigxgygd
+ohgqnqhfimyuqhvi
+otisopzzpvnhctte
+bauieohjejamzien
+ewnnopzkujbvhwce
+aeyqlskpaehagdiv
+pncudvivwnnqspxy
+ytugesilgveokxcg
+zoidxeelqdjesxpr
+ducjccsuaygfchzj
+smhgllqqqcjfubfc
+nlbyyywergronmir
+prdawpbjhrzsbsvj
+nmgzhnjhlpcplmui
+eflaogtjghdjmxxz
+qolvpngucbkprrdc
+ixywxcienveltgho
+mwnpqtocagenkxut
+iskrfbwxonkguywx
+ouhtbvcaczqzmpua
+srewprgddfgmdbao
+dyufrltacelchlvu
+czmzcbrkecixuwzz
+dtbeojcztzauofuk
+prrgoehpqhngfgmw
+baolzvfrrevxsyke
+zqadgxshwiarkzwh
+vsackherluvurqqj
+surbpxdulvcvgjbd
+wqxytarcxzgxhvtx
+vbcubqvejcfsgrac
+zqnjfeapshjowzja
+hekvbhtainkvbynx
+knnugxoktxpvoxnh
+knoaalcefpgtvlwm
+qoakaunowmsuvkus
+ypkvlzcduzlezqcb
+ujhcagawtyepyogh
+wsilcrxncnffaxjf
+gbbycjuscquaycrk
+aduojapeaqwivnly
+ceafyxrakviagcjy
+nntajnghicgnrlst
+vdodpeherjmmvbje
+wyyhrnegblwvdobn
+xlfurpghkpbzhhif
+xyppnjiljvirmqjo
+kglzqahipnddanpi
+omjateouxikwxowr
+ocifnoopfglmndcx
+emudcukfbadyijev
+ooktviixetfddfmh
+wtvrhloyjewdeycg
+cgjncqykgutfjhvb
+nkwvpswppeffmwad
+hqbcmfhzkxmnrivg
+mdskbvzguxvieilr
+anjcvqpavhdloaqh
+erksespdevjylenq
+fadxwbmisazyegup
+iyuiffjmcaahowhj
+ygkdezmynmltodbv
+fytneukxqkjattvh
+woerxfadbfrvdcnz
+iwsljvkyfastccoa
+movylhjranlorofe
+drdmicdaiwukemep
+knfgtsmuhfcvvshg
+ibstpbevqmdlhajn
+tstwsswswrxlzrqs
+estyydmzothggudf
+jezogwvymvikszwa
+izmqcwdyggibliet
+nzpxbegurwnwrnca
+kzkojelnvkwfublh
+xqcssgozuxfqtiwi
+tcdoigumjrgvczfv
+ikcjyubjmylkwlwq
+kqfivwystpqzvhan
+bzukgvyoqewniivj
+iduapzclhhyfladn
+fbpyzxdfmkrtfaeg
+yzsmlbnftftgwadz
diff --git a/2015/rs/code/five/src/main.rs b/2015/rs/code/five/src/main.rs
new file mode 100644
index 0000000..eeafd42
--- /dev/null
+++ b/2015/rs/code/five/src/main.rs
@@ -0,0 +1,52 @@
+static INPUT: &'static str = include_str!("input.txt");
+
+fn main() {
+  let valueified = INPUT.split('\n').filter(|s| !s.is_empty());
+
+  let nice_count = valueified.clone().filter(|s| {
+    let mut s2 = s.chars();
+    let mut last_char = s2.next().unwrap();
+
+    let mut double_flag = false;
+    let mut abcdpqxy_flag = false;
+    for c in s2 {
+      if c == last_char { double_flag = true; }
+      if [('a','b'),('c','d'),('p','q'),('x','y')].contains(&(last_char, c)) { abcdpqxy_flag = true; }
+      if double_flag && abcdpqxy_flag { break; }
+
+      last_char = c;
+    }
+
+    s.chars().filter(|c| "aeiou".contains(*c)).count() >= 3 && double_flag && !abcdpqxy_flag
+  }).count();
+  println!("Nice word count: {nice_count}");
+
+  let nice_count = valueified.filter(|s| {
+    let mut s = s.chars();
+    let mut llc = s.next().unwrap();
+    let mut lc = s.next().unwrap();
+
+    let mut dupeslist = Vec::with_capacity(32);
+    dupeslist.push((llc, lc));
+    let mut pushed = true;
+
+    let mut flag1 = false;
+    let mut flag2 = false;
+
+    for c in s {
+      if !flag1 && (lc != c || (lc == c && (llc != lc || !pushed))) && dupeslist.contains(&(lc, c)) { flag1 = true; }
+      if !flag1 && !dupeslist.contains(&(lc, c)) { dupeslist.push((lc, c)); pushed = true; } else { pushed = false; }
+
+      if c == llc { flag2 = true; }
+
+      if flag1 && flag2 { break; }
+
+      llc = lc;
+      lc = c;
+    }
+
+    flag1 && flag2
+  }).count();
+
+  println!("Nice word(v2) count: {nice_count}");
+}
diff --git a/2015/rs/code/four/Cargo.toml b/2015/rs/code/four/Cargo.toml
new file mode 100644
index 0000000..ab76142
--- /dev/null
+++ b/2015/rs/code/four/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "four"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+md-5 = "0.10.6"
diff --git a/2015/rs/code/four/src/main.rs b/2015/rs/code/four/src/main.rs
new file mode 100644
index 0000000..177ddc5
--- /dev/null
+++ b/2015/rs/code/four/src/main.rs
@@ -0,0 +1,46 @@
+use md5::{Digest, Md5};
+use std::fmt::Write;
+use std::io::Write as WriteI;
+
+static INPUT: &'static [u8] = b"yzbqklnj";
+
+fn main() {
+  let mut buf = Vec::with_capacity(INPUT.len() + 10);
+  buf.extend_from_slice(INPUT);
+
+  for i in 0.. {
+    if i % 1000 == 0 { print!("{i}\r"); std::io::stdout().flush(); }
+
+    let mut hasher = Md5::new();
+    write!(&mut buf, "{i}");
+    hasher.update(buf.as_slice());
+    let hash = hasher.finalize();
+    if hash.starts_with(&[0, 0]) && hash[2] < 16 {
+      let mut hexhash = String::with_capacity(32);
+      for digit in hash {
+        write!(&mut hexhash, "{digit:02x}");
+      }
+      println!("Got 5 digit hash: {hexhash}, at {i}");
+      break;
+    }
+    buf.truncate(INPUT.len());
+  }
+
+  for i in 0.. {
+    if i % 1000 == 0 { print!("{i}\r"); std::io::stdout().flush(); }
+
+    let mut hasher = Md5::new();
+    write!(&mut buf, "{i}");
+    hasher.update(buf.as_slice());
+    let hash = hasher.finalize();
+    if hash.starts_with(&[0, 0, 0]) {
+      let mut hexhash = String::with_capacity(32);
+      for digit in hash {
+        write!(&mut hexhash, "{digit:02x}");
+      }
+      println!("Got 6 digit hash: {hexhash}, at {i}");
+      break;
+    }
+    buf.truncate(INPUT.len());
+  }
+}
diff --git a/2015/rs/code/nine/Cargo.toml b/2015/rs/code/nine/Cargo.toml
new file mode 100644
index 0000000..4782be7
--- /dev/null
+++ b/2015/rs/code/nine/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "nine"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2015/rs/code/nine/src/input.txt b/2015/rs/code/nine/src/input.txt
new file mode 100644
index 0000000..97a6b63
--- /dev/null
+++ b/2015/rs/code/nine/src/input.txt
@@ -0,0 +1,28 @@
+Faerun to Tristram = 65
+Faerun to Tambi = 129
+Faerun to Norrath = 144
+Faerun to Snowdin = 71
+Faerun to Straylight = 137
+Faerun to AlphaCentauri = 3
+Faerun to Arbre = 149
+Tristram to Tambi = 63
+Tristram to Norrath = 4
+Tristram to Snowdin = 105
+Tristram to Straylight = 125
+Tristram to AlphaCentauri = 55
+Tristram to Arbre = 14
+Tambi to Norrath = 68
+Tambi to Snowdin = 52
+Tambi to Straylight = 65
+Tambi to AlphaCentauri = 22
+Tambi to Arbre = 143
+Norrath to Snowdin = 8
+Norrath to Straylight = 23
+Norrath to AlphaCentauri = 136
+Norrath to Arbre = 115
+Snowdin to Straylight = 101
+Snowdin to AlphaCentauri = 84
+Snowdin to Arbre = 96
+Straylight to AlphaCentauri = 107
+Straylight to Arbre = 14
+AlphaCentauri to Arbre = 46
diff --git a/2015/rs/code/nine/src/main.rs b/2015/rs/code/nine/src/main.rs
new file mode 100644
index 0000000..46116e0
--- /dev/null
+++ b/2015/rs/code/nine/src/main.rs
@@ -0,0 +1,53 @@
+#![feature(iter_next_chunk)]
+
+use std::collections::{HashSet, HashMap};
+use std::io::Write;
+
+static INPUT: &'static str = include_str!("input.txt");
+
+fn main() {
+  let valueified = INPUT.split('\n').filter(|s| !s.is_empty())
+    .flat_map(|s| {
+      let [rhs, dist] = s.split(" = ").next_chunk::<2>().unwrap();
+      let [from, to] = rhs.split(" to ").next_chunk::<2>().unwrap();
+      let dist = dist.parse::<usize>().unwrap();
+      [(from, to, dist), (to, from, dist)]
+    });
+
+  let paths: HashMap<&'static str, Vec<(&'static str, usize)>> = valueified
+    .map(|(a,b,c)| (a, (b, c)))
+    .fold(HashMap::new(), |mut map, (k, v)| {map.entry(k).or_default().push(v); map});
+  let mut path = Vec::new();
+  let mut bestpath = Vec::new();
+  let mut bestdist = usize::MAX;
+  let mut worstpath = Vec::new();
+  let mut worstdist = 0;
+  for start in paths.keys() {
+    path.clear();
+    path.push(*start);
+    walk_steps(&mut path, 0, &mut bestpath, &mut bestdist, &mut worstpath, &mut worstdist, &paths);
+  }
+  println!("Best route: {} with dist = {bestdist}", bestpath.join(" => "));
+  println!("Worst route: {} with dist = {worstdist}", worstpath.join(" => "));
+}
+
+fn walk_steps(path: &mut Vec<&'static str>, dist: usize, bestpath: &mut Vec<&'static str>, bestdist: &mut usize, worstpath: &mut Vec<&'static str>, worstdist: &mut usize, steps: &HashMap<&'static str, Vec<(&'static str, usize)>>) {
+  if path.len() != steps.len() {
+    let prev = path.last().unwrap();
+    for (step, stepdist) in &steps[prev] {
+      if path.contains(step) { continue; }
+      path.push(step);
+      walk_steps(path, dist + stepdist, bestpath, bestdist, worstpath, worstdist, steps);
+      path.pop();
+    }
+  } else {
+    if dist < *bestdist {
+      *bestpath = path.clone();
+      *bestdist = dist;
+    }
+    else if dist > *worstdist {
+      *worstpath = path.clone();
+      *worstdist = dist;
+    }
+  }
+}
diff --git a/2015/rs/code/one/Cargo.toml b/2015/rs/code/one/Cargo.toml
new file mode 100644
index 0000000..dcf4350
--- /dev/null
+++ b/2015/rs/code/one/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "one"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2015/rs/code/one/src/input.txt b/2015/rs/code/one/src/input.txt
new file mode 100644
index 0000000..2d4ad8f
--- /dev/null
+++ b/2015/rs/code/one/src/input.txt
@@ -0,0 +1 @@
+()(((()))(()()()((((()(((())(()(()((((((()(()(((())))((()(((()))((())(()((()()()()(((())(((((((())))()()(()(()(())(((((()()()((())(((((()()))))()(())(((())(())((((((())())))(()())))()))))()())()())((()()((()()()()(()((((((((()()())((()()(((((()(((())((())(()))()((((()((((((((())()((()())(())((()))())((((()())(((((((((((()()(((((()(()))())(((()(()))())((()(()())())())(()(((())(())())()()(()(()((()))((()))))((((()(((()))))((((()(()(()())())()(((()((((())((((()(((()()(())()()()())((()((((((()((()()))()((()))()(()()((())))(((()(((()))((()((()(()))(((()()(()(()()()))))()()(((()(((())())))))((()(((())()(()(())((()())))((((())))(()(()(()())()((()())))(((()((()(())()()((()((())(()()((())(())()))()))((()(())()))())(((((((()(()()(()(())())))))))(()((((((())((((())((())())(()()))))()(())(()())()())((())(()))))(()))(()((()))()(()((((((()()()()((((((((()(()(())((()()(()()))(())()())()((())))()))()())(((()))(())()(())()))()((()((()(()()())(())()()()((())())))((()()(()()((()(())()()())(((()(()()))))(())))(()(()())()))()()))))))()))))((((((())))())))(()(())())(()())))))(()))()))))))()((()))))()))))(()(()((()())())(()()))))(((())()))())())())(((()(()()))(())()(())(())((((((()()))))((()(()))))))(()))())(((()()(()))()())()()()())))))))))))))(())(()))(()))((()(())(()())(())())(()())(())()()(()())))()()()))(())())()))())())(())((())))))))(())))(())))))()))))((())(()(((()))))(()))()((()(())))(()())(((((()))()())()()))))()))))()))())(()(()()()))()))))))((()))))))))))()((()))((()(())((())()()(()()))()(()))))()()(()))()))(((())))(())()((())(())(()())()())())))))))())))()((())))()))(()))()()))(((((((()))())(()()))(()()(()))()(()((()())()))))))(((()()()())))(())()))()())(()()))()()))))))))(())))()))()()))))))()))()())))()(())(())))))()(())()()(()()))))())((()))))()))))(()(((((()))))))))())))())()(())()()))))(())))())()()())()()())()(()))))()))()))))))))())))((()))()))()))())))()())()()())))())))(()((())()((()))())))))())()(())((())))))))))))())()())(())())())(()))(()))()))())(()(())())()())()()(()))))(()(())))))))(())))())(())))))))())()()(())())())))(())))))()))()(()())()(()))())())))))()()(()))()))))())))))))))()))))()))))))())()())()()))))()())))())))))))))))()()))))()()(((()))()()(())()))))((()))))(()))(())())))(())()))))))(()))()))))(())())))))()))(()())))))))))))))())))))))))()((()())(()())))))))((()))))(())(())))()(()())())))())())(()()()())))()))))))())))))())()()())))))))))))()()(()))))()())()))((()())(()))))()(()))))))))))()())())(((())(()))))())()))()))()))))))()))))))(()))))()))))()(())))(())))(()))())()()(()()))()))(()()))))))))()))(()))())(()()(()(()())()()))()))))))))(())))))((()()(()))())())))))()))())(()())()()))())))()(()()()()))((())())))())()(()()))()))))))))(()))(())))()))))(()(()())(()))))()())())()))()()))())))))))))))())()))))))()))))))))())))))()))))())(()())))(())()))())())))))()()(()()())(()())))()()))(((()))(()()()))))()))))()))))((())))()((((((()()))))))())))))))))))(((()))))))))))))(())())))))())(()))))))(()))((()))())))()(()((()))()))()))))))))))())()))()(()()))))())))())(())()(()))()))())(()))()))))(()()))()()(())))))()))(())(()(()()))(()()())))))(((()))))))()))))))))))))(())(()))))()())())()()((()()))())))))(()))))())))))))()()()))))))))())))()(((()()))(())))))(((())())))))((()))()(()))(()))))(()())))(()))())))))()))))(())(())))()((()))(())())))()()))()))))))))()))(()()()(()()()(()))())(())()())(((()))(())))))))))(((()())))()()))))))))()(())(()))()((((())(())(()())))()))(((())()()()))((()))(()))())())))())))(()))())()())())(()(())())()()()(())))())(())))(())))(())()))()))(()((()))))))))())(()))))))())(()()))()()))()(()(()())))()()(()((()((((((()))(())))()()()))())()))((()()(()))())((()(()(()))(()()))))()())))()))()())))))))()()((()())(())))()))(()))(())(()))())(()(())))()()))))))(((()(((()()))()(()(())())((()()))()))()))()))()(()()()(()))((()())()(())))()()))(((())()()())(())()((()()()()(()(())(()()))()(((((()())))((())))))(()()()))))(((()(())))()))((()((()(())()(()((())))((()())()(()))(((()())()()(()))(())(((()((()())()((())()())(((()()))((()((())(()))(()())(()()()))((()))(())(()((()()())((()))(())))(())(())(())))(()())))(((((()(()(((((()())((((()(()())(())(()()(((())((()(((()()(((()()((((((())))())(()((((((()(()))()))()()((()((()))))()(()()(()((()()))))))(((((()(((((())()()()(())())))))))()))((()()(())))(())(()()()())))))(()((((())))))))()()(((()(()(()(()(()())()()()(((((((((()()())()(()))((()()()()()(((((((()())()((())()))((((((()(()(()(()())(((()(((((((()(((())(((((((((())(())())()))((()(()))(((()()())(())(()(()()(((()(())()))())))(())((((((())(()()())()()(((()(((())(()(((())(((((((()(((((((((()))(())(()(()(()))))((()))()(())())())((()(()((()()))((()()((()(())(())(()((())(((())(((()()()((((((()()(())((((())()))))(())((()(()((())))(((((()(()()())())((())())))((())((()((()()((((((())(((()()(()())())(()(()))(()(()))())())()(((((((()(((()(())()()((())((()(()()((()(()()(((((((((((())((())((((((())((()((((()(()((((()(((((((())()((()))))())()((()((((()(()(((()((()())))(())())(((()(((())((((((()(((((((((()()(())))(()(((((()((((()())))((()((()((()(()()(((())((((((((((((()(((())(()(((((()))(()()(()()()()()()((())(((((((())(((((())))))())()(()()(()(()(((()()(((((())(()((()((()(((()()((()((((())()))()((((())(())))()())(((())(())(()()((()(((()()((((((((((()()(()())())(((((((((())((((()))()()((((())(()((((()(((())())(((((((((((()((((())))(())(()(((()(((()((())(((((()((()()(()(()()((((((()((((()((()(()((()(()((((((()))))()()(((((()((()(()(())()))(())(((((((()((((()())(()((()((()(()))())))(())((()))))(((((((()()()())(()))(()()((()())()((()((()()()(()(()()))(()())(())(((((()(((((((((((()((()(((()(((((((()()((((((()(((((()(()((()(((((())((((((()))((((())((()()((())(((())()(((((()()(((((()((()(()(((((((()(((((()((()((()((())(())((())(()))()()))(()()(()(()()(((((((()(((()(((())()(((((()((((((()())((((())()((()((()(()()())(()))((((()()((((((()((()(()(()((((()((()((())((((((()(()(())((((((()((((((((((()((())()))()(()(()(((((()()()))((())))()(()((((((((((((((()(((()((((()((())((()((()(((()()(()(((()((())(()()())))()(()(()(((((()()(()(()((((()(((((())()(()(()))(((((()()(((()()(())((((((((((((((())((())(((((((((((())()()()(())()(()(()(((((((((())(((()))(()()())(()((((()(())(((((()())(())((((((((())()((((()((((((())(()((()(())(((()((((()))(((((((((()()))((((()(())()()()(())(()((())((()()))()(((())(((((())((((((()()))(((((((((()((((((())))(((((((()((()(()(())))())(()(()))()(((((()())(()))()(()(())(((()))))())()())))(((((()))())()((()(()))))((()()()((((((()))()()((((((((())((()(()(((()(()((())((()())(()((((())(()(((()()()(()(()()))())())((((((((((())())((()))()((())(())(())))())()(()()(())))())(()))(((()(()()(((()(((())))()(((()(())()((((((())()))()))()((((((()(()(((((()())))()))))())()()(((()(((((())((()()(()((()((()(()(()(())))(()()()()((()(())(((()((()))((((()))())(())))())(()))()()()())()))(((()()())()((())))(())(()()()()(()())((()(()()((((())))((()((()(())((()(()((())()(()()(((()())()()())((()))((())(((()()(())))()()))(((()((())()(((((()())(())((())()())())((((((()(()(((((()))(()(
diff --git a/2015/rs/code/one/src/main.rs b/2015/rs/code/one/src/main.rs
new file mode 100644
index 0000000..d9e16e1
--- /dev/null
+++ b/2015/rs/code/one/src/main.rs
@@ -0,0 +1,11 @@
+static INPUT: &'static str = include_str!("input.txt");
+
+fn main() {
+  let valueified = INPUT.chars().map(|c| match c { '(' => 1, ')' => -1, _ => 0});
+  let floor_number: i32 = valueified.clone().sum();
+  println!("Floor number: {floor_number}");
+
+  let mut floor = 0;
+  let basement_index = valueified.take_while(|i| {floor += i; floor >= 0}).count() + 1;
+  println!("First character in basement: {basement_index}");
+}
diff --git a/2015/rs/code/seven/Cargo.toml b/2015/rs/code/seven/Cargo.toml
new file mode 100644
index 0000000..152108e
--- /dev/null
+++ b/2015/rs/code/seven/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "seven"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2015/rs/code/seven/src/input.txt b/2015/rs/code/seven/src/input.txt
new file mode 100644
index 0000000..56cae92
--- /dev/null
+++ b/2015/rs/code/seven/src/input.txt
@@ -0,0 +1,339 @@
+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
diff --git a/2015/rs/code/seven/src/main.rs b/2015/rs/code/seven/src/main.rs
new file mode 100644
index 0000000..ec2c316
--- /dev/null
+++ b/2015/rs/code/seven/src/main.rs
@@ -0,0 +1,94 @@
+use std::collections::HashMap;
+
+static INPUT: &[u8] = include_bytes!("input.txt");
+
+#[derive(Debug, Copy, Clone)]
+enum WireOrLiteral {
+  Wire([u8; 2]),
+  Literal(u16)
+}
+
+#[derive(Debug, Copy, Clone)]
+enum Connection {
+  Direct(WireOrLiteral),
+  Not   (WireOrLiteral),
+  And   (WireOrLiteral, WireOrLiteral),
+  Or    (WireOrLiteral, WireOrLiteral),
+  LShift(WireOrLiteral, WireOrLiteral),
+  RShift(WireOrLiteral, WireOrLiteral),
+}
+
+#[derive(Debug, Copy, Clone)]
+enum Cache {
+  Cached(u16),
+  Uncached(Connection)
+}
+
+fn main() {
+  let valueified = INPUT
+    .split(|b| *b == b'\n').filter(|b| !b.is_empty())
+    .map(|line| {
+      let mut bits = line.split(|b| *b == b'-');
+      let (rhs, lhs) = (bits.next().unwrap().strip_suffix(b" ").unwrap(), bits.next().unwrap().strip_prefix(b"> ").unwrap());
+      let mut cmdbits = rhs.split(|b| *b == b' ');
+      let cmdbits = (cmdbits.next().unwrap(), cmdbits.next().unwrap_or(&[]), cmdbits.next().unwrap_or(&[]));
+
+      let connection = match cmdbits {
+        (wol, &[], &[]) => Connection::Direct(parse_wol(wol)),
+        (b"NOT", wol, &[]) => Connection::Not(parse_wol(wol)),
+        (wol1, b"AND", wol2) => Connection::And(parse_wol(wol1), parse_wol(wol2)),
+        (wol1, b"OR", wol2) => Connection::Or(parse_wol(wol1), parse_wol(wol2)),
+        (wol1, b"LSHIFT", wol2) => Connection::LShift(parse_wol(wol1), parse_wol(wol2)),
+        (wol1, b"RSHIFT", wol2) => Connection::RShift(parse_wol(wol1), parse_wol(wol2)),
+        _ => unreachable!()
+      };
+
+      let wire = [lhs[0], *lhs.get(1).unwrap_or(&0)];
+
+      (wire, Cache::Uncached(connection))
+    })
+    .collect::<HashMap<[u8; 2], Cache>>();
+
+  let mut part1 = valueified.clone();
+  let a_val = walk(*b"a\0", &mut part1);
+  println!("a: {a_val}");
+
+
+  let mut part2 = valueified.clone();
+  part2.insert(*b"b\0", Cache::Uncached(Connection::Direct(WireOrLiteral::Literal(a_val))));
+  let a_val_2 = walk(*b"a\0", &mut part2);
+  println!("a with b={a_val}: {a_val_2}");
+}
+
+fn parse_wol(bytes: &[u8]) -> WireOrLiteral {
+  if bytes.iter().all(u8::is_ascii_digit) {
+    WireOrLiteral::Literal(std::str::from_utf8(bytes).unwrap().parse().unwrap())
+  } else {
+    WireOrLiteral::Wire([bytes[0], *bytes.get(1).unwrap_or(&0)])
+  }
+}
+
+fn walk(key: [u8; 2], map: &mut HashMap<[u8; 2], Cache>) -> u16 {
+  match map[&key] {
+    Cache::Cached(val) => val,
+    Cache::Uncached(conn) => {
+      let val = match conn {
+        Connection::Direct(wol) => get_wol(wol, map),
+        Connection::Not(wol) => !get_wol(wol, map),
+        Connection::And(wol1, wol2) => get_wol(wol1, map) & get_wol(wol2, map),
+        Connection::Or(wol1, wol2) => get_wol(wol1, map) | get_wol(wol2, map),
+        Connection::LShift(wol1, wol2) => get_wol(wol1, map) << get_wol(wol2, map),
+        Connection::RShift(wol1, wol2) => get_wol(wol1, map) >> get_wol(wol2, map)
+      };
+      map.insert(key, Cache::Cached(val));
+      val
+    }
+  }
+}
+
+fn get_wol(wol: WireOrLiteral, map: &mut HashMap<[u8; 2], Cache>) -> u16 {
+  match wol {
+    WireOrLiteral::Wire(wire) => walk(wire, map),
+    WireOrLiteral::Literal(literal) => literal
+  }
+}
diff --git a/2015/rs/code/six/Cargo.toml b/2015/rs/code/six/Cargo.toml
new file mode 100644
index 0000000..8413a35
--- /dev/null
+++ b/2015/rs/code/six/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "six"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2015/rs/code/six/src/input.txt b/2015/rs/code/six/src/input.txt
new file mode 100644
index 0000000..c4357c6
--- /dev/null
+++ b/2015/rs/code/six/src/input.txt
@@ -0,0 +1,300 @@
+turn on 887,9 through 959,629
+turn on 454,398 through 844,448
+turn off 539,243 through 559,965
+turn off 370,819 through 676,868
+turn off 145,40 through 370,997
+turn off 301,3 through 808,453
+turn on 351,678 through 951,908
+toggle 720,196 through 897,994
+toggle 831,394 through 904,860
+toggle 753,664 through 970,926
+turn off 150,300 through 213,740
+turn on 141,242 through 932,871
+toggle 294,259 through 474,326
+toggle 678,333 through 752,957
+toggle 393,804 through 510,976
+turn off 6,964 through 411,976
+turn off 33,572 through 978,590
+turn on 579,693 through 650,978
+turn on 150,20 through 652,719
+turn off 782,143 through 808,802
+turn off 240,377 through 761,468
+turn off 899,828 through 958,967
+turn on 613,565 through 952,659
+turn on 295,36 through 964,978
+toggle 846,296 through 969,528
+turn off 211,254 through 529,491
+turn off 231,594 through 406,794
+turn off 169,791 through 758,942
+turn on 955,440 through 980,477
+toggle 944,498 through 995,928
+turn on 519,391 through 605,718
+toggle 521,303 through 617,366
+turn off 524,349 through 694,791
+toggle 391,87 through 499,792
+toggle 562,527 through 668,935
+turn off 68,358 through 857,453
+toggle 815,811 through 889,828
+turn off 666,61 through 768,87
+turn on 27,501 through 921,952
+turn on 953,102 through 983,471
+turn on 277,552 through 451,723
+turn off 64,253 through 655,960
+turn on 47,485 through 734,977
+turn off 59,119 through 699,734
+toggle 407,898 through 493,955
+toggle 912,966 through 949,991
+turn on 479,990 through 895,990
+toggle 390,589 through 869,766
+toggle 593,903 through 926,943
+toggle 358,439 through 870,528
+turn off 649,410 through 652,875
+turn on 629,834 through 712,895
+toggle 254,555 through 770,901
+toggle 641,832 through 947,850
+turn on 268,448 through 743,777
+turn off 512,123 through 625,874
+turn off 498,262 through 930,811
+turn off 835,158 through 886,242
+toggle 546,310 through 607,773
+turn on 501,505 through 896,909
+turn off 666,796 through 817,924
+toggle 987,789 through 993,809
+toggle 745,8 through 860,693
+toggle 181,983 through 731,988
+turn on 826,174 through 924,883
+turn on 239,228 through 843,993
+turn on 205,613 through 891,667
+toggle 867,873 through 984,896
+turn on 628,251 through 677,681
+toggle 276,956 through 631,964
+turn on 78,358 through 974,713
+turn on 521,360 through 773,597
+turn off 963,52 through 979,502
+turn on 117,151 through 934,622
+toggle 237,91 through 528,164
+turn on 944,269 through 975,453
+toggle 979,460 through 988,964
+turn off 440,254 through 681,507
+toggle 347,100 through 896,785
+turn off 329,592 through 369,985
+turn on 931,960 through 979,985
+toggle 703,3 through 776,36
+toggle 798,120 through 908,550
+turn off 186,605 through 914,709
+turn off 921,725 through 979,956
+toggle 167,34 through 735,249
+turn on 726,781 through 987,936
+toggle 720,336 through 847,756
+turn on 171,630 through 656,769
+turn off 417,276 through 751,500
+toggle 559,485 through 584,534
+turn on 568,629 through 690,873
+toggle 248,712 through 277,988
+toggle 345,594 through 812,723
+turn off 800,108 through 834,618
+turn off 967,439 through 986,869
+turn on 842,209 through 955,529
+turn on 132,653 through 357,696
+turn on 817,38 through 973,662
+turn off 569,816 through 721,861
+turn on 568,429 through 945,724
+turn on 77,458 through 844,685
+turn off 138,78 through 498,851
+turn on 136,21 through 252,986
+turn off 2,460 through 863,472
+turn on 172,81 through 839,332
+turn on 123,216 through 703,384
+turn off 879,644 through 944,887
+toggle 227,491 through 504,793
+toggle 580,418 through 741,479
+toggle 65,276 through 414,299
+toggle 482,486 through 838,931
+turn off 557,768 through 950,927
+turn off 615,617 through 955,864
+turn on 859,886 through 923,919
+turn on 391,330 through 499,971
+toggle 521,835 through 613,847
+turn on 822,787 through 989,847
+turn on 192,142 through 357,846
+turn off 564,945 through 985,945
+turn off 479,361 through 703,799
+toggle 56,481 through 489,978
+turn off 632,991 through 774,998
+toggle 723,526 through 945,792
+turn on 344,149 through 441,640
+toggle 568,927 through 624,952
+turn on 621,784 through 970,788
+toggle 665,783 through 795,981
+toggle 386,610 through 817,730
+toggle 440,399 through 734,417
+toggle 939,201 through 978,803
+turn off 395,883 through 554,929
+turn on 340,309 through 637,561
+turn off 875,147 through 946,481
+turn off 945,837 through 957,922
+turn off 429,982 through 691,991
+toggle 227,137 through 439,822
+toggle 4,848 through 7,932
+turn off 545,146 through 756,943
+turn on 763,863 through 937,994
+turn on 232,94 through 404,502
+turn off 742,254 through 930,512
+turn on 91,931 through 101,942
+toggle 585,106 through 651,425
+turn on 506,700 through 567,960
+turn off 548,44 through 718,352
+turn off 194,827 through 673,859
+turn off 6,645 through 509,764
+turn off 13,230 through 821,361
+turn on 734,629 through 919,631
+toggle 788,552 through 957,972
+toggle 244,747 through 849,773
+turn off 162,553 through 276,887
+turn off 569,577 through 587,604
+turn off 799,482 through 854,956
+turn on 744,535 through 909,802
+toggle 330,641 through 396,986
+turn off 927,458 through 966,564
+toggle 984,486 through 986,913
+toggle 519,682 through 632,708
+turn on 984,977 through 989,986
+toggle 766,423 through 934,495
+turn on 17,509 through 947,718
+turn on 413,783 through 631,903
+turn on 482,370 through 493,688
+turn on 433,859 through 628,938
+turn off 769,549 through 945,810
+turn on 178,853 through 539,941
+turn off 203,251 through 692,433
+turn off 525,638 through 955,794
+turn on 169,70 through 764,939
+toggle 59,352 through 896,404
+toggle 143,245 through 707,320
+turn off 103,35 through 160,949
+toggle 496,24 through 669,507
+turn off 581,847 through 847,903
+turn on 689,153 through 733,562
+turn on 821,487 through 839,699
+turn on 837,627 through 978,723
+toggle 96,748 through 973,753
+toggle 99,818 through 609,995
+turn on 731,193 through 756,509
+turn off 622,55 through 813,365
+turn on 456,490 through 576,548
+turn on 48,421 through 163,674
+turn off 853,861 through 924,964
+turn off 59,963 through 556,987
+turn on 458,710 through 688,847
+toggle 12,484 through 878,562
+turn off 241,964 through 799,983
+turn off 434,299 through 845,772
+toggle 896,725 through 956,847
+turn on 740,289 through 784,345
+turn off 395,840 through 822,845
+turn on 955,224 through 996,953
+turn off 710,186 through 957,722
+turn off 485,949 through 869,985
+turn on 848,209 through 975,376
+toggle 221,241 through 906,384
+turn on 588,49 through 927,496
+turn on 273,332 through 735,725
+turn on 505,962 through 895,962
+toggle 820,112 through 923,143
+turn on 919,792 through 978,982
+toggle 489,461 through 910,737
+turn off 202,642 through 638,940
+turn off 708,953 through 970,960
+toggle 437,291 through 546,381
+turn on 409,358 through 837,479
+turn off 756,279 through 870,943
+turn off 154,657 through 375,703
+turn off 524,622 through 995,779
+toggle 514,221 through 651,850
+toggle 808,464 through 886,646
+toggle 483,537 through 739,840
+toggle 654,769 through 831,825
+turn off 326,37 through 631,69
+turn off 590,570 through 926,656
+turn off 881,913 through 911,998
+turn on 996,102 through 998,616
+turn off 677,503 through 828,563
+turn on 860,251 through 877,441
+turn off 964,100 through 982,377
+toggle 888,403 through 961,597
+turn off 632,240 through 938,968
+toggle 731,176 through 932,413
+turn on 5,498 through 203,835
+turn on 819,352 through 929,855
+toggle 393,813 through 832,816
+toggle 725,689 through 967,888
+turn on 968,950 through 969,983
+turn off 152,628 through 582,896
+turn off 165,844 through 459,935
+turn off 882,741 through 974,786
+turn off 283,179 through 731,899
+toggle 197,366 through 682,445
+turn on 106,309 through 120,813
+toggle 950,387 through 967,782
+turn off 274,603 through 383,759
+turn off 155,665 through 284,787
+toggle 551,871 through 860,962
+turn off 30,826 through 598,892
+toggle 76,552 through 977,888
+turn on 938,180 through 994,997
+toggle 62,381 through 993,656
+toggle 625,861 through 921,941
+turn on 685,311 through 872,521
+turn on 124,934 through 530,962
+turn on 606,379 through 961,867
+turn off 792,735 through 946,783
+turn on 417,480 through 860,598
+toggle 178,91 through 481,887
+turn off 23,935 through 833,962
+toggle 317,14 through 793,425
+turn on 986,89 through 999,613
+turn off 359,201 through 560,554
+turn off 729,494 through 942,626
+turn on 204,143 through 876,610
+toggle 474,97 through 636,542
+turn off 902,924 through 976,973
+turn off 389,442 through 824,638
+turn off 622,863 through 798,863
+turn on 840,622 through 978,920
+toggle 567,374 through 925,439
+turn off 643,319 through 935,662
+toggle 185,42 through 294,810
+turn on 47,124 through 598,880
+toggle 828,303 through 979,770
+turn off 174,272 through 280,311
+turn off 540,50 through 880,212
+turn on 141,994 through 221,998
+turn on 476,695 through 483,901
+turn on 960,216 through 972,502
+toggle 752,335 through 957,733
+turn off 419,713 through 537,998
+toggle 772,846 through 994,888
+turn on 881,159 through 902,312
+turn off 537,651 through 641,816
+toggle 561,947 through 638,965
+turn on 368,458 through 437,612
+turn on 290,149 through 705,919
+turn on 711,918 through 974,945
+toggle 916,242 through 926,786
+toggle 522,272 through 773,314
+turn on 432,897 through 440,954
+turn off 132,169 through 775,380
+toggle 52,205 through 693,747
+toggle 926,309 through 976,669
+turn off 838,342 through 938,444
+turn on 144,431 through 260,951
+toggle 780,318 through 975,495
+turn off 185,412 through 796,541
+turn on 879,548 through 892,860
+turn on 294,132 through 460,338
+turn on 823,500 through 899,529
+turn off 225,603 through 483,920
+toggle 717,493 through 930,875
+toggle 534,948 through 599,968
+turn on 522,730 through 968,950
+turn off 102,229 through 674,529
diff --git a/2015/rs/code/six/src/main.rs b/2015/rs/code/six/src/main.rs
new file mode 100644
index 0000000..6342cd9
--- /dev/null
+++ b/2015/rs/code/six/src/main.rs
@@ -0,0 +1,57 @@
+static INPUT: &'static str = include_str!("input.txt");
+
+#[derive(Debug)]
+enum LightCommand {
+  TurnOff,
+  TurnOn,
+  Toggle
+}
+
+fn main() {
+  let valueified = INPUT.split('\n').filter(|s| !s.is_empty()).map(|s| {
+    let mut rsplit = s.rsplit(' ');
+    let mut cd = rsplit.next().unwrap().split(',').map(str::parse::<usize>).map(Result::unwrap);
+    let mut ab = rsplit.nth(1).unwrap().split(',').map(str::parse::<usize>).map(Result::unwrap);
+    let ab = (ab.next().unwrap(), ab.next().unwrap());
+    let cd = (cd.next().unwrap(), cd.next().unwrap());
+    match &s[0..7] {
+      "turn on" => (LightCommand::TurnOn, ab,cd),
+      "toggle " => (LightCommand::Toggle, ab,cd),
+      "turn of" => (LightCommand::TurnOff, ab,cd),
+      _ => unreachable!()
+    }
+  });
+
+  let mut lights = vec![false; 1_000_000];
+  for (cmd, (x1, y1), (x2, y2)) in valueified.clone() {
+    use LightCommand::*;
+    for x in x1..=x2 {
+      for y in y1..=y2 {
+        match cmd {
+          TurnOff => { lights[x + y * 1000] = false; },
+          TurnOn => { lights[x + y * 1000] = true; },
+          Toggle => { lights[x + y * 1000] = !lights[x + y * 1000]; }
+        }
+      }
+    }
+  }
+  let light_count = lights.into_iter().filter(|a| *a).count();
+  println!("Lit light count: {light_count}");
+
+  let mut lights = vec![0u64; 1_000_000];
+  for (cmd, (x1, y1), (x2, y2)) in valueified {
+    use LightCommand::*;
+    for x in x1..=x2 {
+      for y in y1..=y2 {
+        match cmd {
+          TurnOff if lights[x + y * 1000] != 0 => { lights[x + y * 1000] -= 1; },
+          TurnOn => { lights[x + y * 1000] += 1; },
+          Toggle => { lights[x + y * 1000] += 2 },
+          _ => ()
+        }
+      }
+    }
+  }
+  let light_count = lights.into_iter().sum::<u64>();
+  println!("Lit light count(Ancient Nordic Elvish): {light_count}");
+}
diff --git a/2015/rs/code/three/Cargo.toml b/2015/rs/code/three/Cargo.toml
new file mode 100644
index 0000000..6c6d234
--- /dev/null
+++ b/2015/rs/code/three/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "three"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2015/rs/code/three/src/input.txt b/2015/rs/code/three/src/input.txt
new file mode 100644
index 0000000..55f286f
--- /dev/null
+++ b/2015/rs/code/three/src/input.txt
@@ -0,0 +1 @@
+^><^>>>^<^v<v^^vv^><<^<><<vv^<>^<^v>^vv<>v><vv^^<>>^^^v<<vv><<^>^<^v<^>^v><<<v^<v<<<v<<vv<v<^><^>><>v>v^<<v^^<^v<><^>^<<^^^>v>>v^^<v>>^>vv><v>>^>>v^>^v>^<^^v>^>^^v<v>^^<v<>>v^^v><^><^<<>v^<^<^v<v>v^>>>v^v^>^<>^v<^^vv<v>^>^<>^^<vv^<><<v<^<^^>vv<>^>v<^>^v>v^>^v<>^><>><vv<>v^v<><>v^v>>>>v^^>^><^^<v<^><^<v>>^v^v<>v<<<^<<vvvv<<v^vv^>v^^^<^^^<v>>v<^v>>>>>v<^^^^>v<^<><v>>>>><v>>v^vvvv^^<v^<>^v<^v^>v><^>^v<<>>vv^>v>v^^>vv^<^vvv<>><>><><^^^<v<>^<^^^<v><^v>>v>^v<v^vv^<>^^^>v^^^v>>^v^^<^>>^>^<<v>>>^^<>>^vv>v^<^>>>><v<><><^^v<><<<<^^<>>^<vvv^><>v<v<<<<><v<<v>v<v^><vv<v^>^<^>v^^><^v>^^>v<>^v^<>^vv^><v^^vv>vvv>v>^<vv^>>^>>^>><>>>^^^^v<vv>^<>v^^><v^>^<>v<^^v><v<<><^v><>^^^^^v^v>>^^v><<><<vv>^^^^><^>v>><<<^v>v^^>^v^<^^v>v<^<<>>^v<<<v<<>>v<^v^><vv<v^v>v^<v>><v>^v<<<vv^>v<v>>v>>v><v><v^>v^^v>^v^>>>><>^>v>^v^>>>>v^<<vv<^v><<>v<v^<^^<<v<^v^^v^>vv><vv<v^<^>><^^>^<><^^<v<><^v^v^<^^>^<v><^<v>v^<<<^^v<v>^v>>><>^^>vv<<^v^<<<<^^>>>v>v<<<>^^>>>v>^>v>vv<<>^<^><v^>^^<^<v<<v<^>>^v^<vvv><>v^><<v>^^<v^vv^^^<vvv^<^>^>vv>><^v<^<<v<><<><<^^<><><vv>v>^<v>>^<>>^^v>vv^<^^v>><^vv^<<v^^><<>vv<v<><v<><v^^^v^v>^v<^<>v^^>><>^<^<v^<v^v^>v<<<^<<^>>>^^<^^v>v^<v>vvvv>v<>><^>^<<<<v^<v<>v^^^v<>v>^<v<<^^v^^<>^<<v^^<^<v>v>>v>>v^>^<vv<<<<<^<><>v><>>>v^>^v<^<><<v<^v^^<^<><^>^^^>^><>^><<vv>^<>vv<<v^v<<<<<>>>v<vv>^v>^>^>^<^><>v<><>>>^^<v>^<^v>>^<><v^><v^>>>v<v^^vvv^><v<v>v^>vvvv>>><^>v<>^^^>v>>v^<v<>v^>^<v^>^<<^>^>>v<<><<v^^>>v^<v^<^v^>^>v^><<^<v>v^<v>>^^<<v>v><<<^v^<>^<>^>>^<<v>^^<>^v<>v^>>><<v>><v^>^><v^<><v><>><v^<>vv>v^<^^^>v>^^<vv>>^v<><>>><>><^<>>v>v^^>^^<^^>^>>v>vv^^v<^<^v><vv<v<^>><<vvv<<><^>^v>^^^<<>v^<v<v><<v>^^v<<<>^^vv<^>vv>^>^<><<>vv<^>v^vv>^^^v><<^vv>^v<><v^^^^v^>vv^^<^<>^^v^<^vv<v<vv<>v>v^^<>^^>^^>^<><<^v>^><^^vvvv<><>^<v^^>v<>^><>v>><>vv^<<><<>><>v<^>^v>>^^v><<<>>^<^v^<v<<<v^>^^<^<><><^><<<<^<vv><v<<><vvv^^><vv>^<<vv<<<^v<>>><><>>v><<<v>vvvv^^vv<v>><<^v^vvv><><vv>v><>v<<<^<v^>><^^>v^<v>><v>^^^v^v>><<<v<^^>>^v<>v^<vv^^<<v<v>v<<<<^^^v^v<<>>>v>>vv>^^<><^v<v><>>v^>>>>>^>v^v^<^v^v^vvv>v<v<^>vv^<<v>vv>>v^^vv<^v>>>>vv<>v<>^^vv^<v>v^>>vvv<<<v<<^vv^^^^>v>v>^><<<^>v^><v<^<<<v>^v^^^><<><<<^^<^^<>^<v>^<v<<v<^^vv>v<^v><v><v<>^v<^<v<^<v^v><v>><v<v<<>^<v<>>><>^v^v<<^><v^<<v<v^>^>v><^>^vv^^<v<v<vv<v>^v^v^>^<<>>>>>v^<>^>v^vv^><<>>^^<>v^><v>^vvv^>v^v><>^><<>v>v<^<^><^^vv<<><>>v>>v><vv>>^v<<>^vv<>^vv>v>v>^>^>>><><<>v<v>^<<^v^^<<<><v>>vv<^<vv<vv^<<v<<^v><<>v<^^^<<^v^>^v>^^^v^v>>>v>v^v>^>^vv<^^<<vv^>^<<<vv>v^<><<^vvv^^><>vv^v>v>^><<^^^^vvv^<vvv>><^v<^>^<>>^<v<<vv>>><v>vv^<>><v^<v>^v>^>v>^<^<^^^<<vvvv^>>>>>>>v><vv>^<>^^v^><>><^v^^<v^v<<<<v^>><>v^v<vv<><^<<<<^>^^>vv>><^v<v^v<<>^vvv>v^^><^^<^<>>^^v^vv<>v<^<<<v^^^><v<vv<<>v>v<>^v^><v^vv^v^^v<^^v^^v><>v<^v>><<^<^v^>><<vv<<^>^<<v^<>^><>v><vv^v>>^<v<<<^>vv<^v>^>v<<v>^>>^>>v^<v<v>>^v<^v^v><<><>^><<<><v<vvvv<v^<v^v><>^<>^^^^v>^>^vvvvv>v>>v><<vv<<v<><<^><<^v><<v<<<v><vv<^>^v>>>>^v<^v<<>>^>^<<vv^<^>v>><<^>^>^v><><>^><<v<>v^><<^v^<^^><^^v^<<^v^^>>^v^<^><vv>v^^<<^^^<><>^>v^v>v^>^v^vv>^^>>>>^^<^>>>^^v<vv<><^^<vvv<^^^vv>v<v<v>><<<>^>^^>^>^v<<<<>>^<<>><v>>v>^^<^v<>v<>v^>v^><^<^^><v^^v>^^vv<v<<>><<vv<>>v>^<<<<v<<v>^><^^<^<^<v^<<^^v>^v<^>v^v^<v^vv^>^^><^>v^v>>^^v^><vv<v<v<v>>>>><<><v><v^v^<v^<^^<v<>^>v>v<>>>v>^^^^>><v^v^^v<<<>v^<<^<v>>>><^v^<<><v<>>v><><v<v^v>^v^^<v<^<^^v>><<vv<<vv><>>^>^>vv<^<>^vvv^v<v^^<>v^v>^^<<<<<>^v^>^<>v^^<>v^v<vv>^<>vv^<^vv>><v^^vvvvv>><<>v<vv^<^<vv^v^<>^^<v^<vv^<v^v^v<<^>^>^>^^>>>vvv>^>v>v>>>^>vv^><>^><>v>^^<v^>^><<v>><<<>>v<vvvv^>^v<^<>^<v>^<>^^<<><>^v<><>>>^vv<^<<^<^v>v<<<<<^^v<^v<><v<<><^>v>^v>>^v^><^^^^v<><><>vv^<>vv<^v<^^><v^<^><^^v^v^<^^<<><v>v<v<v^<<^v><>v^v<^>vvv><<^v>>v><><v<<^>>>v<^>>v>^<>><>^<v^v^<vv<<^>v<^^>^<^v<^<<^^v<>>^>^>^v^^v^v<v^^vv^<v>>v><vv^vv>v<>v^>v^^>^^>><v><v^<<><<>><<^^>><^v<v<><<><<><v<v^<^<v>>>><v^^v^^>>>^^^^^<<vv<^><>^<<<vv^^^>^><<<v<^v>^<v<^>^vvv<<>vv><<>v>v^v>>>>>^<>><^^^><<<<v><<vv>>>v<^<vv^v^<<v>>>>^^vvv>v<>><v>>>v>>^v^vvv<<>vvv<<^^^<>vv^^v<<>^^^>>^<^v^<^^>v^><v>>^<<^v<<vv<vv>v^>>^>v^><^><>^>>>vv>><^^^>vv<<^^vv><^<>^>^^<^<>>^vv^>>^v><>v^>>><<<^^<^>^>v<^>^<^^<>>><^^<>^v^<<vvv<v><>vvv><v>v^v<<^<v>^^><<^vv^v>v>v<<^v^<<<>^><><vvv>v>^vv^v<>vv^>^^<^>^>v^^<vv^>v><v<<<><>>^v<^<><><^<v^^<<^<v>vv<><<>v^<v^>^>^^<><<>^<^<<v^^v<v^<><<>v>><^<<>^>^v^v<v^v><^>>^v<^>v<<>^^^<^v>>>^<v>vvvv<<v^<^^>vvvv>v<>v<v><vvvvv>^<><>vvv<>^<<>^>>>>v^<^<><^v>v^>>v><>^><<v^>^<<>^>^v^<v^^>>^v><v>^<v><>v^<^^>v>^>>>v^v>>>^<>^<>>>>>v>>vv^v<><<<><><v><<vv<<v<><>>vv<^<vv>^v<<>v^v<^v<><v>>^v>>vvv^^v>>v>^>^>v><v><^>^^<<>^v<^<<<<^>v<^>>v^<^v>^v<<>^>^vvv<^^vv>^vv>vv<>>v>v<v>>v^<<<<<^^v^>v>^<<<v^v>>v<v><vvv><v>^<vv><<>>^<^>^^<>>>>^<^v<>v^^>^<^^v<^><>><v>>^v^vv<^v<^><<vvv<>><>><^^>^<^v^<^<>v<<<^v>v^^^<>v^<v^>^v^>><>^^<v<^><<^^v^<>^<^vv>>><^v><v^>vv<^v<<<v^>>v>v^v>^<v>v<^<>v^vvv>^vv<<<<v><^><v>>^^>><^v><<^>v^^<<v^^<^<><<<<>^<v<^v^>v<<^^>v<<<<<vvv<v<^>^>^>^>>^>>>v^<<v>>^^v><vv<^v<v<^^^>>>^vvv<^v<>>>vv>^^><^v>vv^>>v>v^<>^<vv>^>^<<^>^^^>>^vv>^^>vvvv<>>^^^^>>>v>v^^>vv>vv^<<>^><^<v^vvvv><v<><v>><<<v<v<<^v><vv^vv^<>>>^>^<v<^v<>><^<vv^^><v>v^>v^<><v^vvv>^>v^^v^>^^>v<<<<^<<^>>v>v^^^<<<v>>>^^v>v<v><<<<^^^v>^vv^>><>^v<v<<^^<<<<><>>>v>vvv^v^^v^>>vv>^>><>^v><^v^><^^>vv>^<^<^>><v>v>><><><v>^>^>v>vv>vv>^^>v>v^><v<<v^<>^>^v>^^v>^<^v<>>vvv^^>^>vv<v<v<<^<^<v^<>v^^v<^<^>vv^^<v><^^^>v>vv<<v>v<<v^<v^^><vv>^>^v^<^>v<^>^<>vv^><v<^><>>^>>^<^><<>^<^>v>v><>>>^<<^><<v><^v<v><>>vv<^><v^>>v>v>>>>^^>v<^v^>><<^<>>v><^><<^>^<vv^^<><<>><vvvv^>^^<><^^v>^^>vv>^v<v>>^^v^<v<^><^<<>>v^^^<^><^<<><<v<>><<>^v>vvv^vvv^^>>^<^<v>><>^<<<<^^<>>>v^<<^^v>><><<v<^>v>^v<v^>v>vv^><>^><<><^^>^>^<><>><^^<v^v<^><><><v>^<v<<v^<<^^^v<v<^v<>>><^v<<<<>>^v>^^vv^v^<<v>><<<v>vv>>v>>^v^<>>vv^<^>^<<>v<<<^vv<^vv^vv<^v^^^<vv^>v>>v<^^<^^vvv<^^v<>>>^>v^><v>^^><>vv>v>v<<<^^v<^vv^v>^^^>>>^^<>^^<^vvv>><><<><^<v>><<>^>^^<v^v^>vv>vv<v>^^<^^<<><><<v><v^^>v><v><<>v>vvv<^^^^<^>>><<<^^^<^>vv^^v>>v<<v^^<vv^<^>vvv^^v^^<^<vv>v<^<>^<<vv^^>^v>>^><><>v<v<v<>><v>>>^^>>v^><v^^<^>><>v<><<v^v<v<<>>>><>>>>><<^vvv<<><><<>^><><<^^v><<^>v>^>^v>v>>^^<><^>vv<^<^v>v<><^<<v<><^><>^^^<v^<><vvv^^^<>^^v><v<<<v>><>^>^vv<v^<vv>v>v^vv<v^v<v>^v^>v><>v^><>v>^^^^><<vv^><v<<v<^<>^v^^^>^^><<<v<^<v^>^^>v><vvvvv^<^<v^^>v<^v^^vv^<<<<v><^>v>v^v><><v^<<^<<v<^^^>^><v^v^<><><>^v<v>^<>^v>^v>v^<><^><v>>v<<^><^vv^<><^<>><>><v<v><<^^^^>v<^<^vv<><^vv><<^<<v>v^>>^v>^>v^^v>vv<v>v<<v>v<>^>>vv^>>><>^v^^<^>v<<^<^^v^^v^<<v<<v<^v<>vv^<v>><^v<^>>>vv^^<v^<>^^v<v<v>>^><^^^<><<^^>v<<vv>><<vvv>><<v^v^>><>vv^><<^>^><^v<^<^<vv<^^vv>v^v<<<<<<><<vv^vv>vv>v<^><<><><<>>v>><v><^>^v>^v^<>v^^^><^^<<<^vv^vv>^v^vvv^^>v^<v>><^<^<^<>^vv<vv^v^^>^^^>vv^v>>><<<^<>>v>v<^^<><v>>><><^v^^<<><<<>^<^^v^>v<vv^^^^>><v><^<<v<<v<>^>^>>^<>^v><>>^<v<vv^<<^<<>vv^>^^<<<^v<>>^v<>vvv<<^^<<><vvvvv<<^<^^<>>>>^^<><>^><>^v<v^^v<<v^^<^<^>v<v>^v<^>^v<>v^vv<><<v>^vvv<><<^>>^^><><>^<>^>v^^v^><v<><>>v><v^<v<<v>><^v>^<v<^>v<<<>vvv^<^^v<vvv^vv<>^<>^>>v<>^^><><v>>^><^^vv>><<>><v><^><>>^vv>v<vv<>v^v^^v<<^^<vv>v^^vv<<^<<><>^<><v^><^<^<>>^vv<v>v>>^<^vv>^vv^>v>^<><^><^<>v^v^^<^<>^^v>>><^v<>v^v<<^>v><>^^<<v^v<>v^>>v>^<><vv^v<v^<vv<>^>^>^<^>v><<><><><<<>^>><v^^><^>><v>>^v<<<^<<>^><<^>>>>>v<^>v>>v^<v^>^>v^^><>v^v^vvvv<v<v<>v>>><<>^<<vvv><v^v^>v<v^^^>>^<v>>^vv^^<vv><^>>v<v^><vvv<^^>>vv^v<^<>^v^<<v>^<<><<<^vvv^>^^<<>>><v<^>vv<<^<><^v<^<><<^^>vv^v>v^^^>>>>^>vv<<v>v>>^^v^^><>v<<^><^<v^>>^>v^v>><^v^>v<<^<v><^<^<^<>>v^^>><<<>v<v>v<^^>^vv<<<^^<v<>v^^>v<<><^<>^^>^v<>v>><^^^vv^>^><>v^^<v^<>>^<v^^^><v<><vvv>v>^<<^v>^>>>>><^^^<>v<v>>v^^<^v^>>v^<<v^>^>v^v>>>>^>>vv<>^<^v><v^^<>v>v^v>^<>^>v<vv><<v<^v<<^v<<^v^vv<><>^<>>^<>>^<>v^><<>^v>>^^^^<<^v><>^<^>^^v><^^<^<v^<^^v>^v><vv>v<<^>^>><<^^^vvv<<^vv<^^>v^^vv^<^^<<^^>>^^<vv<v<<v^^<<v<^vvv<<><<v>v^>>v^^>v<^>^><v<^>v<v^v<v^^<>v>><<v^v^v<^^^><v>v><^<^vv>^^v>^>v<<^vv><^^^^^^><<^>>>^v<>^^v<<<>><<<v^><>^<<<v>v^>^^^<^><v>^^^v<<>v<v>^<v^>><<^^<<^v<<>^v>>vv>><v<^><v<<<vvv><vv><<^v^^<v^vvv<^v>>v^v<v^v^>>^^v<><^^^<^^>v>^<><v<<v^^>vvv^v^^<v<v^v>^>v^^v<^><v^^<<<<>^^>>^v<><^><^<<^vv^<><<>v^vv^<v^<><<<^^>v<<>>>v<>v<><<<v>^v>^^v>^^>v>^>^>v<>><>^>^>^vvvv<^<v^<>^^^^v>v>><<v>>^<vv>>^<v<^v^vv>><>^^>v^^<<><^<v>><<<<>v>^^><v^^v<<v<><vv^v>^<v^^>v<<<<v^v<<>>vv<v<<<v>v>>v<^v>>v>v^<<<>^>^>^<>v<^^vv><^v<<^v<vvv^vv>v<^<<^^vv^^>vv<^>v>^^<<v^<<^^v<>^>v<<^^<^>^^^v^^<v<^<^>>>v^vv^<^v>^<>^<^<v<^v>>>^<^v<><v<^vv<v>v><v^v^^v<vv><^^<><>^>v<^<^vv>><^v><v<>^<>^^>^<><<<v^>>^<>><<><v>vvv^<<^<vv<v><v<^<<<^>^>>v<^>>vv>^v^^^v<>v<>><>^vv^>vv^
diff --git a/2015/rs/code/three/src/main.rs b/2015/rs/code/three/src/main.rs
new file mode 100644
index 0000000..770fc10
--- /dev/null
+++ b/2015/rs/code/three/src/main.rs
@@ -0,0 +1,29 @@
+use std::collections::HashSet;
+
+static INPUT: &'static str = include_str!("input.txt");
+
+fn main() {
+  let valueified = INPUT.chars().map(|c| match c { '<' => (-1, 0), '>' => (1, 0), '^' => (0, 1), 'v' => (0, -1), _ => (0, 0) });
+
+  let mut visited = HashSet::new();
+  append_visits(valueified.clone(), &mut visited);
+  println!("Number visited normally: {}", visited.len());
+
+  let santa_iter = valueified.clone().step_by(2);
+  let robot_iter = valueified.skip(1).step_by(2);
+
+  let mut visited = HashSet::new();
+  append_visits(santa_iter.clone(), &mut visited);
+  append_visits(robot_iter.clone(), &mut visited);
+  println!("Number visited w/ robot: {}", visited.len());
+}
+
+fn append_visits<I: Iterator<Item = (i32, i32)>>(iter: I, visited: &mut HashSet<(i32, i32)>) {
+  let (mut x, mut y) = (0, 0);
+  visited.insert((0, 0));
+  for (move_x, move_y) in iter {
+    x += move_x;
+    y += move_y;
+    visited.insert((x, y));
+  }
+}
diff --git a/2015/rs/code/two/Cargo.toml b/2015/rs/code/two/Cargo.toml
new file mode 100644
index 0000000..40b395d
--- /dev/null
+++ b/2015/rs/code/two/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "two"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2015/rs/code/two/src/input.txt b/2015/rs/code/two/src/input.txt
new file mode 100644
index 0000000..5f3335f
--- /dev/null
+++ b/2015/rs/code/two/src/input.txt
@@ -0,0 +1,1000 @@
+29x13x26
+11x11x14
+27x2x5
+6x10x13
+15x19x10
+26x29x15
+8x23x6
+17x8x26
+20x28x3
+23x12x24
+11x17x3
+19x23x28
+25x2x25
+1x15x3
+25x14x4
+23x10x23
+29x19x7
+17x10x13
+26x30x4
+16x7x16
+7x5x27
+8x23x6
+2x20x2
+18x4x24
+30x2x26
+6x14x23
+10x23x9
+29x29x22
+1x21x14
+22x10x13
+10x12x10
+20x13x11
+12x2x14
+2x16x29
+27x18x26
+6x12x20
+18x17x8
+14x25x1
+30x15x22
+17x18x7
+28x23x24
+15x12x25
+14x7x20
+29x23x8
+24x5x22
+6x22x8
+1x15x26
+14x5x1
+24x28x28
+17x23x23
+4x15x7
+23x8x11
+6x15x1
+23x18x13
+17x1x26
+23x13x17
+2x18x8
+22x22x1
+10x22x6
+28x29x20
+22x21x25
+14x8x23
+12x30x14
+8x7x5
+3x30x15
+4x3x29
+25x18x3
+16x7x16
+4x3x8
+9x16x30
+20x28x3
+28x24x6
+4x18x2
+23x18x5
+22x4x30
+15x30x9
+7x12x12
+3x22x29
+12x1x9
+9x2x25
+17x11x10
+25x24x7
+7x27x26
+26x4x12
+29x2x26
+19x24x12
+23x23x3
+26x28x16
+18x4x16
+25x30x18
+29x19x19
+16x3x27
+29x25x29
+18x19x5
+14x21x30
+19x13x26
+19x10x15
+9x4x7
+18x6x6
+24x25x29
+9x12x27
+15x3x22
+30x17x21
+18x19x28
+9x11x12
+8x28x22
+11x3x4
+28x17x20
+24x18x15
+11x12x13
+6x19x24
+28x4x5
+28x22x23
+13x29x2
+9x16x15
+29x28x1
+10x18x30
+19x11x12
+26x28x25
+23x17x13
+25x1x21
+17x1x27
+17x27x28
+28x13x15
+14x13x25
+11x29x7
+22x29x5
+13x6x14
+23x18x13
+25x7x17
+18x9x20
+21x11x2
+28x11x13
+13x25x1
+19x29x25
+16x29x4
+10x21x10
+7x25x17
+5x9x3
+1x15x6
+8x27x29
+23x6x30
+22x22x29
+6x20x30
+26x25x29
+10x19x19
+20x30x9
+5x30x24
+17x10x27
+30x14x30
+8x17x4
+7x18x6
+3x5x4
+24x17x15
+14x20x17
+22x27x15
+18x14x15
+23x9x11
+21x16x29
+7x18x21
+9x3x29
+10x13x4
+2x30x4
+23x20x4
+8x22x21
+29x28x4
+13x16x25
+21x9x11
+7x26x26
+13x23x30
+19x7x10
+9x23x21
+21x9x17
+9x21x15
+20x29x22
+23x13x15
+19x25x2
+12x11x30
+20x21x6
+21x6x17
+24x26x9
+29x21x29
+29x26x16
+6x16x1
+2x12x6
+6x7x20
+7x2x22
+6x22x4
+13x11x27
+25x27x14
+11x8x6
+26x11x14
+30x3x29
+27x21x20
+15x16x26
+6x22x10
+11x9x25
+23x13x6
+13x9x3
+30x22x13
+29x23x14
+25x19x6
+7x29x11
+19x18x5
+29x25x13
+25x24x27
+1x9x12
+22x9x17
+14x12x28
+19x21x17
+13x25x17
+14x25x12
+4x14x30
+7x15x28
+3x6x25
+6x2x16
+15x19x11
+17x30x20
+20x23x7
+26x21x6
+26x29x24
+2x4x30
+4x22x18
+13x3x28
+27x6x21
+5x3x27
+12x7x11
+28x11x9
+12x9x2
+1x22x20
+15x13x28
+14x19x16
+28x20x3
+20x4x9
+26x7x26
+18x19x25
+7x1x13
+20x23x29
+27x26x8
+11x15x15
+10x21x23
+29x2x11
+21x28x20
+3x18x23
+26x17x17
+14x26x17
+20x7x17
+18x12x8
+4x8x8
+8x15x23
+24x29x5
+1x25x8
+1x28x17
+16x18x13
+29x24x22
+13x16x10
+14x7x16
+15x11x29
+12x15x19
+17x6x28
+4x3x9
+15x16x8
+29x27x11
+2x24x20
+4x21x3
+29x24x27
+18x22x22
+7x8x18
+20x7x8
+19x9x2
+20x17x2
+2x29x10
+19x25x1
+28x9x3
+29x27x20
+7x21x7
+10x4x22
+26x8x5
+26x14x1
+5x27x9
+2x18x3
+3x27x17
+30x17x23
+30x11x20
+4x6x7
+6x29x27
+30x16x20
+24x30x28
+19x20x26
+18x1x25
+26x12x12
+19x15x29
+16x21x24
+23x13x26
+25x16x10
+8x9x18
+24x14x1
+24x15x21
+19x9x14
+8x23x11
+22x2x16
+29x9x26
+3x16x25
+15x20x30
+3x11x12
+15x2x3
+13x7x4
+2x7x27
+9x26x11
+30x24x19
+28x17x21
+10x8x2
+11x15x26
+10x12x20
+24x24x27
+25x26x16
+13x4x20
+25x13x11
+12x22x3
+20x7x1
+12x18x6
+26x8x20
+14x2x7
+23x12x1
+26x24x24
+27x26x23
+26x17x5
+17x24x2
+26x5x6
+23x5x1
+5x18x30
+24x21x19
+5x28x11
+21x20x14
+25x4x22
+26x24x11
+7x5x8
+13x1x30
+5x1x6
+14x5x2
+8x11x7
+13x20x1
+17x30x14
+29x22x10
+12x26x3
+27x17x3
+26x27x4
+5x26x17
+22x11x19
+8x26x3
+24x19x22
+7x1x4
+6x27x30
+4x28x14
+16x14x18
+4x5x20
+19x25x4
+15x15x1
+10x14x14
+16x18x24
+21x27x15
+5x5x10
+1x7x13
+16x2x8
+13x15x11
+3x25x10
+20x29x8
+12x3x2
+10x13x12
+25x27x1
+11x30x19
+7x19x13
+27x6x18
+16x21x19
+21x29x5
+16x23x12
+29x19x15
+5x5x10
+27x15x1
+13x16x22
+29x19x5
+8x12x9
+3x18x5
+13x25x3
+5x9x21
+10x20x16
+9x9x11
+23x21x1
+22x2x15
+27x8x13
+23x7x3
+26x30x15
+29x15x16
+16x27x13
+2x18x9
+10x27x8
+20x9x25
+10x2x17
+16x13x13
+21x26x1
+27x26x24
+9x30x16
+19x17x28
+25x15x1
+10x26x6
+10x11x11
+5x26x25
+30x4x15
+9x8x23
+14x25x7
+8x28x8
+28x18x24
+4x4x25
+16x25x11
+17x27x8
+15x16x9
+24x13x21
+17x3x27
+27x5x26
+8x27x12
+29x2x8
+24x23x30
+1x30x21
+6x18x20
+13x14x12
+25x30x23
+24x6x24
+12x7x21
+11x6x8
+8x30x30
+26x3x12
+28x6x5
+18x7x1
+7x6x20
+14x16x18
+11x22x15
+4x20x10
+19x24x19
+8x24x11
+4x9x10
+6x6x22
+10x9x29
+1x5x28
+19x25x29
+20x30x3
+15x13x13
+9x9x24
+20x14x29
+26x24x13
+2x25x8
+10x26x2
+12x19x12
+18x6x20
+4x5x14
+26x27x10
+16x26x20
+3x21x15
+2x26x18
+14x11x17
+26x26x25
+10x1x11
+17x19x19
+27x28x26
+9x2x10
+19x30x15
+23x30x14
+15x3x20
+2x14x22
+21x18x8
+22x4x29
+19x6x29
+9x26x29
+16x10x9
+22x12x22
+13x28x14
+25x14x28
+28x3x30
+10x17x1
+10x27x22
+10x23x19
+14x25x9
+11x24x8
+30x25x10
+22x13x28
+2x7x6
+11x20x8
+9x22x14
+19x16x9
+11x24x4
+11x17x2
+6x4x10
+26x10x10
+12x14x5
+27x10x3
+15x3x6
+11x7x19
+22x10x12
+21x26x10
+13x20x3
+27x8x8
+1x24x23
+24x9x22
+23x17x23
+3x28x19
+2x20x28
+23x17x24
+26x1x4
+4x1x12
+5x6x16
+13x22x13
+25x21x21
+20x21x12
+9x24x25
+17x16x12
+12x28x9
+18x16x27
+29x12x2
+30x12x15
+24x11x10
+4x9x22
+4x24x5
+19x11x5
+6x25x6
+1x20x17
+22x8x21
+11x26x4
+16x19x3
+8x12x8
+13x2x18
+10x5x11
+8x12x17
+21x2x5
+26x17x26
+23x18x17
+28x11x14
+1x4x27
+29x5x28
+5x9x10
+5x7x25
+20x15x27
+15x11x17
+12x14x1
+29x14x4
+18x14x18
+14x25x24
+26x14x18
+13x8x11
+30x1x23
+3x4x12
+12x24x9
+8x6x16
+14x15x30
+12x30x8
+22x11x18
+16x30x28
+17x18x4
+13x14x23
+2x28x8
+3x28x30
+29x30x8
+4x6x26
+6x30x17
+11x30x30
+19x4x3
+12x15x20
+22x28x4
+26x30x2
+6x12x7
+1x10x5
+25x29x7
+17x9x18
+16x21x29
+21x14x7
+15x16x11
+26x6x15
+8x24x7
+2x20x4
+2x9x3
+19x8x13
+18x7x22
+27x14x17
+2x13x8
+18x15x26
+15x27x27
+18x11x15
+1x29x20
+21x12x11
+20x2x15
+28x23x9
+1x1x17
+7x23x9
+30x9x27
+9x16x18
+15x24x28
+30x11x18
+29x26x10
+9x5x25
+2x1x19
+14x3x14
+6x3x6
+30x15x20
+20x17x27
+28x10x9
+14x24x28
+17x11x6
+12x3x6
+8x8x15
+23x14x21
+11x21x7
+5x13x30
+4x29x25
+30x28x24
+18x4x9
+3x15x6
+13x9x19
+30x14x7
+7x9x9
+17x11x26
+24x26x13
+16x21x16
+27x17x25
+2x21x11
+9x11x27
+3x3x7
+13x8x14
+20x20x26
+13x29x22
+30x11x1
+7x10x19
+27x5x9
+23x17x15
+21x6x13
+24x15x16
+18x4x14
+18x16x6
+22x11x18
+14x2x5
+15x3x7
+10x20x29
+16x1x10
+30x23x1
+10x15x11
+17x14x5
+22x8x13
+7x11x28
+26x17x3
+2x23x2
+28x13x19
+18x12x28
+22x23x16
+14x12x1
+20x8x19
+17x19x13
+29x2x12
+2x26x27
+29x16x4
+13x8x18
+16x15x30
+23x16x2
+28x8x27
+21x8x23
+13x20x26
+19x6x17
+17x30x15
+7x4x30
+2x13x30
+18x7x19
+4x13x27
+8x6x5
+18x20x25
+2x3x30
+23x27x13
+22x30x4
+23x25x25
+23x16x19
+25x3x1
+5x6x15
+11x29x12
+25x24x7
+16x7x20
+20x3x2
+12x27x15
+16x10x12
+1x3x14
+22x1x26
+2x24x18
+11x29x16
+15x2x9
+10x1x24
+21x8x11
+30x11x23
+6x30x21
+13x27x29
+14x6x5
+18x29x19
+12x4x28
+29x3x14
+10x30x28
+5x7x15
+14x1x10
+9x25x14
+7x24x18
+28x17x21
+18x13x25
+26x15x1
+21x1x19
+12x16x21
+4x6x13
+7x15x26
+17x19x5
+12x28x2
+1x20x19
+27x7x5
+17x26x8
+12x15x19
+5x23x10
+8x2x8
+16x13x12
+14x27x1
+26x29x3
+24x16x14
+14x13x13
+7x22x23
+2x9x30
+4x27x8
+26x27x15
+23x1x6
+25x29x18
+5x18x1
+20x8x20
+5x10x25
+30x25x15
+7x22x25
+28x26x17
+29x4x1
+21x11x27
+20x9x8
+25x22x12
+2x11x11
+23x2x16
+23x27x20
+2x13x28
+27x2x24
+11x1x17
+12x4x27
+16x20x22
+30x12x10
+5x15x4
+5x2x27
+12x4x25
+1x16x4
+27x4x4
+21x16x3
+27x26x3
+24x6x6
+24x12x12
+20x20x25
+8x29x2
+21x4x5
+2x4x8
+4x13x19
+3x20x10
+12x15x16
+6x5x4
+12x16x20
+22x19x17
+8x17x22
+25x16x15
+7x1x19
+10x1x7
+23x23x5
+28x6x12
+2x25x12
+10x27x12
+24x27x19
+14x14x20
+4x1x5
+16x27x29
+20x20x24
+28x24x30
+6x15x15
+9x15x30
+23x26x3
+17x24x21
+22x25x25
+18x29x10
+20x25x1
+24x11x16
+20x7x21
+20x7x9
+7x26x2
+5x18x1
+16x26x28
+4x10x18
+27x30x21
+26x9x9
+8x16x14
+6x27x8
+28x9x20
+13x13x4
+9x18x16
+18x15x18
+22x19x14
+14x10x17
+25x29x11
+1x18x19
+8x11x26
+18x6x14
+30x24x13
+27x1x27
+15x9x3
+2x29x17
+2x26x21
+22x9x9
+20x20x20
+22x28x2
+26x5x16
+11x3x14
+21x16x16
+18x26x7
+18x30x6
+7x11x12
+15x10x2
+27x2x16
+27x30x24
+28x14x24
+7x4x8
+6x28x15
+13x19x1
+22x26x30
+7x30x24
+2x17x21
+19x26x2
+19x24x15
+14x23x2
+21x27x15
+30x15x14
+21x29x5
+23x30x2
+4x1x2
+15x5x13
+21x2x30
+20x7x16
+1x21x25
+2x25x1
+12x29x5
+28x13x16
+26x3x12
+29x20x23
+28x12x20
+4x30x8
+16x15x16
+6x16x29
+2x28x13
+24x25x2
+26x15x22
+17x20x11
+18x12x7
+19x1x18
+8x27x13
+22x16x8
+19x26x17
+13x11x10
+22x12x3
+13x12x14
+29x17x9
+6x14x10
+14x20x10
+8x26x9
+25x13x22
+3x30x25
+14x28x1
+30x29x12
+3x17x15
+3x24x14
+28x24x22
+16x6x1
+20x25x14
+17x17x13
+6x19x27
+10x15x20
+8x23x20
+7x29x21
+18x9x25
+10x5x22
+2x27x27
+16x18x30
+15x5x12
+26x29x29
+28x11x10
+9x29x28
+24x15x23
+26x9x10
+5x1x25
+22x27x16
+7x29x3
+1x3x5
+8x7x29
+19x21x11
+28x13x30
+17x16x20
+5x10x25
+9x14x15
+15x14x23
+16x4x17
+21x8x2
+9x9x8
+22x22x4
+10x2x27
+12x19x10
+15x29x4
+22x14x7
+29x18x5
+1x7x27
+24x1x15
+23x23x26
+12x17x23
+26x10x24
+8x22x2
+8x1x10
+22x19x12
+2x23x13
+11x27x25
+26x15x27
+27x7x21
+18x9x6
+22x21x22
+7x12x26
+23x21x13
+14x3x8
+5x9x28
+29x29x15
+27x25x23
+12x2x24
+8x2x20
+29x19x4
+12x24x29
+2x27x28
+14x20x9
+28x6x25
+18x29x8
+19x11x30
+15x11x23
+18x7x7
+14x20x14
+26x18x22
+27x25x13
+12x10x30
+30x2x7
+28x10x1
+18x10x30
+22x11x5
+22x16x3
+25x15x9
+5x10x24
+4x28x8
+19x24x18
+3x4x25
+14x4x30
+11x26x3
+12x12x12
+26x7x24
+3x2x14
+1x27x7
+2x2x13
+3x26x26
+12x4x11
+12x17x20
+4x19x30
+5x18x10
+17x6x18
+19x30x20
+11x2x17
+30x13x19
+22x23x7
+17x28x2
+5x17x30
+7x11x4
+21x26x18
+15x28x4
+5x6x27
+12x6x16
+9x17x12
+27x20x5
+14x5x20
+27x14x6
+2x14x21
+4x28x30
+24x5x1
+19x29x29
+11x23x1
+8x16x21
+3x17x19
+10x13x5
+20x21x16
+23x3x6
+27x26x11
+3x2x22
+14x3x5
+10x9x8
diff --git a/2015/rs/code/two/src/main.rs b/2015/rs/code/two/src/main.rs
new file mode 100644
index 0000000..2185bae
--- /dev/null
+++ b/2015/rs/code/two/src/main.rs
@@ -0,0 +1,31 @@
+static INPUT: &'static str = include_str!("input.txt");
+
+fn main() {
+  let valueified = INPUT
+    .split('\n')
+    .filter(|s| !s.is_empty())
+    .map(|line| {
+      let mut nums = line
+        .split('x')
+        .map(str::parse::<u32>)
+        .map(Result::unwrap);
+      (nums.next().unwrap(), nums.next().unwrap(), nums.next().unwrap())
+     });
+
+  let final_area: u32 = valueified.clone()
+    .map(|(w, l, h)| {
+      let sides = [w*h, l*w, h*l];
+      sides.into_iter().min().unwrap() + sides.into_iter().sum::<u32>() * 2
+    })
+    .sum();
+  println!("Final area: {final_area}");
+
+  let ribbon_length: u32 = valueified
+    .map(|(w, l, h)| {
+      let mut nums = [w, l, h];
+      nums.sort();
+      (nums[0] + nums[1]) * 2 + (w * l * h)
+    })
+    .sum();
+  println!("Ribbon length: {ribbon_length}");
+}
diff --git a/2015/rs/src/base.rs b/2015/rs/src/base.rs
deleted file mode 100644
index 44099ac..0000000
--- a/2015/rs/src/base.rs
+++ /dev/null
@@ -1,5 +0,0 @@
-static INPUT: &'static str = include_str!("!!.txt");
-
-fn main() {
-  let valueified = INPUT;
-}
diff --git a/2015/rs/src/eight.rs b/2015/rs/src/eight.rs
deleted file mode 100644
index ce9a8a7..0000000
--- a/2015/rs/src/eight.rs
+++ /dev/null
@@ -1,55 +0,0 @@
-static INPUT: &'static str = include_str!("eight.txt");
-
-#[derive(Copy, Clone)]
-enum ParseState {
-  Verbatim,
-  Esc,
-  Hex1,
-  Hex2(u32)
-}
-
-fn main() {
-  let valueified = INPUT.split('\n')
-    .filter(|s| !s.is_empty());
-
-  let (oglen, parsedlen) = valueified.clone()
-    .map(|s| {
-      let rs = s.strip_prefix('"').and_then(|s| s.strip_suffix('"')).unwrap();
-      let mut buf = String::with_capacity(s.len());
-      let mut state = ParseState::Verbatim;
-      for c in rs.chars() {
-        match (state, c) {
-          (ParseState::Verbatim, '\\') => { state = ParseState::Esc; },
-          (ParseState::Verbatim, c) => { buf.push(c); },
-
-          (ParseState::Esc, 'x') => { state = ParseState::Hex1; },
-          (ParseState::Esc, c) => { buf.push(c); state = ParseState::Verbatim; },
-
-          (ParseState::Hex1, c) => { state = ParseState::Hex2(c.to_digit(16).unwrap() * 16); },
-          (ParseState::Hex2(n), c) => { buf.push(/*char::from_u32(n + c.to_digit(16).unwrap()).unwrap()*/'?'); state = ParseState::Verbatim; },
-        }
-      }
-      (s, buf)
-    })
-    .fold((0, 0), |(a1, b1), (a2, b2)| (a1 + a2.len(), b1 + b2.len()));
-  let lendiff = oglen - parsedlen;
-  println!("Literal Length - Parsed Length: {lendiff}");
-
-  let (oglen, enclen) = valueified
-    .map(|s| {
-      let mut buf = String::with_capacity(s.len() * 2);
-      buf.push('"');
-      for c in s.chars() {
-        match c {
-          '\\' => { buf += "\\\\" },
-          '"' => { buf += "\\\"" },
-          c => { buf.push(c) },
-        }
-      }
-      buf.push('"');
-      (s, buf)
-    })
-    .fold((0, 0), |(a1, b1), (a2, b2)| (a1 + a2.len(), b1 + b2.len()));
-  let lendiff = enclen - oglen;
-  println!("Encoded Length - Literal Length: {lendiff}");
-}
diff --git a/2015/rs/src/eight.txt b/2015/rs/src/eight.txt
deleted file mode 100644
index 0e80d0f..0000000
--- a/2015/rs/src/eight.txt
+++ /dev/null
@@ -1,300 +0,0 @@
-"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/2015/rs/src/five.rs b/2015/rs/src/five.rs
deleted file mode 100644
index 804d38b..0000000
--- a/2015/rs/src/five.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-static INPUT: &'static str = include_str!("five.txt");
-
-fn main() {
-  let valueified = INPUT.split('\n').filter(|s| !s.is_empty());
-
-  let nice_count = valueified.clone().filter(|s| {
-    let mut s2 = s.chars();
-    let mut last_char = s2.next().unwrap();
-
-    let mut double_flag = false;
-    let mut abcdpqxy_flag = false;
-    for c in s2 {
-      if c == last_char { double_flag = true; }
-      if [('a','b'),('c','d'),('p','q'),('x','y')].contains(&(last_char, c)) { abcdpqxy_flag = true; }
-      if double_flag && abcdpqxy_flag { break; }
-
-      last_char = c;
-    }
-
-    s.chars().filter(|c| "aeiou".contains(*c)).count() >= 3 && double_flag && !abcdpqxy_flag
-  }).count();
-  println!("Nice word count: {nice_count}");
-
-  let nice_count = valueified.filter(|s| {
-    let mut s = s.chars();
-    let mut llc = s.next().unwrap();
-    let mut lc = s.next().unwrap();
-
-    let mut dupeslist = Vec::with_capacity(32);
-    dupeslist.push((llc, lc));
-    let mut pushed = true;
-
-    let mut flag1 = false;
-    let mut flag2 = false;
-
-    for c in s {
-      if !flag1 && (lc != c || (lc == c && (llc != lc || !pushed))) && dupeslist.contains(&(lc, c)) { flag1 = true; }
-      if !flag1 && !dupeslist.contains(&(lc, c)) { dupeslist.push((lc, c)); pushed = true; } else { pushed = false; }
-
-      if c == llc { flag2 = true; }
-
-      if flag1 && flag2 { break; }
-
-      llc = lc;
-      lc = c;
-    }
-
-    flag1 && flag2
-  }).count();
-
-  println!("Nice word(v2) count: {nice_count}");
-}
diff --git a/2015/rs/src/five.txt b/2015/rs/src/five.txt
deleted file mode 100644
index a9b6e77..0000000
--- a/2015/rs/src/five.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-sszojmmrrkwuftyv
-isaljhemltsdzlum
-fujcyucsrxgatisb
-qiqqlmcgnhzparyg
-oijbmduquhfactbc
-jqzuvtggpdqcekgk
-zwqadogmpjmmxijf
-uilzxjythsqhwndh
-gtssqejjknzkkpvw
-wrggegukhhatygfi
-vhtcgqzerxonhsye
-tedlwzdjfppbmtdx
-iuvrelxiapllaxbg
-feybgiimfthtplui
-qxmmcnirvkzfrjwd
-vfarmltinsriqxpu
-oanqfyqirkraesfq
-xilodxfuxphuiiii
-yukhnchvjkfwcbiq
-bdaibcbzeuxqplop
-ivegnnpbiyxqsion
-ybahkbzpditgwdgt
-dmebdomwabxgtctu
-ibtvimgfaeonknoh
-jsqraroxudetmfyw
-dqdbcwtpintfcvuz
-tiyphjunlxddenpj
-fgqwjgntxagidhah
-nwenhxmakxqkeehg
-zdoheaxqpcnlhnen
-tfetfqojqcdzlpbm
-qpnxkuldeiituggg
-xwttlbdwxohahwar
-hjkwzadmtrkegzye
-koksqrqcfwcaxeof
-wulwmrptktliyxeq
-gyufbedqhhyqgqzj
-txpunzodohikzlmj
-jloqfuejfkemcrvu
-amnflshcheuddqtc
-pdvcsduggcogbiia
-yrioavgfmeafjpcz
-uyhbtmbutozzqfvq
-mwhgfwsgyuwcdzik
-auqylgxhmullxpaa
-lgelzivplaeoivzh
-uyvcepielfcmswoa
-qhirixgwkkccuzlp
-zoonniyosmkeejfg
-iayfetpixkedyana
-ictqeyzyqswdskiy
-ejsgqteafvmorwxe
-lhaiqrlqqwfbrqdx
-ydjyboqwhfpqfydc
-dwhttezyanrnbybv
-edgzkqeqkyojowvr
-rmjfdwsqamjqehdq
-ozminkgnkwqctrxz
-bztjhxpjthchhfcd
-vrtioawyxkivrpiq
-dpbcsznkpkaaclyy
-vpoypksymdwttpvz
-hhdlruwclartkyap
-bqkrcbrksbzcggbo
-jerbbbnxlwfvlaiw
-dwkasufidwjrjfbf
-kkfxtjhbnmqbmfwf
-vmnfziwqxmioukmj
-rqxvcultipkecdtu
-fhmfdibhtjzkiqsd
-hdpjbuzzbyafqrpd
-emszboysjuvwwvts
-msyigmwcuybfiooq
-druyksfnbluvnwoh
-fvgstvynnfbvxhsx
-bmzalvducnqtuune
-lzwkzfzttsvpllei
-olmplpvjamynfyfd
-padcwfkhystsvyfb
-wjhbvxkwtbfqdilb
-hruaqjwphonnterf
-bufjobjtvxtzjpmj
-oiedrjvmlbtwyyuy
-sgiemafwfztwsyju
-nsoqqfudrtwszyqf
-vonbxquiiwxnazyl
-yvnmjxtptujwqudn
-rrnybqhvrcgwvrkq
-taktoxzgotzxntfu
-quffzywzpxyaepxa
-rfvjebfiddcfgmwv
-iaeozntougqwnzoh
-scdqyrhoqmljhoil
-bfmqticltmfhxwld
-brbuktbyqlyfpsdl
-oidnyhjkeqenjlhd
-kujsaiqojopvrygg
-vebzobmdbzvjnjtk
-uunoygzqjopwgmbg
-piljqxgicjzgifso
-ikgptwcjzywswqnw
-pujqsixoisvhdvwi
-trtuxbgigogfsbbk
-mplstsqclhhdyaqk
-gzcwflvmstogdpvo
-tfjywbkmimyyqcjd
-gijutvhruqcsiznq
-ibxkhjvzzxgavkha
-btnxeqvznkxjsgmq
-tjgofgauxaelmjoq
-sokshvyhlkxerjrv
-ltogbivktqmtezta
-uduwytzvqvfluyuf
-msuckpthtgzhdxan
-fqmcglidvhvpirzr
-gwztkqpcwnutvfga
-bsjfgsrntdhlpqbx
-xloczbqybxmiopwt
-orvevzyjliomkkgu
-mzjbhmfjjvaziget
-tlsdxuhwdmghdyjb
-atoecyjhwmznaewi
-pyxpyvvipbqibiox
-ajbfmpqqobfsmesj
-siknbzefjblnohgd
-eqfhgewbblwdfkmc
-opylbscrotckkrbk
-lbwxbofgjkzdxkle
-ceixfjstaptdomvm
-hnkrqxifjmmjktie
-aqykzeuzvvetoygd
-fouahjimfcisxima
-prkzhutbqsyrhjzx
-qqwliakathnsbzne
-sayhgqtlcqqidqhj
-ygduolbysehdudra
-zricvxhdzznuxuce
-ucvzakslykpgsixd
-udirhgcttmyspgsb
-yuwzppjzfsjhhdzi
-gtqergjiuwookwre
-xvxexbjyjkxovvwf
-mlpaqhnnkqxrmwmm
-ezuqbrjozwuqafhb
-mcarusdthcbsonoq
-weeguqeheeiigrue
-pngtfugozxofaqxv
-copphvbjcmfspenv
-jiyahihykjjkdaya
-gdqnmesvptuyrfwp
-vbdscfywqmfxbohh
-crtrfuxyjypzubrg
-seihvevtxywxhflp
-fvvpmgttnapklwou
-qmqaqsajmqwhetpk
-zetxvrgjmblxvakr
-kpvwblrizaabmnhz
-mwpvvzaaicntrkcp
-clqyjiegtdsswqfm
-ymrcnqgcpldgfwtm
-nzyqpdenetncgnwq
-cmkzevgacnmdkqro
-kzfdsnamjqbeirhi
-kpxrvgvvxapqlued
-rzskbnfobevzrtqu
-vjoahbfwtydugzap
-ykbbldkoijlvicbl
-mfdmroiztsgjlasb
-quoigfyxwtwprmdr
-ekxjqafwudgwfqjm
-obtvyjkiycxfcdpb
-lhoihfnbuqelthof
-eydwzitgxryktddt
-rxsihfybacnpoyny
-bsncccxlplqgygtw
-rvmlaudsifnzhcqh
-huxwsyjyebckcsnn
-gtuqzyihwhqvjtes
-zreeyomtngvztveq
-nwddzjingsarhkxb
-nuqxqtctpoldrlsh
-wkvnrwqgjooovhpf
-kwgueyiyffudtbyg
-tpkzapnjxefqnmew
-ludwccvkihagvxal
-lfdtzhfadvabghna
-njqmlsnrkcfhtvbb
-cajzbqleghhnlgap
-vmitdcozzvqvzatp
-eelzefwqwjiywbcz
-uyztcuptfqvymjpi
-aorhnrpkjqqtgnfo
-lfrxfdrduoeqmwwp
-vszpjvbctblplinh
-zexhadgpqfifcqrz
-ueirfnshekpemqua
-qfremlntihbwabtb
-nwznunammfexltjc
-zkyieokaaogjehwt
-vlrxgkpclzeslqkq
-xrqrwfsuacywczhs
-olghlnfjdiwgdbqc
-difnlxnedpqcsrdf
-dgpuhiisybjpidsj
-vlwmwrikmitmoxbt
-sazpcmcnviynoktm
-pratafauetiknhln
-ilgteekhzwlsfwcn
-ywvwhrwhkaubvkbl
-qlaxivzwxyhvrxcf
-hbtlwjdriizqvjfb
-nrmsononytuwslsa
-mpxqgdthpoipyhjc
-mcdiwmiqeidwcglk
-vfbaeavmjjemfrmo
-qzcbzmisnynzibrc
-shzmpgxhehhcejhb
-wirtjadsqzydtyxd
-qjlrnjfokkqvnpue
-dxawdvjntlbxtuqc
-wttfmnrievfestog
-eamjfvsjhvzzaobg
-pbvfcwzjgxahlrag
-omvmjkqqnobvnzkn
-lcwmeibxhhlxnkzv
-uiaeroqfbvlazegs
-twniyldyuonfyzqw
-wgjkmsbwgfotdabi
-hnomamxoxvrzvtew
-ycrcfavikkrxxfgw
-isieyodknagzhaxy
-mgzdqwikzullzyco
-mumezgtxjrrejtrs
-nwmwjcgrqiwgfqel
-wjgxmebfmyjnxyyp
-durpspyljdykvzxf
-zuslbrpooyetgafh
-kuzrhcjwbdouhyme
-wyxuvbciodscbvfm
-kbnpvuqwmxwfqtqe
-zddzercqogdpxmft
-sigrdchxtgavzzjh
-lznjolnorbuddgcs
-ycnqabxlcajagwbt
-bnaudeaexahdgxsj
-rlnykxvoctfwanms
-jngyetkoplrstfzt
-tdpxknwacksotdub
-yutqgssfoptvizgr
-lzmqnxeqjfnsxmsa
-iqpgfsfmukovsdgu
-qywreehbidowtjyz
-iozamtgusdctvnkw
-ielmujhtmynlwcfd
-hzxnhtbnmmejlkyf
-ftbslbzmiqkzebtd
-bcwdqgiiizmohack
-dqhfkzeddjzbdlxu
-mxopokqffisxosci
-vciatxhtuechbylk
-khtkhcvelidjdena
-blatarwzfqcapkdt
-elamngegnczctcck
-xeicefdbwrxhuxuf
-sawvdhjoeahlgcdr
-kmdcimzsfkdfpnir
-axjayzqlosrduajb
-mfhzreuzzumvoggr
-iqlbkbhrkptquldb
-xcvztvlshiefuhgb
-pkvwyqmyoazocrio
-ajsxkdnerbmhyxaj
-tudibgsbnpnizvsi
-cxuiydkgdccrqvkh
-cyztpjesdzmbcpot
-nnazphxpanegwitx
-uphymczbmjalmsct
-yyxiwnlrogyzwqmg
-gmqwnahjvvdyhnfa
-utolskxpuoheugyl
-mseszdhyzoyavepd
-ycqknvbuvcjfgmlc
-sknrxhxbfpvpeorn
-zqxqjetooqcodwml
-sesylkpvbndrdhsy
-fryuxvjnsvnjrxlw
-mfxusewqurscujnu
-mbitdjjtgzchvkfv
-ozwlyxtaalxofovd
-wdqcduaykxbunpie
-rlnhykxiraileysk
-wgoqfrygttlamobg
-kflxzgxvcblkpsbz
-tmkisflhativzhde
-owsdrfgkaamogjzd
-gaupjkvkzavhfnes
-wknkurddcknbdleg
-lltviwincmbtduap
-qwzvspgbcksyzzmb
-ydzzkumecryfjgnk
-jzvmwgjutxoysaam
-icrwpyhxllbardkr
-jdopyntshmvltrve
-afgkigxcuvmdbqou
-mfzzudntmvuyhjzt
-duxhgtwafcgrpihc
-tsnhrkvponudumeb
-sqtvnbeiigdzbjgv
-eczmkqwvnsrracuo
-mhehsgqwiczaiaxv
-kaudmfvifovrimpd
-lupikgivechdbwfr
-mwaaysrndiutuiqx
-aacuiiwgaannunmm
-tjqjbftaqitukwzp
-lrcqyskykbjpaekn
-lirrvofbcqpjzxmr
-jurorvzpplyelfml
-qonbllojmloykjqe
-sllkzqujfnbauuqp
-auexjwsvphvikali
-usuelbssqmbrkxyc
-wyuokkfjexikptvv
-wmfedauwjgbrgytl
-sfwvtlzzebxzmuvw
-rdhqxuechjsjcvaf
-kpavhqkukugocsxu
-ovnjtumxowbxduts
-zgerpjufauptxgat
-pevvnzjfwhjxdoxq
-pmmfwxajgfziszcs
-difmeqvaghuitjhs
-icpwjbzcmlcterwm
-ngqpvhajttxuegyh
-mosjlqswdngwqsmi
-frlvgpxrjolgodlu
-eazwgrpcxjgoszeg
-bbtsthgkjrpkiiyk
-tjonoglufuvsvabe
-xhkbcrofytmbzrtk
-kqftfzdmpbxjynps
-kmeqpocbnikdtfyv
-qjjymgqxhnjwxxhp
-dmgicrhgbngdtmjt
-zdxrhdhbdutlawnc
-afvoekuhdboxghvx
-hiipezngkqcnihty
-bbmqgheidenweeov
-suprgwxgxwfsgjnx
-adeagikyamgqphrj
-zzifqinoeqaorjxg
-adhgppljizpaxzld
-lvxyieypvvuqjiyc
-nljoakatwwwoovzn
-fcrkfxclcacshhmx
-ownnxqtdhqbgthch
-lmfylrcdmdkgpwnj
-hlwjfbvlswbzpbjr
-mkofhdtljdetcyvp
-synyxhifbetzarpo
-agnggugngadrcxoc
-uhttadmdmhidpyjw
-ohfwjfhunalbubpr
-pzkkkkwrlvxiuysn
-kmidbxmyzkjrwjhu
-egtitdydwjxmajnw
-civoeoiuwtwgbqqs
-dfptsguzfinqoslk
-tdfvkreormspprer
-zvnvbrmthatzztwi
-ffkyddccrrfikjde
-hrrmraevdnztiwff
-qaeygykcpbtjwjbr
-purwhitkmrtybslh
-qzziznlswjaussel
-dfcxkvdpqccdqqxj
-tuotforulrrytgyn
-gmtgfofgucjywkev
-wkyoxudvdkbgpwhd
-qbvktvfvipftztnn
-otckgmojziezmojb
-inxhvzbtgkjxflay
-qvxapbiatuudseno
-krpvqosbesnjntut
-oqeukkgjsfuqkjbb
-prcjnyymnqwqksiz
-vuortvjxgckresko
-orqlyobvkuwgathr
-qnpyxlnazyfuijox
-zwlblfkoklqmqzkw
-hmwurwtpwnrcsanl
-jzvxohuakopuzgpf
-sfcpnxrviphhvxmx
-qtwdeadudtqhbely
-dbmkmloasqphnlgj
-olylnjtkxgrubmtk
-nxsdbqjuvwrrdbpq
-wbabpirnpcsmpipw
-hjnkyiuxpqrlvims
-enzpntcjnxdpuqch
-vvvqhlstzcizyimn
-triozhqndbttglhv
-fukvgteitwaagpzx
-uhcvukfbmrvskpen
-tizcyupztftzxdmt
-vtkpnbpdzsaluczz
-wodfoyhoekidxttm
-otqocljrmwfqbxzu
-linfbsnfvixlwykn
-vxsluutrwskslnye
-zbshygtwugixjvsi
-zdcqwxvwytmzhvoo
-wrseozkkcyctrmei
-fblgtvogvkpqzxiy
-opueqnuyngegbtnf
-qxbovietpacqqxok
-zacrdrrkohfygddn
-gbnnvjqmkdupwzpq
-qgrgmsxeotozvcak
-hnppukzvzfmlokid
-dzbheurndscrrtcl
-wbgdkadtszebbrcw
-fdmzppzphhpzyuiz
-bukomunhrjrypohj
-ohodhelegxootqbj
-rsplgzarlrknqjyh
-punjjwpsxnhpzgvu
-djdfahypfjvpvibm
-mlgrqsmhaozatsvy
-xwktrgyuhqiquxgn
-wvfaoolwtkbrisvf
-plttjdmguxjwmeqr
-zlvvbwvlhauyjykw
-cigwkbyjhmepikej
-masmylenrusgtyxs
-hviqzufwyetyznze
-nzqfuhrooswxxhus
-pdbdetaqcrqzzwxf
-oehmvziiqwkzhzib
-icgpyrukiokmytoy
-ooixfvwtiafnwkce
-rvnmgqggpjopkihs
-wywualssrmaqigqk
-pdbvflnwfswsrirl
-jeaezptokkccpbuj
-mbdwjntysntsaaby
-ldlgcawkzcwuxzpz
-lwktbgrzswbsweht
-ecspepmzarzmgpjm
-qmfyvulkmkxjncai
-izftypvwngiukrns
-zgmnyjfeqffbooww
-nyrkhggnprhedows
-yykzzrjmlevgffah
-mavaemfxhlfejfki
-cmegmfjbkvpncqwf
-zxidlodrezztcrij
-fseasudpgvgnysjv
-fupcimjupywzpqzp
-iqhgokavirrcvyys
-wjmkcareucnmfhui
-nftflsqnkgjaexhq
-mgklahzlcbapntgw
-kfbmeavfxtppnrxn
-nuhyvhknlufdynvn
-nviogjxbluwrcoec
-tyozixxxaqiuvoys
-kgwlvmvgtsvxojpr
-moeektyhyonfdhrb
-kahvevmmfsmiiqex
-xcywnqzcdqtvhiwd
-fnievhiyltbvtvem
-jlmndqufirwgtdxd
-muypbfttoeelsnbs
-rypxzbnujitfwkou
-ubmmjbznskildeoj
-ofnmizdeicrmkjxp
-rekvectjbmdnfcib
-yohrojuvdexbctdh
-gwfnfdeibynzjmhz
-jfznhfcqdwlpjull
-scrinzycfhwkmmso
-mskutzossrwoqqsi
-rygoebkzgyzushhr
-jpjqiycflqkexemx
-arbufysjqmgaapnl
-dbjerflevtgweeoj
-snybnnjlmwjvhois
-fszuzplntraprmbj
-mkvaatolvuggikvg
-zpuzuqygoxesnuyc
-wnpxvmxvllxalulm
-eivuuafkvudeouwy
-rvzckdyixetfuehr
-qgmnicdoqhveahyx
-miawwngyymshjmpj
-pvckyoncpqeqkbmx
-llninfenrfjqxurv
-kzbjnlgsqjfuzqtp
-rveqcmxomvpjcwte
-bzotkawzbopkosnx
-ktqvpiribpypaymu
-wvlzkivbukhnvram
-uohntlcoguvjqqdo
-ajlsiksjrcnzepkt
-xsqatbldqcykwusd
-ihbivgzrwpmowkop
-vfayesfojmibkjpb
-uaqbnijtrhvqxjtb
-hhovshsfmvkvymba
-jerwmyxrfeyvxcgg
-hncafjwrlvdcupma
-qyvigggxfylbbrzt
-hiiixcyohmvnkpgk
-mmitpwopgxuftdfu
-iaxderqpceboixoa
-zodfmjhuzhnsqfcb
-sthtcbadrclrazsi
-bkkkkcwegvypbrio
-wmpcofuvzemunlhj
-gqwebiifvqoeynro
-juupusqdsvxcpsgv
-rbhdfhthxelolyse
-kjimpwnjfrqlqhhz
-rcuigrjzarzpjgfq
-htxcejfyzhydinks
-sxucpdxhvqjxxjwf
-omsznfcimbcwaxal
-gufmtdlhgrsvcosb
-bssshaqujtmluerz
-uukotwjkstgwijtr
-kbqkneobbrdogrxk
-ljqopjcjmelgrakz
-rwtfnvnzryujwkfb
-dedjjbrndqnilbeh
-nzinsxnpptzagwlb
-lwqanydfirhnhkxy
-hrjuzfumbvfccxno
-okismsadkbseumnp
-sfkmiaiwlktxqvwa
-hauwpjjwowbunbjj
-nowkofejwvutcnui
-bqzzppwoslaeixro
-urpfgufwbtzenkpj
-xgeszvuqwxeykhef
-yxoldvkyuikwqyeq
-onbbhxrnmohzskgg
-qcikuxakrqeugpoa
-lnudcqbtyzhlpers
-nxduvwfrgzaailgl
-xniuwvxufzxjjrwz
-ljwithcqmgvntjdj
-awkftfagrfzywkhs
-uedtpzxyubeveuek
-bhcqdwidbjkqqhzl
-iyneqjdmlhowwzxx
-kvshzltcrrururty
-zgfpiwajegwezupo
-tkrvyanujjwmyyri
-ercsefuihcmoaiep
-ienjrxpmetinvbos
-jnwfutjbgenlipzq
-bgohjmrptfuamzbz
-rtsyamajrhxbcncw
-tfjdssnmztvbnscs
-bgaychdlmchngqlp
-kfjljiobynhwfkjo
-owtdxzcpqleftbvn
-ltjtimxwstvzwzjj
-wbrvjjjajuombokf
-zblpbpuaqbkvsxye
-gwgdtbpnlhyqspdi
-abipqjihjqfofmkx
-nlqymnuvjpvvgova
-avngotmhodpoufzn
-qmdyivtzitnrjuae
-xfwjmqtqdljuerxi
-csuellnlcyqaaamq
-slqyrcurcyuoxquo
-dcjmxyzbzpohzprl
-uqfnmjwniyqgsowb
-rbmxpqoblyxdocqc
-ebjclrdbqjhladem
-ainnfhxnsgwqnmyo
-eyytjjwhvodtzquf
-iabjgmbbhilrcyyp
-pqfnehkivuelyccc
-xgjbyhfgmtseiimt
-jwxyqhdbjiqqqeyy
-gxsbrncqkmvaryln
-vhjisxjkinaejytk
-seexagcdmaedpcvh
-lvudfgrcpjxzdpvd
-fxtegyrqjzhmqean
-dnoiseraqcoossmc
-nwrhmwwbykvwmgep
-udmzskejvizmtlce
-hbzvqhvudfdlegaa
-cghmlfqejbxewskv
-bntcmjqfwomtbwsb
-qezhowyopjdyhzng
-todzsocdkgfxanbz
-zgjkssrjlwxuhwbk
-eibzljqsieriyrzr
-wamxvzqyycrxotjp
-epzvfkispwqynadu
-dwlpfhtrafrxlyie
-qhgzujhgdruowoug
-girstvkahaemmxvh
-baitcrqmxhazyhbl
-xyanqcchbhkajdmc
-gfvjmmcgfhvgnfdq
-tdfdbslwncbnkzyz
-jojuselkpmnnbcbb
-hatdslkgxtqpmavj
-dvelfeddvgjcyxkj
-gnsofhkfepgwltse
-mdngnobasfpewlno
-qssnbcyjgmkyuoga
-glvcmmjytmprqwvn
-gwrixumjbcdffsdl
-lozravlzvfqtsuiq
-sicaflbqdxbmdlch
-inwfjkyyqbwpmqlq
-cuvszfotxywuzhzi
-igfxyoaacoarlvay
-ucjfhgdmnjvgvuni
-rvvkzjsytqgiposh
-jduinhjjntrmqroz
-yparkxbgsfnueyll
-lyeqqeisxzfsqzuj
-woncskbibjnumydm
-lltucklragtjmxtl
-ubiyvmyhlesfxotj
-uecjseeicldqrqww
-xxlxkbcthufnjbnm
-lhqijovvhlffpxga
-fzdgqpzijitlogjz
-efzzjqvwphomxdpd
-jvgzvuyzobeazssc
-hejfycgxywfjgbfw
-yhjjmvkqfbnbliks
-sffvfyywtlntsdsz
-dwmxqudvxqdenrur
-asnukgppdemxrzaz
-nwqfnumblwvdpphx
-kqsmkkspqvxzuket
-cpnraovljzqiquaz
-qrzgrdlyyzbyykhg
-opoahcbiydyhsmqe
-hjknnfdauidjeydr
-hczdjjlygoezadow
-rtflowzqycimllfv
-sfsrgrerzlnychhq
-bpahuvlblcolpjmj
-albgnjkgmcrlaicl
-pijyqdhfxpaxzdex
-eeymiddvcwkpbpux
-rqwkqoabywgggnln
-vckbollyhgbgmgwh
-ylzlgvnuvpynybkm
-hpmbxtpfosbsjixt
-ocebeihnhvkhjfqz
-tvctyxoujdgwayze
-efvhwxtuhapqxjen
-rusksgefyidldmpo
-nkmtjvddfmhirmzz
-whvtsuadwofzmvrt
-iiwjqvsdxudhdzzk
-gucirgxaxgcassyo
-rmhfasfzexeykwmr
-hynlxcvsbgosjbis
-huregszrcaocueen
-pifezpoolrnbdqtv
-unatnixzvdbqeyox
-xtawlpduxgacchfe
-bdvdbflqfphndduf
-xtdsnjnmzccfptyt
-nkhsdkhqtzqbphhg
-aqcubmfkczlaxiyb
-moziflxpsfubucmv
-srdgnnjtfehiimqx
-pwfalehdfyykrohf
-sysxssmvewyfjrve
-brsemdzosgqvvlxe
-bimbjoshuvflkiat
-hkgjasmljkpkwwku
-sbnmwjvodygobpqc
-bbbqycejueruihhd
-corawswvlvneipyc
-gcyhknmwsczcxedh
-kppakbffdhntmcqp
-ynulzwkfaemkcefp
-pyroowjekeurlbii
-iwksighrswdcnmxf
-glokrdmugreygnsg
-xkmvvumnfzckryop
-aesviofpufygschi
-csloawlirnegsssq
-fkqdqqmlzuxbkzbc
-uzlhzcfenxdfjdzp
-poaaidrktteusvyf
-zrlyfzmjzfvivcfr
-qwjulskbniitgqtx
-gjeszjksbfsuejki
-vczdejdbfixbduaq
-knjdrjthitjxluth
-jweydeginrnicirl
-bottrfgccqhyycsl
-eiquffofoadmbuhk
-lbqfutmzoksscswf
-xfmdvnvfcnzjprba
-uvugkjbkhlaoxmyx
-wadlgtpczgvcaqqv
-inzrszbtossflsxk
-dbzbtashaartczrj
-qbjiqpccefcfkvod
-hluujmokjywotvzy
-thwlliksfztcmwzh
-arahybspdaqdexrq
-nuojrmsgyipdvwyx
-hnajdwjwmzattvst
-sulcgaxezkprjbgu
-rjowuugwdpkjtypw
-oeugzwuhnrgiaqga
-wvxnyymwftfoswij
-pqxklzkjpcqscvde
-tuymjzknntekglqj
-odteewktugcwlhln
-exsptotlfecmgehc
-eeswfcijtvzgrqel
-vjhrkiwmunuiwqau
-zhlixepkeijoemne
-pavfsmwesuvebzdd
-jzovbklnngfdmyws
-nbajyohtzfeoiixz
-ciozmhrsjzrwxvhz
-gwucrxieqbaqfjuv
-uayrxrltnohexawc
-flmrbhwsfbcquffm
-gjyabmngkitawlxc
-rwwtggvaygfbovhg
-xquiegaisynictjq
-oudzwuhexrwwdbyy
-lengxmguyrwhrebb
-uklxpglldbgqsjls
-dbmvlfeyguydfsxq
-zspdwdqcrmtmdtsc
-mqfnzwbfqlauvrgc
-amcrkzptgacywvhv
-ndxmskrwrqysrndf
-mwjyhsufeqhwisju
-srlrukoaenyevykt
-tnpjtpwawrxbikct
-geczalxmgxejulcv
-tvkcbqdhmuwcxqci
-tiovluvwezwwgaox
-zrjhtbgajkjqzmfo
-vcrywduwsklepirs
-lofequdigsszuioy
-wxsdzomkjqymlzat
-iabaczqtrfbmypuy
-ibdlmudbajikcncr
-rqcvkzsbwmavdwnv
-ypxoyjelhllhbeog
-fdnszbkezyjbttbg
-uxnhrldastpdjkdz
-xfrjbehtxnlyzcka
-omjyfhbibqwgcpbv
-eguucnoxaoprszmp
-xfpypldgcmcllyzz
-aypnmgqjxjqceelv
-mgzharymejlafvgf
-tzowgwsubbaigdok
-ilsehjqpcjwmylxc
-pfmouwntfhfnmrwk
-csgokybgdqwnduwp
-eaxwvxvvwbrovypz
-nmluqvobbbmdiwwb
-lnkminvfjjzqbmio
-mjiiqzycqdhfietz
-towlrzriicyraevq
-obiloewdvbrsfwjo
-lmeooaajlthsfltw
-ichygipzpykkesrw
-gfysloxmqdsfskvt
-saqzntehjldvwtsx
-pqddoemaufpfcaew
-mjrxvbvwcreaybwe
-ngfbrwfqnxqosoai
-nesyewxreiqvhald
-kqhqdlquywotcyfy
-liliptyoqujensfi
-nsahsaxvaepzneqq
-zaickulfjajhctye
-gxjzahtgbgbabtht
-koxbuopaqhlsyhrp
-jhzejdjidqqtjnwe
-dekrkdvprfqpcqki
-linwlombdqtdeyop
-dvckqqbnigdcmwmx
-yaxygbjpzkvnnebv
-rlzkdkgaagmcpxah
-cfzuyxivtknirqvt
-obivkajhsjnrxxhn
-lmjhayymgpseuynn
-bbjyewkwadaipyju
-lmzyhwomfypoftuu
-gtzhqlgltvatxack
-jfflcfaqqkrrltgq
-txoummmnzfrlrmcg
-ohemsbfuqqpucups
-imsfvowcbieotlok
-tcnsnccdszxfcyde
-qkcdtkwuaquajazz
-arcfnhmdjezdbqku
-srnocgyqrlcvlhkb
-mppbzvfmcdirbyfw
-xiuarktilpldwgwd
-ypufwmhrvzqmexpc
-itpdnsfkwgrdujmj
-cmpxnodtsswkyxkr
-wayyxtjklfrmvbfp
-mfaxphcnjczhbbwy
-sjxhgwdnqcofbdra
-pnxmujuylqccjvjm
-ivamtjbvairwjqwl
-deijtmzgpfxrclss
-bzkqcaqagsynlaer
-tycefobvxcvwaulz
-ctbhnywezxkdsswf
-urrxxebxrthtjvib
-fpfelcigwqwdjucv
-ngfcyyqpqulwcphb
-rltkzsiipkpzlgpw
-qfdsymzwhqqdkykc
-balrhhxipoqzmihj
-rnwalxgigswxomga
-ghqnxeogckshphgr
-lyyaentdizaumnla
-exriodwfzosbeoib
-speswfggibijfejk
-yxmxgfhvmshqszrq
-hcqhngvahzgawjga
-qmhlsrfpesmeksur
-eviafjejygakodla
-kvcfeiqhynqadbzv
-fusvyhowslfzqttg
-girqmvwmcvntrwau
-yuavizroykfkdekz
-jmcwohvmzvowrhxf
-kzimlcpavapynfue
-wjudcdtrewfabppq
-yqpteuxqgbmqfgxh
-xdgiszbuhdognniu
-jsguxfwhpftlcjoh
-whakkvspssgjzxre
-ggvnvjurlyhhijgm
-krvbhjybnpemeptr
-pqedgfojyjybfbzr
-jzhcrsgmnkwwtpdo
-yyscxoxwofslncmp
-gzjhnxytmyntzths
-iteigbnqbtpvqumi
-zjevfzusnjukqpfw
-xippcyhkfuounxqk
-mcnhrcfonfdgpkyh
-pinkcyuhjkexbmzj
-lotxrswlxbxlxufs
-fmqajrtoabpckbnu
-wfkwsgmcffdgaqxg
-qfrsiwnohoyfbidr
-czfqbsbmiuyusaqs
-ieknnjeecucghpoo
-cevdgqnugupvmsge
-gjkajcyjnxdrtuvr
-udzhrargnujxiclq
-zqqrhhmjwermjssg
-ggdivtmgoqajydzz
-wnpfsgtxowkjiivl
-afbhqawjbotxnqpd
-xjpkifkhfjeqifdn
-oyfggzsstfhvticp
-kercaetahymeawxy
-khphblhcgmbupmzt
-iggoqtqpvaebtiol
-ofknifysuasshoya
-qxuewroccsbogrbv
-apsbnbkiopopytgu
-zyahfroovfjlythh
-bxhjwfgeuxlviydq
-uvbhdtvaypasaswa
-qamcjzrmesqgqdiz
-hjnjyzrxntiycyel
-wkcrwqwniczwdxgq
-hibxlvkqakusswkx
-mzjyuenepwdgrkty
-tvywsoqslfsulses
-jqwcwuuisrclircv
-xanwaoebfrzhurct
-ykriratovsvxxasf
-qyebvtqqxbjuuwuo
-telrvlwvriylnder
-acksrrptgnhkeiaa
-yemwfjhiqlzsvdxf
-banrornfkcymmkcc
-ytbhxvaeiigjpcgm
-crepyazgxquposkn
-xlqwdrytzwnxzwzv
-xtrbfbwopxscftps
-kwbytzukgseeyjla
-qtfdvavvjogybxjg
-ytbmvmrcxwfkgvzw
-nbscbdskdeocnfzr
-sqquwjbdxsxhcseg
-ewqxhigqcgszfsuw
-cvkyfcyfmubzwsee
-dcoawetekigxgygd
-ohgqnqhfimyuqhvi
-otisopzzpvnhctte
-bauieohjejamzien
-ewnnopzkujbvhwce
-aeyqlskpaehagdiv
-pncudvivwnnqspxy
-ytugesilgveokxcg
-zoidxeelqdjesxpr
-ducjccsuaygfchzj
-smhgllqqqcjfubfc
-nlbyyywergronmir
-prdawpbjhrzsbsvj
-nmgzhnjhlpcplmui
-eflaogtjghdjmxxz
-qolvpngucbkprrdc
-ixywxcienveltgho
-mwnpqtocagenkxut
-iskrfbwxonkguywx
-ouhtbvcaczqzmpua
-srewprgddfgmdbao
-dyufrltacelchlvu
-czmzcbrkecixuwzz
-dtbeojcztzauofuk
-prrgoehpqhngfgmw
-baolzvfrrevxsyke
-zqadgxshwiarkzwh
-vsackherluvurqqj
-surbpxdulvcvgjbd
-wqxytarcxzgxhvtx
-vbcubqvejcfsgrac
-zqnjfeapshjowzja
-hekvbhtainkvbynx
-knnugxoktxpvoxnh
-knoaalcefpgtvlwm
-qoakaunowmsuvkus
-ypkvlzcduzlezqcb
-ujhcagawtyepyogh
-wsilcrxncnffaxjf
-gbbycjuscquaycrk
-aduojapeaqwivnly
-ceafyxrakviagcjy
-nntajnghicgnrlst
-vdodpeherjmmvbje
-wyyhrnegblwvdobn
-xlfurpghkpbzhhif
-xyppnjiljvirmqjo
-kglzqahipnddanpi
-omjateouxikwxowr
-ocifnoopfglmndcx
-emudcukfbadyijev
-ooktviixetfddfmh
-wtvrhloyjewdeycg
-cgjncqykgutfjhvb
-nkwvpswppeffmwad
-hqbcmfhzkxmnrivg
-mdskbvzguxvieilr
-anjcvqpavhdloaqh
-erksespdevjylenq
-fadxwbmisazyegup
-iyuiffjmcaahowhj
-ygkdezmynmltodbv
-fytneukxqkjattvh
-woerxfadbfrvdcnz
-iwsljvkyfastccoa
-movylhjranlorofe
-drdmicdaiwukemep
-knfgtsmuhfcvvshg
-ibstpbevqmdlhajn
-tstwsswswrxlzrqs
-estyydmzothggudf
-jezogwvymvikszwa
-izmqcwdyggibliet
-nzpxbegurwnwrnca
-kzkojelnvkwfublh
-xqcssgozuxfqtiwi
-tcdoigumjrgvczfv
-ikcjyubjmylkwlwq
-kqfivwystpqzvhan
-bzukgvyoqewniivj
-iduapzclhhyfladn
-fbpyzxdfmkrtfaeg
-yzsmlbnftftgwadz
diff --git a/2015/rs/src/four.rs b/2015/rs/src/four.rs
deleted file mode 100644
index 177ddc5..0000000
--- a/2015/rs/src/four.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-use md5::{Digest, Md5};
-use std::fmt::Write;
-use std::io::Write as WriteI;
-
-static INPUT: &'static [u8] = b"yzbqklnj";
-
-fn main() {
-  let mut buf = Vec::with_capacity(INPUT.len() + 10);
-  buf.extend_from_slice(INPUT);
-
-  for i in 0.. {
-    if i % 1000 == 0 { print!("{i}\r"); std::io::stdout().flush(); }
-
-    let mut hasher = Md5::new();
-    write!(&mut buf, "{i}");
-    hasher.update(buf.as_slice());
-    let hash = hasher.finalize();
-    if hash.starts_with(&[0, 0]) && hash[2] < 16 {
-      let mut hexhash = String::with_capacity(32);
-      for digit in hash {
-        write!(&mut hexhash, "{digit:02x}");
-      }
-      println!("Got 5 digit hash: {hexhash}, at {i}");
-      break;
-    }
-    buf.truncate(INPUT.len());
-  }
-
-  for i in 0.. {
-    if i % 1000 == 0 { print!("{i}\r"); std::io::stdout().flush(); }
-
-    let mut hasher = Md5::new();
-    write!(&mut buf, "{i}");
-    hasher.update(buf.as_slice());
-    let hash = hasher.finalize();
-    if hash.starts_with(&[0, 0, 0]) {
-      let mut hexhash = String::with_capacity(32);
-      for digit in hash {
-        write!(&mut hexhash, "{digit:02x}");
-      }
-      println!("Got 6 digit hash: {hexhash}, at {i}");
-      break;
-    }
-    buf.truncate(INPUT.len());
-  }
-}
diff --git a/2015/rs/src/nine.rs b/2015/rs/src/nine.rs
deleted file mode 100644
index bc716c2..0000000
--- a/2015/rs/src/nine.rs
+++ /dev/null
@@ -1,53 +0,0 @@
-#![feature(iter_next_chunk)]
-
-use std::collections::{HashSet, HashMap};
-use std::io::Write;
-
-static INPUT: &'static str = include_str!("nine.txt");
-
-fn main() {
-  let valueified = INPUT.split('\n').filter(|s| !s.is_empty())
-    .flat_map(|s| {
-      let [rhs, dist] = s.split(" = ").next_chunk::<2>().unwrap();
-      let [from, to] = rhs.split(" to ").next_chunk::<2>().unwrap();
-      let dist = dist.parse::<usize>().unwrap();
-      [(from, to, dist), (to, from, dist)]
-    });
-
-  let paths: HashMap<&'static str, Vec<(&'static str, usize)>> = valueified
-    .map(|(a,b,c)| (a, (b, c)))
-    .fold(HashMap::new(), |mut map, (k, v)| {map.entry(k).or_default().push(v); map});
-  let mut path = Vec::new();
-  let mut bestpath = Vec::new();
-  let mut bestdist = usize::MAX;
-  let mut worstpath = Vec::new();
-  let mut worstdist = 0;
-  for start in paths.keys() {
-    path.clear();
-    path.push(*start);
-    walk_steps(&mut path, 0, &mut bestpath, &mut bestdist, &mut worstpath, &mut worstdist, &paths);
-  }
-  println!("Best route: {} with dist = {bestdist}", bestpath.join(" => "));
-  println!("Worst route: {} with dist = {worstdist}", worstpath.join(" => "));
-}
-
-fn walk_steps(path: &mut Vec<&'static str>, dist: usize, bestpath: &mut Vec<&'static str>, bestdist: &mut usize, worstpath: &mut Vec<&'static str>, worstdist: &mut usize, steps: &HashMap<&'static str, Vec<(&'static str, usize)>>) {
-  if path.len() != steps.len() {
-    let prev = path.last().unwrap();
-    for (step, stepdist) in &steps[prev] {
-      if path.contains(step) { continue; }
-      path.push(step);
-      walk_steps(path, dist + stepdist, bestpath, bestdist, worstpath, worstdist, steps);
-      path.pop();
-    }
-  } else {
-    if dist < *bestdist {
-      *bestpath = path.clone();
-      *bestdist = dist;
-    }
-    else if dist > *worstdist {
-      *worstpath = path.clone();
-      *worstdist = dist;
-    }
-  }
-}
diff --git a/2015/rs/src/nine.txt b/2015/rs/src/nine.txt
deleted file mode 100644
index 97a6b63..0000000
--- a/2015/rs/src/nine.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-Faerun to Tristram = 65
-Faerun to Tambi = 129
-Faerun to Norrath = 144
-Faerun to Snowdin = 71
-Faerun to Straylight = 137
-Faerun to AlphaCentauri = 3
-Faerun to Arbre = 149
-Tristram to Tambi = 63
-Tristram to Norrath = 4
-Tristram to Snowdin = 105
-Tristram to Straylight = 125
-Tristram to AlphaCentauri = 55
-Tristram to Arbre = 14
-Tambi to Norrath = 68
-Tambi to Snowdin = 52
-Tambi to Straylight = 65
-Tambi to AlphaCentauri = 22
-Tambi to Arbre = 143
-Norrath to Snowdin = 8
-Norrath to Straylight = 23
-Norrath to AlphaCentauri = 136
-Norrath to Arbre = 115
-Snowdin to Straylight = 101
-Snowdin to AlphaCentauri = 84
-Snowdin to Arbre = 96
-Straylight to AlphaCentauri = 107
-Straylight to Arbre = 14
-AlphaCentauri to Arbre = 46
diff --git a/2015/rs/src/one.rs b/2015/rs/src/one.rs
deleted file mode 100644
index c23c1bd..0000000
--- a/2015/rs/src/one.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-static INPUT: &'static str = include_str!("one.txt");
-
-fn main() {
-  let valueified = INPUT.chars().map(|c| match c { '(' => 1, ')' => -1, _ => 0});
-  let floor_number: i32 = valueified.clone().sum();
-  println!("Floor number: {floor_number}");
-
-  let mut floor = 0;
-  let basement_index = valueified.take_while(|i| {floor += i; floor >= 0}).count() + 1;
-  println!("First character in basement: {basement_index}");
-}
diff --git a/2015/rs/src/one.txt b/2015/rs/src/one.txt
deleted file mode 100644
index 2d4ad8f..0000000
--- a/2015/rs/src/one.txt
+++ /dev/null
@@ -1 +0,0 @@
-()(((()))(()()()((((()(((())(()(()((((((()(()(((())))((()(((()))((())(()((()()()()(((())(((((((())))()()(()(()(())(((((()()()((())(((((()()))))()(())(((())(())((((((())())))(()())))()))))()())()())((()()((()()()()(()((((((((()()())((()()(((((()(((())((())(()))()((((()((((((((())()((()())(())((()))())((((()())(((((((((((()()(((((()(()))())(((()(()))())((()(()())())())(()(((())(())())()()(()(()((()))((()))))((((()(((()))))((((()(()(()())())()(((()((((())((((()(((()()(())()()()())((()((((((()((()()))()((()))()(()()((())))(((()(((()))((()((()(()))(((()()(()(()()()))))()()(((()(((())())))))((()(((())()(()(())((()())))((((())))(()(()(()())()((()())))(((()((()(())()()((()((())(()()((())(())()))()))((()(())()))())(((((((()(()()(()(())())))))))(()((((((())((((())((())())(()()))))()(())(()())()())((())(()))))(()))(()((()))()(()((((((()()()()((((((((()(()(())((()()(()()))(())()())()((())))()))()())(((()))(())()(())()))()((()((()(()()())(())()()()((())())))((()()(()()((()(())()()())(((()(()()))))(())))(()(()())()))()()))))))()))))((((((())))())))(()(())())(()())))))(()))()))))))()((()))))()))))(()(()((()())())(()()))))(((())()))())())())(((()(()()))(())()(())(())((((((()()))))((()(()))))))(()))())(((()()(()))()())()()()())))))))))))))(())(()))(()))((()(())(()())(())())(()())(())()()(()())))()()()))(())())()))())())(())((())))))))(())))(())))))()))))((())(()(((()))))(()))()((()(())))(()())(((((()))()())()()))))()))))()))())(()(()()()))()))))))((()))))))))))()((()))((()(())((())()()(()()))()(()))))()()(()))()))(((())))(())()((())(())(()())()())())))))))())))()((())))()))(()))()()))(((((((()))())(()()))(()()(()))()(()((()())()))))))(((()()()())))(())()))()())(()()))()()))))))))(())))()))()()))))))()))()())))()(())(())))))()(())()()(()()))))())((()))))()))))(()(((((()))))))))())))())()(())()()))))(())))())()()())()()())()(()))))()))()))))))))())))((()))()))()))())))()())()()())))())))(()((())()((()))())))))())()(())((())))))))))))())()())(())())())(()))(()))()))())(()(())())()())()()(()))))(()(())))))))(())))())(())))))))())()()(())())())))(())))))()))()(()())()(()))())())))))()()(()))()))))())))))))))()))))()))))))())()())()()))))()())))())))))))))))()()))))()()(((()))()()(())()))))((()))))(()))(())())))(())()))))))(()))()))))(())())))))()))(()())))))))))))))())))))))))()((()())(()())))))))((()))))(())(())))()(()())())))())())(()()()())))()))))))())))))())()()())))))))))))()()(()))))()())()))((()())(()))))()(()))))))))))()())())(((())(()))))())()))()))()))))))()))))))(()))))()))))()(())))(())))(()))())()()(()()))()))(()()))))))))()))(()))())(()()(()(()())()()))()))))))))(())))))((()()(()))())())))))()))())(()())()()))())))()(()()()()))((())())))())()(()()))()))))))))(()))(())))()))))(()(()())(()))))()())())()))()()))())))))))))))())()))))))()))))))))())))))()))))())(()())))(())()))())())))))()()(()()())(()())))()()))(((()))(()()()))))()))))()))))((())))()((((((()()))))))())))))))))))(((()))))))))))))(())())))))())(()))))))(()))((()))())))()(()((()))()))()))))))))))())()))()(()()))))())))())(())()(()))()))())(()))()))))(()()))()()(())))))()))(())(()(()()))(()()())))))(((()))))))()))))))))))))(())(()))))()())())()()((()()))())))))(()))))())))))))()()()))))))))())))()(((()()))(())))))(((())())))))((()))()(()))(()))))(()())))(()))())))))()))))(())(())))()((()))(())())))()()))()))))))))()))(()()()(()()()(()))())(())()())(((()))(())))))))))(((()())))()()))))))))()(())(()))()((((())(())(()())))()))(((())()()()))((()))(()))())())))())))(()))())()())())(()(())())()()()(())))())(())))(())))(())()))()))(()((()))))))))())(()))))))())(()()))()()))()(()(()())))()()(()((()((((((()))(())))()()()))())()))((()()(()))())((()(()(()))(()()))))()())))()))()())))))))()()((()())(())))()))(()))(())(()))())(()(())))()()))))))(((()(((()()))()(()(())())((()()))()))()))()))()(()()()(()))((()())()(())))()()))(((())()()())(())()((()()()()(()(())(()()))()(((((()())))((())))))(()()()))))(((()(())))()))((()((()(())()(()((())))((()())()(()))(((()())()()(()))(())(((()((()())()((())()())(((()()))((()((())(()))(()())(()()()))((()))(())(()((()()())((()))(())))(())(())(())))(()())))(((((()(()(((((()())((((()(()())(())(()()(((())((()(((()()(((()()((((((())))())(()((((((()(()))()))()()((()((()))))()(()()(()((()()))))))(((((()(((((())()()()(())())))))))()))((()()(())))(())(()()()())))))(()((((())))))))()()(((()(()(()(()(()())()()()(((((((((()()())()(()))((()()()()()(((((((()())()((())()))((((((()(()(()(()())(((()(((((((()(((())(((((((((())(())())()))((()(()))(((()()())(())(()(()()(((()(())()))())))(())((((((())(()()())()()(((()(((())(()(((())(((((((()(((((((((()))(())(()(()(()))))((()))()(())())())((()(()((()()))((()()((()(())(())(()((())(((())(((()()()((((((()()(())((((())()))))(())((()(()((())))(((((()(()()())())((())())))((())((()((()()((((((())(((()()(()())())(()(()))(()(()))())())()(((((((()(((()(())()()((())((()(()()((()(()()(((((((((((())((())((((((())((()((((()(()((((()(((((((())()((()))))())()((()((((()(()(((()((()())))(())())(((()(((())((((((()(((((((((()()(())))(()(((((()((((()())))((()((()((()(()()(((())((((((((((((()(((())(()(((((()))(()()(()()()()()()((())(((((((())(((((())))))())()(()()(()(()(((()()(((((())(()((()((()(((()()((()((((())()))()((((())(())))()())(((())(())(()()((()(((()()((((((((((()()(()())())(((((((((())((((()))()()((((())(()((((()(((())())(((((((((((()((((())))(())(()(((()(((()((())(((((()((()()(()(()()((((((()((((()((()(()((()(()((((((()))))()()(((((()((()(()(())()))(())(((((((()((((()())(()((()((()(()))())))(())((()))))(((((((()()()())(()))(()()((()())()((()((()()()(()(()()))(()())(())(((((()(((((((((((()((()(((()(((((((()()((((((()(((((()(()((()(((((())((((((()))((((())((()()((())(((())()(((((()()(((((()((()(()(((((((()(((((()((()((()((())(())((())(()))()()))(()()(()(()()(((((((()(((()(((())()(((((()((((((()())((((())()((()((()(()()())(()))((((()()((((((()((()(()(()((((()((()((())((((((()(()(())((((((()((((((((((()((())()))()(()(()(((((()()()))((())))()(()((((((((((((((()(((()((((()((())((()((()(((()()(()(((()((())(()()())))()(()(()(((((()()(()(()((((()(((((())()(()(()))(((((()()(((()()(())((((((((((((((())((())(((((((((((())()()()(())()(()(()(((((((((())(((()))(()()())(()((((()(())(((((()())(())((((((((())()((((()((((((())(()((()(())(((()((((()))(((((((((()()))((((()(())()()()(())(()((())((()()))()(((())(((((())((((((()()))(((((((((()((((((())))(((((((()((()(()(())))())(()(()))()(((((()())(()))()(()(())(((()))))())()())))(((((()))())()((()(()))))((()()()((((((()))()()((((((((())((()(()(((()(()((())((()())(()((((())(()(((()()()(()(()()))())())((((((((((())())((()))()((())(())(())))())()(()()(())))())(()))(((()(()()(((()(((())))()(((()(())()((((((())()))()))()((((((()(()(((((()())))()))))())()()(((()(((((())((()()(()((()((()(()(()(())))(()()()()((()(())(((()((()))((((()))())(())))())(()))()()()())()))(((()()())()((())))(())(()()()()(()())((()(()()((((())))((()((()(())((()(()((())()(()()(((()())()()())((()))((())(((()()(())))()()))(((()((())()(((((()())(())((())()())())((((((()(()(((((()))(()(
diff --git a/2015/rs/src/seven.rs b/2015/rs/src/seven.rs
deleted file mode 100644
index 7d44f0e..0000000
--- a/2015/rs/src/seven.rs
+++ /dev/null
@@ -1,94 +0,0 @@
-use std::collections::HashMap;
-
-static INPUT: &[u8] = include_bytes!("seven.txt");
-
-#[derive(Debug, Copy, Clone)]
-enum WireOrLiteral {
-  Wire([u8; 2]),
-  Literal(u16)
-}
-
-#[derive(Debug, Copy, Clone)]
-enum Connection {
-  Direct(WireOrLiteral),
-  Not   (WireOrLiteral),
-  And   (WireOrLiteral, WireOrLiteral),
-  Or    (WireOrLiteral, WireOrLiteral),
-  LShift(WireOrLiteral, WireOrLiteral),
-  RShift(WireOrLiteral, WireOrLiteral),
-}
-
-#[derive(Debug, Copy, Clone)]
-enum Cache {
-  Cached(u16),
-  Uncached(Connection)
-}
-
-fn main() {
-  let valueified = INPUT
-    .split(|b| *b == b'\n').filter(|b| !b.is_empty())
-    .map(|line| {
-      let mut bits = line.split(|b| *b == b'-');
-      let (rhs, lhs) = (bits.next().unwrap().strip_suffix(b" ").unwrap(), bits.next().unwrap().strip_prefix(b"> ").unwrap());
-      let mut cmdbits = rhs.split(|b| *b == b' ');
-      let cmdbits = (cmdbits.next().unwrap(), cmdbits.next().unwrap_or(&[]), cmdbits.next().unwrap_or(&[]));
-
-      let connection = match cmdbits {
-        (wol, &[], &[]) => Connection::Direct(parse_wol(wol)),
-        (b"NOT", wol, &[]) => Connection::Not(parse_wol(wol)),
-        (wol1, b"AND", wol2) => Connection::And(parse_wol(wol1), parse_wol(wol2)),
-        (wol1, b"OR", wol2) => Connection::Or(parse_wol(wol1), parse_wol(wol2)),
-        (wol1, b"LSHIFT", wol2) => Connection::LShift(parse_wol(wol1), parse_wol(wol2)),
-        (wol1, b"RSHIFT", wol2) => Connection::RShift(parse_wol(wol1), parse_wol(wol2)),
-        _ => unreachable!()
-      };
-
-      let wire = [lhs[0], *lhs.get(1).unwrap_or(&0)];
-
-      (wire, Cache::Uncached(connection))
-    })
-    .collect::<HashMap<[u8; 2], Cache>>();
-
-  let mut part1 = valueified.clone();
-  let a_val = walk(*b"a\0", &mut part1);
-  println!("a: {a_val}");
-
-
-  let mut part2 = valueified.clone();
-  part2.insert(*b"b\0", Cache::Uncached(Connection::Direct(WireOrLiteral::Literal(a_val))));
-  let a_val_2 = walk(*b"a\0", &mut part2);
-  println!("a with b={a_val}: {a_val_2}");
-}
-
-fn parse_wol(bytes: &[u8]) -> WireOrLiteral {
-  if bytes.iter().all(u8::is_ascii_digit) {
-    WireOrLiteral::Literal(std::str::from_utf8(bytes).unwrap().parse().unwrap())
-  } else {
-    WireOrLiteral::Wire([bytes[0], *bytes.get(1).unwrap_or(&0)])
-  }
-}
-
-fn walk(key: [u8; 2], map: &mut HashMap<[u8; 2], Cache>) -> u16 {
-  match map[&key] {
-    Cache::Cached(val) => val,
-    Cache::Uncached(conn) => {
-      let val = match conn {
-        Connection::Direct(wol) => get_wol(wol, map),
-        Connection::Not(wol) => !get_wol(wol, map),
-        Connection::And(wol1, wol2) => get_wol(wol1, map) & get_wol(wol2, map),
-        Connection::Or(wol1, wol2) => get_wol(wol1, map) | get_wol(wol2, map),
-        Connection::LShift(wol1, wol2) => get_wol(wol1, map) << get_wol(wol2, map),
-        Connection::RShift(wol1, wol2) => get_wol(wol1, map) >> get_wol(wol2, map)
-      };
-      map.insert(key, Cache::Cached(val));
-      val
-    }
-  }
-}
-
-fn get_wol(wol: WireOrLiteral, map: &mut HashMap<[u8; 2], Cache>) -> u16 {
-  match wol {
-    WireOrLiteral::Wire(wire) => walk(wire, map),
-    WireOrLiteral::Literal(literal) => literal
-  }
-}
diff --git a/2015/rs/src/seven.txt b/2015/rs/src/seven.txt
deleted file mode 100644
index 56cae92..0000000
--- a/2015/rs/src/seven.txt
+++ /dev/null
@@ -1,339 +0,0 @@
-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
diff --git a/2015/rs/src/six.rs b/2015/rs/src/six.rs
deleted file mode 100644
index 0fe0d2d..0000000
--- a/2015/rs/src/six.rs
+++ /dev/null
@@ -1,57 +0,0 @@
-static INPUT: &'static str = include_str!("six.txt");
-
-#[derive(Debug)]
-enum LightCommand {
-  TurnOff,
-  TurnOn,
-  Toggle
-}
-
-fn main() {
-  let valueified = INPUT.split('\n').filter(|s| !s.is_empty()).map(|s| {
-    let mut rsplit = s.rsplit(' ');
-    let mut cd = rsplit.next().unwrap().split(',').map(str::parse::<usize>).map(Result::unwrap);
-    let mut ab = rsplit.nth(1).unwrap().split(',').map(str::parse::<usize>).map(Result::unwrap);
-    let ab = (ab.next().unwrap(), ab.next().unwrap());
-    let cd = (cd.next().unwrap(), cd.next().unwrap());
-    match &s[0..7] {
-      "turn on" => (LightCommand::TurnOn, ab,cd),
-      "toggle " => (LightCommand::Toggle, ab,cd),
-      "turn of" => (LightCommand::TurnOff, ab,cd),
-      _ => unreachable!()
-    }
-  });
-
-  let mut lights = vec![false; 1_000_000];
-  for (cmd, (x1, y1), (x2, y2)) in valueified.clone() {
-    use LightCommand::*;
-    for x in x1..=x2 {
-      for y in y1..=y2 {
-        match cmd {
-          TurnOff => { lights[x + y * 1000] = false; },
-          TurnOn => { lights[x + y * 1000] = true; },
-          Toggle => { lights[x + y * 1000] = !lights[x + y * 1000]; }
-        }
-      }
-    }
-  }
-  let light_count = lights.into_iter().filter(|a| *a).count();
-  println!("Lit light count: {light_count}");
-
-  let mut lights = vec![0u64; 1_000_000];
-  for (cmd, (x1, y1), (x2, y2)) in valueified {
-    use LightCommand::*;
-    for x in x1..=x2 {
-      for y in y1..=y2 {
-        match cmd {
-          TurnOff if lights[x + y * 1000] != 0 => { lights[x + y * 1000] -= 1; },
-          TurnOn => { lights[x + y * 1000] += 1; },
-          Toggle => { lights[x + y * 1000] += 2 },
-          _ => ()
-        }
-      }
-    }
-  }
-  let light_count = lights.into_iter().sum::<u64>();
-  println!("Lit light count(Ancient Nordic Elvish): {light_count}");
-}
diff --git a/2015/rs/src/six.txt b/2015/rs/src/six.txt
deleted file mode 100644
index c4357c6..0000000
--- a/2015/rs/src/six.txt
+++ /dev/null
@@ -1,300 +0,0 @@
-turn on 887,9 through 959,629
-turn on 454,398 through 844,448
-turn off 539,243 through 559,965
-turn off 370,819 through 676,868
-turn off 145,40 through 370,997
-turn off 301,3 through 808,453
-turn on 351,678 through 951,908
-toggle 720,196 through 897,994
-toggle 831,394 through 904,860
-toggle 753,664 through 970,926
-turn off 150,300 through 213,740
-turn on 141,242 through 932,871
-toggle 294,259 through 474,326
-toggle 678,333 through 752,957
-toggle 393,804 through 510,976
-turn off 6,964 through 411,976
-turn off 33,572 through 978,590
-turn on 579,693 through 650,978
-turn on 150,20 through 652,719
-turn off 782,143 through 808,802
-turn off 240,377 through 761,468
-turn off 899,828 through 958,967
-turn on 613,565 through 952,659
-turn on 295,36 through 964,978
-toggle 846,296 through 969,528
-turn off 211,254 through 529,491
-turn off 231,594 through 406,794
-turn off 169,791 through 758,942
-turn on 955,440 through 980,477
-toggle 944,498 through 995,928
-turn on 519,391 through 605,718
-toggle 521,303 through 617,366
-turn off 524,349 through 694,791
-toggle 391,87 through 499,792
-toggle 562,527 through 668,935
-turn off 68,358 through 857,453
-toggle 815,811 through 889,828
-turn off 666,61 through 768,87
-turn on 27,501 through 921,952
-turn on 953,102 through 983,471
-turn on 277,552 through 451,723
-turn off 64,253 through 655,960
-turn on 47,485 through 734,977
-turn off 59,119 through 699,734
-toggle 407,898 through 493,955
-toggle 912,966 through 949,991
-turn on 479,990 through 895,990
-toggle 390,589 through 869,766
-toggle 593,903 through 926,943
-toggle 358,439 through 870,528
-turn off 649,410 through 652,875
-turn on 629,834 through 712,895
-toggle 254,555 through 770,901
-toggle 641,832 through 947,850
-turn on 268,448 through 743,777
-turn off 512,123 through 625,874
-turn off 498,262 through 930,811
-turn off 835,158 through 886,242
-toggle 546,310 through 607,773
-turn on 501,505 through 896,909
-turn off 666,796 through 817,924
-toggle 987,789 through 993,809
-toggle 745,8 through 860,693
-toggle 181,983 through 731,988
-turn on 826,174 through 924,883
-turn on 239,228 through 843,993
-turn on 205,613 through 891,667
-toggle 867,873 through 984,896
-turn on 628,251 through 677,681
-toggle 276,956 through 631,964
-turn on 78,358 through 974,713
-turn on 521,360 through 773,597
-turn off 963,52 through 979,502
-turn on 117,151 through 934,622
-toggle 237,91 through 528,164
-turn on 944,269 through 975,453
-toggle 979,460 through 988,964
-turn off 440,254 through 681,507
-toggle 347,100 through 896,785
-turn off 329,592 through 369,985
-turn on 931,960 through 979,985
-toggle 703,3 through 776,36
-toggle 798,120 through 908,550
-turn off 186,605 through 914,709
-turn off 921,725 through 979,956
-toggle 167,34 through 735,249
-turn on 726,781 through 987,936
-toggle 720,336 through 847,756
-turn on 171,630 through 656,769
-turn off 417,276 through 751,500
-toggle 559,485 through 584,534
-turn on 568,629 through 690,873
-toggle 248,712 through 277,988
-toggle 345,594 through 812,723
-turn off 800,108 through 834,618
-turn off 967,439 through 986,869
-turn on 842,209 through 955,529
-turn on 132,653 through 357,696
-turn on 817,38 through 973,662
-turn off 569,816 through 721,861
-turn on 568,429 through 945,724
-turn on 77,458 through 844,685
-turn off 138,78 through 498,851
-turn on 136,21 through 252,986
-turn off 2,460 through 863,472
-turn on 172,81 through 839,332
-turn on 123,216 through 703,384
-turn off 879,644 through 944,887
-toggle 227,491 through 504,793
-toggle 580,418 through 741,479
-toggle 65,276 through 414,299
-toggle 482,486 through 838,931
-turn off 557,768 through 950,927
-turn off 615,617 through 955,864
-turn on 859,886 through 923,919
-turn on 391,330 through 499,971
-toggle 521,835 through 613,847
-turn on 822,787 through 989,847
-turn on 192,142 through 357,846
-turn off 564,945 through 985,945
-turn off 479,361 through 703,799
-toggle 56,481 through 489,978
-turn off 632,991 through 774,998
-toggle 723,526 through 945,792
-turn on 344,149 through 441,640
-toggle 568,927 through 624,952
-turn on 621,784 through 970,788
-toggle 665,783 through 795,981
-toggle 386,610 through 817,730
-toggle 440,399 through 734,417
-toggle 939,201 through 978,803
-turn off 395,883 through 554,929
-turn on 340,309 through 637,561
-turn off 875,147 through 946,481
-turn off 945,837 through 957,922
-turn off 429,982 through 691,991
-toggle 227,137 through 439,822
-toggle 4,848 through 7,932
-turn off 545,146 through 756,943
-turn on 763,863 through 937,994
-turn on 232,94 through 404,502
-turn off 742,254 through 930,512
-turn on 91,931 through 101,942
-toggle 585,106 through 651,425
-turn on 506,700 through 567,960
-turn off 548,44 through 718,352
-turn off 194,827 through 673,859
-turn off 6,645 through 509,764
-turn off 13,230 through 821,361
-turn on 734,629 through 919,631
-toggle 788,552 through 957,972
-toggle 244,747 through 849,773
-turn off 162,553 through 276,887
-turn off 569,577 through 587,604
-turn off 799,482 through 854,956
-turn on 744,535 through 909,802
-toggle 330,641 through 396,986
-turn off 927,458 through 966,564
-toggle 984,486 through 986,913
-toggle 519,682 through 632,708
-turn on 984,977 through 989,986
-toggle 766,423 through 934,495
-turn on 17,509 through 947,718
-turn on 413,783 through 631,903
-turn on 482,370 through 493,688
-turn on 433,859 through 628,938
-turn off 769,549 through 945,810
-turn on 178,853 through 539,941
-turn off 203,251 through 692,433
-turn off 525,638 through 955,794
-turn on 169,70 through 764,939
-toggle 59,352 through 896,404
-toggle 143,245 through 707,320
-turn off 103,35 through 160,949
-toggle 496,24 through 669,507
-turn off 581,847 through 847,903
-turn on 689,153 through 733,562
-turn on 821,487 through 839,699
-turn on 837,627 through 978,723
-toggle 96,748 through 973,753
-toggle 99,818 through 609,995
-turn on 731,193 through 756,509
-turn off 622,55 through 813,365
-turn on 456,490 through 576,548
-turn on 48,421 through 163,674
-turn off 853,861 through 924,964
-turn off 59,963 through 556,987
-turn on 458,710 through 688,847
-toggle 12,484 through 878,562
-turn off 241,964 through 799,983
-turn off 434,299 through 845,772
-toggle 896,725 through 956,847
-turn on 740,289 through 784,345
-turn off 395,840 through 822,845
-turn on 955,224 through 996,953
-turn off 710,186 through 957,722
-turn off 485,949 through 869,985
-turn on 848,209 through 975,376
-toggle 221,241 through 906,384
-turn on 588,49 through 927,496
-turn on 273,332 through 735,725
-turn on 505,962 through 895,962
-toggle 820,112 through 923,143
-turn on 919,792 through 978,982
-toggle 489,461 through 910,737
-turn off 202,642 through 638,940
-turn off 708,953 through 970,960
-toggle 437,291 through 546,381
-turn on 409,358 through 837,479
-turn off 756,279 through 870,943
-turn off 154,657 through 375,703
-turn off 524,622 through 995,779
-toggle 514,221 through 651,850
-toggle 808,464 through 886,646
-toggle 483,537 through 739,840
-toggle 654,769 through 831,825
-turn off 326,37 through 631,69
-turn off 590,570 through 926,656
-turn off 881,913 through 911,998
-turn on 996,102 through 998,616
-turn off 677,503 through 828,563
-turn on 860,251 through 877,441
-turn off 964,100 through 982,377
-toggle 888,403 through 961,597
-turn off 632,240 through 938,968
-toggle 731,176 through 932,413
-turn on 5,498 through 203,835
-turn on 819,352 through 929,855
-toggle 393,813 through 832,816
-toggle 725,689 through 967,888
-turn on 968,950 through 969,983
-turn off 152,628 through 582,896
-turn off 165,844 through 459,935
-turn off 882,741 through 974,786
-turn off 283,179 through 731,899
-toggle 197,366 through 682,445
-turn on 106,309 through 120,813
-toggle 950,387 through 967,782
-turn off 274,603 through 383,759
-turn off 155,665 through 284,787
-toggle 551,871 through 860,962
-turn off 30,826 through 598,892
-toggle 76,552 through 977,888
-turn on 938,180 through 994,997
-toggle 62,381 through 993,656
-toggle 625,861 through 921,941
-turn on 685,311 through 872,521
-turn on 124,934 through 530,962
-turn on 606,379 through 961,867
-turn off 792,735 through 946,783
-turn on 417,480 through 860,598
-toggle 178,91 through 481,887
-turn off 23,935 through 833,962
-toggle 317,14 through 793,425
-turn on 986,89 through 999,613
-turn off 359,201 through 560,554
-turn off 729,494 through 942,626
-turn on 204,143 through 876,610
-toggle 474,97 through 636,542
-turn off 902,924 through 976,973
-turn off 389,442 through 824,638
-turn off 622,863 through 798,863
-turn on 840,622 through 978,920
-toggle 567,374 through 925,439
-turn off 643,319 through 935,662
-toggle 185,42 through 294,810
-turn on 47,124 through 598,880
-toggle 828,303 through 979,770
-turn off 174,272 through 280,311
-turn off 540,50 through 880,212
-turn on 141,994 through 221,998
-turn on 476,695 through 483,901
-turn on 960,216 through 972,502
-toggle 752,335 through 957,733
-turn off 419,713 through 537,998
-toggle 772,846 through 994,888
-turn on 881,159 through 902,312
-turn off 537,651 through 641,816
-toggle 561,947 through 638,965
-turn on 368,458 through 437,612
-turn on 290,149 through 705,919
-turn on 711,918 through 974,945
-toggle 916,242 through 926,786
-toggle 522,272 through 773,314
-turn on 432,897 through 440,954
-turn off 132,169 through 775,380
-toggle 52,205 through 693,747
-toggle 926,309 through 976,669
-turn off 838,342 through 938,444
-turn on 144,431 through 260,951
-toggle 780,318 through 975,495
-turn off 185,412 through 796,541
-turn on 879,548 through 892,860
-turn on 294,132 through 460,338
-turn on 823,500 through 899,529
-turn off 225,603 through 483,920
-toggle 717,493 through 930,875
-toggle 534,948 through 599,968
-turn on 522,730 through 968,950
-turn off 102,229 through 674,529
diff --git a/2015/rs/src/three.rs b/2015/rs/src/three.rs
deleted file mode 100644
index 04db03a..0000000
--- a/2015/rs/src/three.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-use std::collections::HashSet;
-
-static INPUT: &'static str = include_str!("three.txt");
-
-fn main() {
-  let valueified = INPUT.chars().map(|c| match c { '<' => (-1, 0), '>' => (1, 0), '^' => (0, 1), 'v' => (0, -1), _ => (0, 0) });
-
-  let mut visited = HashSet::new();
-  append_visits(valueified.clone(), &mut visited);
-  println!("Number visited normally: {}", visited.len());
-
-  let santa_iter = valueified.clone().step_by(2);
-  let robot_iter = valueified.skip(1).step_by(2);
-
-  let mut visited = HashSet::new();
-  append_visits(santa_iter.clone(), &mut visited);
-  append_visits(robot_iter.clone(), &mut visited);
-  println!("Number visited w/ robot: {}", visited.len());
-}
-
-fn append_visits<I: Iterator<Item = (i32, i32)>>(iter: I, visited: &mut HashSet<(i32, i32)>) {
-  let (mut x, mut y) = (0, 0);
-  visited.insert((0, 0));
-  for (move_x, move_y) in iter {
-    x += move_x;
-    y += move_y;
-    visited.insert((x, y));
-  }
-}
diff --git a/2015/rs/src/three.txt b/2015/rs/src/three.txt
deleted file mode 100644
index 55f286f..0000000
--- a/2015/rs/src/three.txt
+++ /dev/null
@@ -1 +0,0 @@
-^><^>>>^<^v<v^^vv^><<^<><<vv^<>^<^v>^vv<>v><vv^^<>>^^^v<<vv><<^>^<^v<^>^v><<<v^<v<<<v<<vv<v<^><^>><>v>v^<<v^^<^v<><^>^<<^^^>v>>v^^<v>>^>vv><v>>^>>v^>^v>^<^^v>^>^^v<v>^^<v<>>v^^v><^><^<<>v^<^<^v<v>v^>>>v^v^>^<>^v<^^vv<v>^>^<>^^<vv^<><<v<^<^^>vv<>^>v<^>^v>v^>^v<>^><>><vv<>v^v<><>v^v>>>>v^^>^><^^<v<^><^<v>>^v^v<>v<<<^<<vvvv<<v^vv^>v^^^<^^^<v>>v<^v>>>>>v<^^^^>v<^<><v>>>>><v>>v^vvvv^^<v^<>^v<^v^>v><^>^v<<>>vv^>v>v^^>vv^<^vvv<>><>><><^^^<v<>^<^^^<v><^v>>v>^v<v^vv^<>^^^>v^^^v>>^v^^<^>>^>^<<v>>>^^<>>^vv>v^<^>>>><v<><><^^v<><<<<^^<>>^<vvv^><>v<v<<<<><v<<v>v<v^><vv<v^>^<^>v^^><^v>^^>v<>^v^<>^vv^><v^^vv>vvv>v>^<vv^>>^>>^>><>>>^^^^v<vv>^<>v^^><v^>^<>v<^^v><v<<><^v><>^^^^^v^v>>^^v><<><<vv>^^^^><^>v>><<<^v>v^^>^v^<^^v>v<^<<>>^v<<<v<<>>v<^v^><vv<v^v>v^<v>><v>^v<<<vv^>v<v>>v>>v><v><v^>v^^v>^v^>>>><>^>v>^v^>>>>v^<<vv<^v><<>v<v^<^^<<v<^v^^v^>vv><vv<v^<^>><^^>^<><^^<v<><^v^v^<^^>^<v><^<v>v^<<<^^v<v>^v>>><>^^>vv<<^v^<<<<^^>>>v>v<<<>^^>>>v>^>v>vv<<>^<^><v^>^^<^<v<<v<^>>^v^<vvv><>v^><<v>^^<v^vv^^^<vvv^<^>^>vv>><^v<^<<v<><<><<^^<><><vv>v>^<v>>^<>>^^v>vv^<^^v>><^vv^<<v^^><<>vv<v<><v<><v^^^v^v>^v<^<>v^^>><>^<^<v^<v^v^>v<<<^<<^>>>^^<^^v>v^<v>vvvv>v<>><^>^<<<<v^<v<>v^^^v<>v>^<v<<^^v^^<>^<<v^^<^<v>v>>v>>v^>^<vv<<<<<^<><>v><>>>v^>^v<^<><<v<^v^^<^<><^>^^^>^><>^><<vv>^<>vv<<v^v<<<<<>>>v<vv>^v>^>^>^<^><>v<><>>>^^<v>^<^v>>^<><v^><v^>>>v<v^^vvv^><v<v>v^>vvvv>>><^>v<>^^^>v>>v^<v<>v^>^<v^>^<<^>^>>v<<><<v^^>>v^<v^<^v^>^>v^><<^<v>v^<v>>^^<<v>v><<<^v^<>^<>^>>^<<v>^^<>^v<>v^>>><<v>><v^>^><v^<><v><>><v^<>vv>v^<^^^>v>^^<vv>>^v<><>>><>><^<>>v>v^^>^^<^^>^>>v>vv^^v<^<^v><vv<v<^>><<vvv<<><^>^v>^^^<<>v^<v<v><<v>^^v<<<>^^vv<^>vv>^>^<><<>vv<^>v^vv>^^^v><<^vv>^v<><v^^^^v^>vv^^<^<>^^v^<^vv<v<vv<>v>v^^<>^^>^^>^<><<^v>^><^^vvvv<><>^<v^^>v<>^><>v>><>vv^<<><<>><>v<^>^v>>^^v><<<>>^<^v^<v<<<v^>^^<^<><><^><<<<^<vv><v<<><vvv^^><vv>^<<vv<<<^v<>>><><>>v><<<v>vvvv^^vv<v>><<^v^vvv><><vv>v><>v<<<^<v^>><^^>v^<v>><v>^^^v^v>><<<v<^^>>^v<>v^<vv^^<<v<v>v<<<<^^^v^v<<>>>v>>vv>^^<><^v<v><>>v^>>>>>^>v^v^<^v^v^vvv>v<v<^>vv^<<v>vv>>v^^vv<^v>>>>vv<>v<>^^vv^<v>v^>>vvv<<<v<<^vv^^^^>v>v>^><<<^>v^><v<^<<<v>^v^^^><<><<<^^<^^<>^<v>^<v<<v<^^vv>v<^v><v><v<>^v<^<v<^<v^v><v>><v<v<<>^<v<>>><>^v^v<<^><v^<<v<v^>^>v><^>^vv^^<v<v<vv<v>^v^v^>^<<>>>>>v^<>^>v^vv^><<>>^^<>v^><v>^vvv^>v^v><>^><<>v>v<^<^><^^vv<<><>>v>>v><vv>>^v<<>^vv<>^vv>v>v>^>^>>><><<>v<v>^<<^v^^<<<><v>>vv<^<vv<vv^<<v<<^v><<>v<^^^<<^v^>^v>^^^v^v>>>v>v^v>^>^vv<^^<<vv^>^<<<vv>v^<><<^vvv^^><>vv^v>v>^><<^^^^vvv^<vvv>><^v<^>^<>>^<v<<vv>>><v>vv^<>><v^<v>^v>^>v>^<^<^^^<<vvvv^>>>>>>>v><vv>^<>^^v^><>><^v^^<v^v<<<<v^>><>v^v<vv<><^<<<<^>^^>vv>><^v<v^v<<>^vvv>v^^><^^<^<>>^^v^vv<>v<^<<<v^^^><v<vv<<>v>v<>^v^><v^vv^v^^v<^^v^^v><>v<^v>><<^<^v^>><<vv<<^>^<<v^<>^><>v><vv^v>>^<v<<<^>vv<^v>^>v<<v>^>>^>>v^<v<v>>^v<^v^v><<><>^><<<><v<vvvv<v^<v^v><>^<>^^^^v>^>^vvvvv>v>>v><<vv<<v<><<^><<^v><<v<<<v><vv<^>^v>>>>^v<^v<<>>^>^<<vv^<^>v>><<^>^>^v><><>^><<v<>v^><<^v^<^^><^^v^<<^v^^>>^v^<^><vv>v^^<<^^^<><>^>v^v>v^>^v^vv>^^>>>>^^<^>>>^^v<vv<><^^<vvv<^^^vv>v<v<v>><<<>^>^^>^>^v<<<<>>^<<>><v>>v>^^<^v<>v<>v^>v^><^<^^><v^^v>^^vv<v<<>><<vv<>>v>^<<<<v<<v>^><^^<^<^<v^<<^^v>^v<^>v^v^<v^vv^>^^><^>v^v>>^^v^><vv<v<v<v>>>>><<><v><v^v^<v^<^^<v<>^>v>v<>>>v>^^^^>><v^v^^v<<<>v^<<^<v>>>><^v^<<><v<>>v><><v<v^v>^v^^<v<^<^^v>><<vv<<vv><>>^>^>vv<^<>^vvv^v<v^^<>v^v>^^<<<<<>^v^>^<>v^^<>v^v<vv>^<>vv^<^vv>><v^^vvvvv>><<>v<vv^<^<vv^v^<>^^<v^<vv^<v^v^v<<^>^>^>^^>>>vvv>^>v>v>>>^>vv^><>^><>v>^^<v^>^><<v>><<<>>v<vvvv^>^v<^<>^<v>^<>^^<<><>^v<><>>>^vv<^<<^<^v>v<<<<<^^v<^v<><v<<><^>v>^v>>^v^><^^^^v<><><>vv^<>vv<^v<^^><v^<^><^^v^v^<^^<<><v>v<v<v^<<^v><>v^v<^>vvv><<^v>>v><><v<<^>>>v<^>>v>^<>><>^<v^v^<vv<<^>v<^^>^<^v<^<<^^v<>>^>^>^v^^v^v<v^^vv^<v>>v><vv^vv>v<>v^>v^^>^^>><v><v^<<><<>><<^^>><^v<v<><<><<><v<v^<^<v>>>><v^^v^^>>>^^^^^<<vv<^><>^<<<vv^^^>^><<<v<^v>^<v<^>^vvv<<>vv><<>v>v^v>>>>>^<>><^^^><<<<v><<vv>>>v<^<vv^v^<<v>>>>^^vvv>v<>><v>>>v>>^v^vvv<<>vvv<<^^^<>vv^^v<<>^^^>>^<^v^<^^>v^><v>>^<<^v<<vv<vv>v^>>^>v^><^><>^>>>vv>><^^^>vv<<^^vv><^<>^>^^<^<>>^vv^>>^v><>v^>>><<<^^<^>^>v<^>^<^^<>>><^^<>^v^<<vvv<v><>vvv><v>v^v<<^<v>^^><<^vv^v>v>v<<^v^<<<>^><><vvv>v>^vv^v<>vv^>^^<^>^>v^^<vv^>v><v<<<><>>^v<^<><><^<v^^<<^<v>vv<><<>v^<v^>^>^^<><<>^<^<<v^^v<v^<><<>v>><^<<>^>^v^v<v^v><^>>^v<^>v<<>^^^<^v>>>^<v>vvvv<<v^<^^>vvvv>v<>v<v><vvvvv>^<><>vvv<>^<<>^>>>>v^<^<><^v>v^>>v><>^><<v^>^<<>^>^v^<v^^>>^v><v>^<v><>v^<^^>v>^>>>v^v>>>^<>^<>>>>>v>>vv^v<><<<><><v><<vv<<v<><>>vv<^<vv>^v<<>v^v<^v<><v>>^v>>vvv^^v>>v>^>^>v><v><^>^^<<>^v<^<<<<^>v<^>>v^<^v>^v<<>^>^vvv<^^vv>^vv>vv<>>v>v<v>>v^<<<<<^^v^>v>^<<<v^v>>v<v><vvv><v>^<vv><<>>^<^>^^<>>>>^<^v<>v^^>^<^^v<^><>><v>>^v^vv<^v<^><<vvv<>><>><^^>^<^v^<^<>v<<<^v>v^^^<>v^<v^>^v^>><>^^<v<^><<^^v^<>^<^vv>>><^v><v^>vv<^v<<<v^>>v>v^v>^<v>v<^<>v^vvv>^vv<<<<v><^><v>>^^>><^v><<^>v^^<<v^^<^<><<<<>^<v<^v^>v<<^^>v<<<<<vvv<v<^>^>^>^>>^>>>v^<<v>>^^v><vv<^v<v<^^^>>>^vvv<^v<>>>vv>^^><^v>vv^>>v>v^<>^<vv>^>^<<^>^^^>>^vv>^^>vvvv<>>^^^^>>>v>v^^>vv>vv^<<>^><^<v^vvvv><v<><v>><<<v<v<<^v><vv^vv^<>>>^>^<v<^v<>><^<vv^^><v>v^>v^<><v^vvv>^>v^^v^>^^>v<<<<^<<^>>v>v^^^<<<v>>>^^v>v<v><<<<^^^v>^vv^>><>^v<v<<^^<<<<><>>>v>vvv^v^^v^>>vv>^>><>^v><^v^><^^>vv>^<^<^>><v>v>><><><v>^>^>v>vv>vv>^^>v>v^><v<<v^<>^>^v>^^v>^<^v<>>vvv^^>^>vv<v<v<<^<^<v^<>v^^v<^<^>vv^^<v><^^^>v>vv<<v>v<<v^<v^^><vv>^>^v^<^>v<^>^<>vv^><v<^><>>^>>^<^><<>^<^>v>v><>>>^<<^><<v><^v<v><>>vv<^><v^>>v>v>>>>^^>v<^v^>><<^<>>v><^><<^>^<vv^^<><<>><vvvv^>^^<><^^v>^^>vv>^v<v>>^^v^<v<^><^<<>>v^^^<^><^<<><<v<>><<>^v>vvv^vvv^^>>^<^<v>><>^<<<<^^<>>>v^<<^^v>><><<v<^>v>^v<v^>v>vv^><>^><<><^^>^>^<><>><^^<v^v<^><><><v>^<v<<v^<<^^^v<v<^v<>>><^v<<<<>>^v>^^vv^v^<<v>><<<v>vv>>v>>^v^<>>vv^<^>^<<>v<<<^vv<^vv^vv<^v^^^<vv^>v>>v<^^<^^vvv<^^v<>>>^>v^><v>^^><>vv>v>v<<<^^v<^vv^v>^^^>>>^^<>^^<^vvv>><><<><^<v>><<>^>^^<v^v^>vv>vv<v>^^<^^<<><><<v><v^^>v><v><<>v>vvv<^^^^<^>>><<<^^^<^>vv^^v>>v<<v^^<vv^<^>vvv^^v^^<^<vv>v<^<>^<<vv^^>^v>>^><><>v<v<v<>><v>>>^^>>v^><v^^<^>><>v<><<v^v<v<<>>>><>>>>><<^vvv<<><><<>^><><<^^v><<^>v>^>^v>v>>^^<><^>vv<^<^v>v<><^<<v<><^><>^^^<v^<><vvv^^^<>^^v><v<<<v>><>^>^vv<v^<vv>v>v^vv<v^v<v>^v^>v><>v^><>v>^^^^><<vv^><v<<v<^<>^v^^^>^^><<<v<^<v^>^^>v><vvvvv^<^<v^^>v<^v^^vv^<<<<v><^>v>v^v><><v^<<^<<v<^^^>^><v^v^<><><>^v<v>^<>^v>^v>v^<><^><v>>v<<^><^vv^<><^<>><>><v<v><<^^^^>v<^<^vv<><^vv><<^<<v>v^>>^v>^>v^^v>vv<v>v<<v>v<>^>>vv^>>><>^v^^<^>v<<^<^^v^^v^<<v<<v<^v<>vv^<v>><^v<^>>>vv^^<v^<>^^v<v<v>>^><^^^<><<^^>v<<vv>><<vvv>><<v^v^>><>vv^><<^>^><^v<^<^<vv<^^vv>v^v<<<<<<><<vv^vv>vv>v<^><<><><<>>v>><v><^>^v>^v^<>v^^^><^^<<<^vv^vv>^v^vvv^^>v^<v>><^<^<^<>^vv<vv^v^^>^^^>vv^v>>><<<^<>>v>v<^^<><v>>><><^v^^<<><<<>^<^^v^>v<vv^^^^>><v><^<<v<<v<>^>^>>^<>^v><>>^<v<vv^<<^<<>vv^>^^<<<^v<>>^v<>vvv<<^^<<><vvvvv<<^<^^<>>>>^^<><>^><>^v<v^^v<<v^^<^<^>v<v>^v<^>^v<>v^vv<><<v>^vvv<><<^>>^^><><>^<>^>v^^v^><v<><>>v><v^<v<<v>><^v>^<v<^>v<<<>vvv^<^^v<vvv^vv<>^<>^>>v<>^^><><v>>^><^^vv>><<>><v><^><>>^vv>v<vv<>v^v^^v<<^^<vv>v^^vv<<^<<><>^<><v^><^<^<>>^vv<v>v>>^<^vv>^vv^>v>^<><^><^<>v^v^^<^<>^^v>>><^v<>v^v<<^>v><>^^<<v^v<>v^>>v>^<><vv^v<v^<vv<>^>^>^<^>v><<><><><<<>^>><v^^><^>><v>>^v<<<^<<>^><<^>>>>>v<^>v>>v^<v^>^>v^^><>v^v^vvvv<v<v<>v>>><<>^<<vvv><v^v^>v<v^^^>>^<v>>^vv^^<vv><^>>v<v^><vvv<^^>>vv^v<^<>^v^<<v>^<<><<<^vvv^>^^<<>>><v<^>vv<<^<><^v<^<><<^^>vv^v>v^^^>>>>^>vv<<v>v>>^^v^^><>v<<^><^<v^>>^>v^v>><^v^>v<<^<v><^<^<^<>>v^^>><<<>v<v>v<^^>^vv<<<^^<v<>v^^>v<<><^<>^^>^v<>v>><^^^vv^>^><>v^^<v^<>>^<v^^^><v<><vvv>v>^<<^v>^>>>>><^^^<>v<v>>v^^<^v^>>v^<<v^>^>v^v>>>>^>>vv<>^<^v><v^^<>v>v^v>^<>^>v<vv><<v<^v<<^v<<^v^vv<><>^<>>^<>>^<>v^><<>^v>>^^^^<<^v><>^<^>^^v><^^<^<v^<^^v>^v><vv>v<<^>^>><<^^^vvv<<^vv<^^>v^^vv^<^^<<^^>>^^<vv<v<<v^^<<v<^vvv<<><<v>v^>>v^^>v<^>^><v<^>v<v^v<v^^<>v>><<v^v^v<^^^><v>v><^<^vv>^^v>^>v<<^vv><^^^^^^><<^>>>^v<>^^v<<<>><<<v^><>^<<<v>v^>^^^<^><v>^^^v<<>v<v>^<v^>><<^^<<^v<<>^v>>vv>><v<^><v<<<vvv><vv><<^v^^<v^vvv<^v>>v^v<v^v^>>^^v<><^^^<^^>v>^<><v<<v^^>vvv^v^^<v<v^v>^>v^^v<^><v^^<<<<>^^>>^v<><^><^<<^vv^<><<>v^vv^<v^<><<<^^>v<<>>>v<>v<><<<v>^v>^^v>^^>v>^>^>v<>><>^>^>^vvvv<^<v^<>^^^^v>v>><<v>>^<vv>>^<v<^v^vv>><>^^>v^^<<><^<v>><<<<>v>^^><v^^v<<v<><vv^v>^<v^^>v<<<<v^v<<>>vv<v<<<v>v>>v<^v>>v>v^<<<>^>^>^<>v<^^vv><^v<<^v<vvv^vv>v<^<<^^vv^^>vv<^>v>^^<<v^<<^^v<>^>v<<^^<^>^^^v^^<v<^<^>>>v^vv^<^v>^<>^<^<v<^v>>>^<^v<><v<^vv<v>v><v^v^^v<vv><^^<><>^>v<^<^vv>><^v><v<>^<>^^>^<><<<v^>>^<>><<><v>vvv^<<^<vv<v><v<^<<<^>^>>v<^>>vv>^v^^^v<>v<>><>^vv^>vv^
diff --git a/2015/rs/src/two.rs b/2015/rs/src/two.rs
deleted file mode 100644
index 572c556..0000000
--- a/2015/rs/src/two.rs
+++ /dev/null
@@ -1,31 +0,0 @@
-static INPUT: &'static str = include_str!("two.txt");
-
-fn main() {
-  let valueified = INPUT
-    .split('\n')
-    .filter(|s| !s.is_empty())
-    .map(|line| {
-      let mut nums = line
-        .split('x')
-        .map(str::parse::<u32>)
-        .map(Result::unwrap);
-      (nums.next().unwrap(), nums.next().unwrap(), nums.next().unwrap())
-     });
-
-  let final_area: u32 = valueified.clone()
-    .map(|(w, l, h)| {
-      let sides = [w*h, l*w, h*l];
-      sides.into_iter().min().unwrap() + sides.into_iter().sum::<u32>() * 2
-    })
-    .sum();
-  println!("Final area: {final_area}");
-
-  let ribbon_length: u32 = valueified
-    .map(|(w, l, h)| {
-      let mut nums = [w, l, h];
-      nums.sort();
-      (nums[0] + nums[1]) * 2 + (w * l * h)
-    })
-    .sum();
-  println!("Ribbon length: {ribbon_length}");
-}
diff --git a/2015/rs/src/two.txt b/2015/rs/src/two.txt
deleted file mode 100644
index 5f3335f..0000000
--- a/2015/rs/src/two.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-29x13x26
-11x11x14
-27x2x5
-6x10x13
-15x19x10
-26x29x15
-8x23x6
-17x8x26
-20x28x3
-23x12x24
-11x17x3
-19x23x28
-25x2x25
-1x15x3
-25x14x4
-23x10x23
-29x19x7
-17x10x13
-26x30x4
-16x7x16
-7x5x27
-8x23x6
-2x20x2
-18x4x24
-30x2x26
-6x14x23
-10x23x9
-29x29x22
-1x21x14
-22x10x13
-10x12x10
-20x13x11
-12x2x14
-2x16x29
-27x18x26
-6x12x20
-18x17x8
-14x25x1
-30x15x22
-17x18x7
-28x23x24
-15x12x25
-14x7x20
-29x23x8
-24x5x22
-6x22x8
-1x15x26
-14x5x1
-24x28x28
-17x23x23
-4x15x7
-23x8x11
-6x15x1
-23x18x13
-17x1x26
-23x13x17
-2x18x8
-22x22x1
-10x22x6
-28x29x20
-22x21x25
-14x8x23
-12x30x14
-8x7x5
-3x30x15
-4x3x29
-25x18x3
-16x7x16
-4x3x8
-9x16x30
-20x28x3
-28x24x6
-4x18x2
-23x18x5
-22x4x30
-15x30x9
-7x12x12
-3x22x29
-12x1x9
-9x2x25
-17x11x10
-25x24x7
-7x27x26
-26x4x12
-29x2x26
-19x24x12
-23x23x3
-26x28x16
-18x4x16
-25x30x18
-29x19x19
-16x3x27
-29x25x29
-18x19x5
-14x21x30
-19x13x26
-19x10x15
-9x4x7
-18x6x6
-24x25x29
-9x12x27
-15x3x22
-30x17x21
-18x19x28
-9x11x12
-8x28x22
-11x3x4
-28x17x20
-24x18x15
-11x12x13
-6x19x24
-28x4x5
-28x22x23
-13x29x2
-9x16x15
-29x28x1
-10x18x30
-19x11x12
-26x28x25
-23x17x13
-25x1x21
-17x1x27
-17x27x28
-28x13x15
-14x13x25
-11x29x7
-22x29x5
-13x6x14
-23x18x13
-25x7x17
-18x9x20
-21x11x2
-28x11x13
-13x25x1
-19x29x25
-16x29x4
-10x21x10
-7x25x17
-5x9x3
-1x15x6
-8x27x29
-23x6x30
-22x22x29
-6x20x30
-26x25x29
-10x19x19
-20x30x9
-5x30x24
-17x10x27
-30x14x30
-8x17x4
-7x18x6
-3x5x4
-24x17x15
-14x20x17
-22x27x15
-18x14x15
-23x9x11
-21x16x29
-7x18x21
-9x3x29
-10x13x4
-2x30x4
-23x20x4
-8x22x21
-29x28x4
-13x16x25
-21x9x11
-7x26x26
-13x23x30
-19x7x10
-9x23x21
-21x9x17
-9x21x15
-20x29x22
-23x13x15
-19x25x2
-12x11x30
-20x21x6
-21x6x17
-24x26x9
-29x21x29
-29x26x16
-6x16x1
-2x12x6
-6x7x20
-7x2x22
-6x22x4
-13x11x27
-25x27x14
-11x8x6
-26x11x14
-30x3x29
-27x21x20
-15x16x26
-6x22x10
-11x9x25
-23x13x6
-13x9x3
-30x22x13
-29x23x14
-25x19x6
-7x29x11
-19x18x5
-29x25x13
-25x24x27
-1x9x12
-22x9x17
-14x12x28
-19x21x17
-13x25x17
-14x25x12
-4x14x30
-7x15x28
-3x6x25
-6x2x16
-15x19x11
-17x30x20
-20x23x7
-26x21x6
-26x29x24
-2x4x30
-4x22x18
-13x3x28
-27x6x21
-5x3x27
-12x7x11
-28x11x9
-12x9x2
-1x22x20
-15x13x28
-14x19x16
-28x20x3
-20x4x9
-26x7x26
-18x19x25
-7x1x13
-20x23x29
-27x26x8
-11x15x15
-10x21x23
-29x2x11
-21x28x20
-3x18x23
-26x17x17
-14x26x17
-20x7x17
-18x12x8
-4x8x8
-8x15x23
-24x29x5
-1x25x8
-1x28x17
-16x18x13
-29x24x22
-13x16x10
-14x7x16
-15x11x29
-12x15x19
-17x6x28
-4x3x9
-15x16x8
-29x27x11
-2x24x20
-4x21x3
-29x24x27
-18x22x22
-7x8x18
-20x7x8
-19x9x2
-20x17x2
-2x29x10
-19x25x1
-28x9x3
-29x27x20
-7x21x7
-10x4x22
-26x8x5
-26x14x1
-5x27x9
-2x18x3
-3x27x17
-30x17x23
-30x11x20
-4x6x7
-6x29x27
-30x16x20
-24x30x28
-19x20x26
-18x1x25
-26x12x12
-19x15x29
-16x21x24
-23x13x26
-25x16x10
-8x9x18
-24x14x1
-24x15x21
-19x9x14
-8x23x11
-22x2x16
-29x9x26
-3x16x25
-15x20x30
-3x11x12
-15x2x3
-13x7x4
-2x7x27
-9x26x11
-30x24x19
-28x17x21
-10x8x2
-11x15x26
-10x12x20
-24x24x27
-25x26x16
-13x4x20
-25x13x11
-12x22x3
-20x7x1
-12x18x6
-26x8x20
-14x2x7
-23x12x1
-26x24x24
-27x26x23
-26x17x5
-17x24x2
-26x5x6
-23x5x1
-5x18x30
-24x21x19
-5x28x11
-21x20x14
-25x4x22
-26x24x11
-7x5x8
-13x1x30
-5x1x6
-14x5x2
-8x11x7
-13x20x1
-17x30x14
-29x22x10
-12x26x3
-27x17x3
-26x27x4
-5x26x17
-22x11x19
-8x26x3
-24x19x22
-7x1x4
-6x27x30
-4x28x14
-16x14x18
-4x5x20
-19x25x4
-15x15x1
-10x14x14
-16x18x24
-21x27x15
-5x5x10
-1x7x13
-16x2x8
-13x15x11
-3x25x10
-20x29x8
-12x3x2
-10x13x12
-25x27x1
-11x30x19
-7x19x13
-27x6x18
-16x21x19
-21x29x5
-16x23x12
-29x19x15
-5x5x10
-27x15x1
-13x16x22
-29x19x5
-8x12x9
-3x18x5
-13x25x3
-5x9x21
-10x20x16
-9x9x11
-23x21x1
-22x2x15
-27x8x13
-23x7x3
-26x30x15
-29x15x16
-16x27x13
-2x18x9
-10x27x8
-20x9x25
-10x2x17
-16x13x13
-21x26x1
-27x26x24
-9x30x16
-19x17x28
-25x15x1
-10x26x6
-10x11x11
-5x26x25
-30x4x15
-9x8x23
-14x25x7
-8x28x8
-28x18x24
-4x4x25
-16x25x11
-17x27x8
-15x16x9
-24x13x21
-17x3x27
-27x5x26
-8x27x12
-29x2x8
-24x23x30
-1x30x21
-6x18x20
-13x14x12
-25x30x23
-24x6x24
-12x7x21
-11x6x8
-8x30x30
-26x3x12
-28x6x5
-18x7x1
-7x6x20
-14x16x18
-11x22x15
-4x20x10
-19x24x19
-8x24x11
-4x9x10
-6x6x22
-10x9x29
-1x5x28
-19x25x29
-20x30x3
-15x13x13
-9x9x24
-20x14x29
-26x24x13
-2x25x8
-10x26x2
-12x19x12
-18x6x20
-4x5x14
-26x27x10
-16x26x20
-3x21x15
-2x26x18
-14x11x17
-26x26x25
-10x1x11
-17x19x19
-27x28x26
-9x2x10
-19x30x15
-23x30x14
-15x3x20
-2x14x22
-21x18x8
-22x4x29
-19x6x29
-9x26x29
-16x10x9
-22x12x22
-13x28x14
-25x14x28
-28x3x30
-10x17x1
-10x27x22
-10x23x19
-14x25x9
-11x24x8
-30x25x10
-22x13x28
-2x7x6
-11x20x8
-9x22x14
-19x16x9
-11x24x4
-11x17x2
-6x4x10
-26x10x10
-12x14x5
-27x10x3
-15x3x6
-11x7x19
-22x10x12
-21x26x10
-13x20x3
-27x8x8
-1x24x23
-24x9x22
-23x17x23
-3x28x19
-2x20x28
-23x17x24
-26x1x4
-4x1x12
-5x6x16
-13x22x13
-25x21x21
-20x21x12
-9x24x25
-17x16x12
-12x28x9
-18x16x27
-29x12x2
-30x12x15
-24x11x10
-4x9x22
-4x24x5
-19x11x5
-6x25x6
-1x20x17
-22x8x21
-11x26x4
-16x19x3
-8x12x8
-13x2x18
-10x5x11
-8x12x17
-21x2x5
-26x17x26
-23x18x17
-28x11x14
-1x4x27
-29x5x28
-5x9x10
-5x7x25
-20x15x27
-15x11x17
-12x14x1
-29x14x4
-18x14x18
-14x25x24
-26x14x18
-13x8x11
-30x1x23
-3x4x12
-12x24x9
-8x6x16
-14x15x30
-12x30x8
-22x11x18
-16x30x28
-17x18x4
-13x14x23
-2x28x8
-3x28x30
-29x30x8
-4x6x26
-6x30x17
-11x30x30
-19x4x3
-12x15x20
-22x28x4
-26x30x2
-6x12x7
-1x10x5
-25x29x7
-17x9x18
-16x21x29
-21x14x7
-15x16x11
-26x6x15
-8x24x7
-2x20x4
-2x9x3
-19x8x13
-18x7x22
-27x14x17
-2x13x8
-18x15x26
-15x27x27
-18x11x15
-1x29x20
-21x12x11
-20x2x15
-28x23x9
-1x1x17
-7x23x9
-30x9x27
-9x16x18
-15x24x28
-30x11x18
-29x26x10
-9x5x25
-2x1x19
-14x3x14
-6x3x6
-30x15x20
-20x17x27
-28x10x9
-14x24x28
-17x11x6
-12x3x6
-8x8x15
-23x14x21
-11x21x7
-5x13x30
-4x29x25
-30x28x24
-18x4x9
-3x15x6
-13x9x19
-30x14x7
-7x9x9
-17x11x26
-24x26x13
-16x21x16
-27x17x25
-2x21x11
-9x11x27
-3x3x7
-13x8x14
-20x20x26
-13x29x22
-30x11x1
-7x10x19
-27x5x9
-23x17x15
-21x6x13
-24x15x16
-18x4x14
-18x16x6
-22x11x18
-14x2x5
-15x3x7
-10x20x29
-16x1x10
-30x23x1
-10x15x11
-17x14x5
-22x8x13
-7x11x28
-26x17x3
-2x23x2
-28x13x19
-18x12x28
-22x23x16
-14x12x1
-20x8x19
-17x19x13
-29x2x12
-2x26x27
-29x16x4
-13x8x18
-16x15x30
-23x16x2
-28x8x27
-21x8x23
-13x20x26
-19x6x17
-17x30x15
-7x4x30
-2x13x30
-18x7x19
-4x13x27
-8x6x5
-18x20x25
-2x3x30
-23x27x13
-22x30x4
-23x25x25
-23x16x19
-25x3x1
-5x6x15
-11x29x12
-25x24x7
-16x7x20
-20x3x2
-12x27x15
-16x10x12
-1x3x14
-22x1x26
-2x24x18
-11x29x16
-15x2x9
-10x1x24
-21x8x11
-30x11x23
-6x30x21
-13x27x29
-14x6x5
-18x29x19
-12x4x28
-29x3x14
-10x30x28
-5x7x15
-14x1x10
-9x25x14
-7x24x18
-28x17x21
-18x13x25
-26x15x1
-21x1x19
-12x16x21
-4x6x13
-7x15x26
-17x19x5
-12x28x2
-1x20x19
-27x7x5
-17x26x8
-12x15x19
-5x23x10
-8x2x8
-16x13x12
-14x27x1
-26x29x3
-24x16x14
-14x13x13
-7x22x23
-2x9x30
-4x27x8
-26x27x15
-23x1x6
-25x29x18
-5x18x1
-20x8x20
-5x10x25
-30x25x15
-7x22x25
-28x26x17
-29x4x1
-21x11x27
-20x9x8
-25x22x12
-2x11x11
-23x2x16
-23x27x20
-2x13x28
-27x2x24
-11x1x17
-12x4x27
-16x20x22
-30x12x10
-5x15x4
-5x2x27
-12x4x25
-1x16x4
-27x4x4
-21x16x3
-27x26x3
-24x6x6
-24x12x12
-20x20x25
-8x29x2
-21x4x5
-2x4x8
-4x13x19
-3x20x10
-12x15x16
-6x5x4
-12x16x20
-22x19x17
-8x17x22
-25x16x15
-7x1x19
-10x1x7
-23x23x5
-28x6x12
-2x25x12
-10x27x12
-24x27x19
-14x14x20
-4x1x5
-16x27x29
-20x20x24
-28x24x30
-6x15x15
-9x15x30
-23x26x3
-17x24x21
-22x25x25
-18x29x10
-20x25x1
-24x11x16
-20x7x21
-20x7x9
-7x26x2
-5x18x1
-16x26x28
-4x10x18
-27x30x21
-26x9x9
-8x16x14
-6x27x8
-28x9x20
-13x13x4
-9x18x16
-18x15x18
-22x19x14
-14x10x17
-25x29x11
-1x18x19
-8x11x26
-18x6x14
-30x24x13
-27x1x27
-15x9x3
-2x29x17
-2x26x21
-22x9x9
-20x20x20
-22x28x2
-26x5x16
-11x3x14
-21x16x16
-18x26x7
-18x30x6
-7x11x12
-15x10x2
-27x2x16
-27x30x24
-28x14x24
-7x4x8
-6x28x15
-13x19x1
-22x26x30
-7x30x24
-2x17x21
-19x26x2
-19x24x15
-14x23x2
-21x27x15
-30x15x14
-21x29x5
-23x30x2
-4x1x2
-15x5x13
-21x2x30
-20x7x16
-1x21x25
-2x25x1
-12x29x5
-28x13x16
-26x3x12
-29x20x23
-28x12x20
-4x30x8
-16x15x16
-6x16x29
-2x28x13
-24x25x2
-26x15x22
-17x20x11
-18x12x7
-19x1x18
-8x27x13
-22x16x8
-19x26x17
-13x11x10
-22x12x3
-13x12x14
-29x17x9
-6x14x10
-14x20x10
-8x26x9
-25x13x22
-3x30x25
-14x28x1
-30x29x12
-3x17x15
-3x24x14
-28x24x22
-16x6x1
-20x25x14
-17x17x13
-6x19x27
-10x15x20
-8x23x20
-7x29x21
-18x9x25
-10x5x22
-2x27x27
-16x18x30
-15x5x12
-26x29x29
-28x11x10
-9x29x28
-24x15x23
-26x9x10
-5x1x25
-22x27x16
-7x29x3
-1x3x5
-8x7x29
-19x21x11
-28x13x30
-17x16x20
-5x10x25
-9x14x15
-15x14x23
-16x4x17
-21x8x2
-9x9x8
-22x22x4
-10x2x27
-12x19x10
-15x29x4
-22x14x7
-29x18x5
-1x7x27
-24x1x15
-23x23x26
-12x17x23
-26x10x24
-8x22x2
-8x1x10
-22x19x12
-2x23x13
-11x27x25
-26x15x27
-27x7x21
-18x9x6
-22x21x22
-7x12x26
-23x21x13
-14x3x8
-5x9x28
-29x29x15
-27x25x23
-12x2x24
-8x2x20
-29x19x4
-12x24x29
-2x27x28
-14x20x9
-28x6x25
-18x29x8
-19x11x30
-15x11x23
-18x7x7
-14x20x14
-26x18x22
-27x25x13
-12x10x30
-30x2x7
-28x10x1
-18x10x30
-22x11x5
-22x16x3
-25x15x9
-5x10x24
-4x28x8
-19x24x18
-3x4x25
-14x4x30
-11x26x3
-12x12x12
-26x7x24
-3x2x14
-1x27x7
-2x2x13
-3x26x26
-12x4x11
-12x17x20
-4x19x30
-5x18x10
-17x6x18
-19x30x20
-11x2x17
-30x13x19
-22x23x7
-17x28x2
-5x17x30
-7x11x4
-21x26x18
-15x28x4
-5x6x27
-12x6x16
-9x17x12
-27x20x5
-14x5x20
-27x14x6
-2x14x21
-4x28x30
-24x5x1
-19x29x29
-11x23x1
-8x16x21
-3x17x19
-10x13x5
-20x21x16
-23x3x6
-27x26x11
-3x2x22
-14x3x5
-10x9x8
-- 
cgit v1.2.3-70-g09d2