diff --git a/2017/02/Cargo.lock b/2017/02/Cargo.lock new file mode 100644 index 0000000..491b4aa --- /dev/null +++ b/2017/02/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "day-02" +version = "0.1.0" + diff --git a/2017/02/Cargo.toml b/2017/02/Cargo.toml new file mode 100644 index 0000000..c8da8bc --- /dev/null +++ b/2017/02/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day-02" +version = "0.1.0" +authors = ["logaritmisk "] + +[dependencies] diff --git a/2017/02/input.txt b/2017/02/input.txt new file mode 100644 index 0000000..52726e5 --- /dev/null +++ b/2017/02/input.txt @@ -0,0 +1,16 @@ +278 1689 250 1512 1792 1974 175 1639 235 1635 1690 1947 810 224 928 859 +160 50 55 81 68 130 145 21 211 136 119 78 174 155 149 72 +4284 185 4499 273 4750 4620 4779 4669 2333 231 416 1603 197 922 5149 2993 +120 124 104 1015 1467 110 299 320 1516 137 1473 132 1229 1329 1430 392 +257 234 3409 2914 2993 3291 368 284 259 3445 245 1400 3276 339 2207 233 +1259 78 811 99 2295 1628 3264 2616 116 3069 2622 1696 1457 1532 268 82 +868 619 139 522 168 872 176 160 1010 200 974 1008 1139 552 510 1083 +1982 224 3003 234 212 1293 1453 3359 326 3627 3276 3347 1438 2910 248 2512 +4964 527 5108 4742 4282 4561 4070 3540 196 228 3639 4848 152 1174 5005 202 +1381 1480 116 435 980 1022 155 1452 1372 121 128 869 1043 826 1398 137 +2067 2153 622 1479 2405 1134 2160 1057 819 99 106 1628 1538 108 112 1732 +4535 2729 4960 241 4372 3960 248 267 230 5083 827 1843 3488 4762 2294 3932 +3245 190 2249 2812 2620 2743 2209 465 139 2757 203 2832 2454 177 2799 2278 +1308 797 498 791 1312 99 1402 1332 521 1354 1339 101 367 1333 111 92 +149 4140 112 3748 148 815 4261 138 1422 2670 32 334 2029 4750 4472 2010 +114 605 94 136 96 167 553 395 164 159 284 104 530 551 544 18 diff --git a/2017/02/src/main.rs b/2017/02/src/main.rs new file mode 100644 index 0000000..1d6d87d --- /dev/null +++ b/2017/02/src/main.rs @@ -0,0 +1,89 @@ +use std::io::{self, Read}; + + +type Data = Vec>; + + +fn parse(input: &str) -> Data { + input + .lines() + .map(|line| { + line.split_whitespace() + .flat_map(|cell| cell.parse::()) + .collect::>() + }) + .collect::>() +} + +fn checksum(data: &Data) -> u32 { + data.iter() + .map(|row| { + let max = row.iter().max().unwrap_or(&0); + let min = row.iter().min().unwrap_or(&0); + + max - min + }) + .sum() +} + +fn divisible(data: &Data) -> u32 { + data.iter() + .map(|row| { + let mut iter = row.iter(); + + while let Some(a) = iter.next() { + for b in iter.clone() { + if a % b == 0 { + return a / b; + } else if b % a == 0 { + return b / a; + } + } + } + + 0 + }) + .sum() +} + + +fn main() { + let mut input = String::new(); + + io::stdin() + .read_to_string(&mut input) + .expect("failed to parse input"); + + let data = parse(&input); + + println!("checksum={}", checksum(&data)); + println!("divisible={}", divisible(&data)); +} + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_checksum() { + let input = "5 1 9 5\n\ + 7 5 3\n\ + 2 4 6 8"; + + let data = parse(input); + + assert_eq!(checksum(&data), 18); + } + + #[test] + fn test_divisible() { + let input = "5 9 2 8\n\ + 9 4 7 3\n\ + 3 8 6 5"; + + let data = parse(input); + + assert_eq!(divisible(&data), 9); + } +} diff --git a/2017/03/Cargo.lock b/2017/03/Cargo.lock new file mode 100644 index 0000000..428789a --- /dev/null +++ b/2017/03/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "day-03" +version = "0.1.0" + diff --git a/2017/03/Cargo.toml b/2017/03/Cargo.toml new file mode 100644 index 0000000..7277975 --- /dev/null +++ b/2017/03/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day-03" +version = "0.1.0" +authors = ["logaritmisk "] + +[dependencies] diff --git a/2017/03/input.txt b/2017/03/input.txt new file mode 100644 index 0000000..ce15bc4 --- /dev/null +++ b/2017/03/input.txt @@ -0,0 +1 @@ +325489 diff --git a/2017/03/src/main.rs b/2017/03/src/main.rs new file mode 100644 index 0000000..df3f23f --- /dev/null +++ b/2017/03/src/main.rs @@ -0,0 +1,154 @@ +use std::io::{self, Read}; +use std::iter::Iterator; +use std::collections::HashMap; + + +struct Spiral { + x: i32, + y: i32, + n: usize, + d_x: i32, + d_y: i32, +} + +impl Spiral { + fn new() -> Self { + Spiral { + x: 0, + y: 0, + n: 0, + d_x: 0, + d_y: -1, + } + } +} + +impl Iterator for Spiral { + type Item = (usize, (i32, i32)); + + fn next(&mut self) -> Option { + self.n += 1; + + if self.x.abs() == self.y.abs() && !(self.d_x == 1 && self.d_y == 0) + || self.x > 0 && self.y == 1 - self.x + { + let t = self.d_x; + + self.d_x = -self.d_y; + self.d_y = t; + } + + let position = Some((self.n, (self.x, self.y))); + + self.x += self.d_x; + self.y += self.d_y; + + position + } +} + +fn position(n: i32) -> (i32, i32) { + let mut spiral = Spiral::new(); + + let (_, pos) = spiral.nth((n - 1) as usize).unwrap(); + + pos +} + +fn distance(from: (i32, i32), to: (i32, i32)) -> usize { + ((to.0 - from.0) + (to.1 - from.1)).abs() as usize +} + +fn allocate(input: usize) -> usize { + let mut grid: HashMap<(i32, i32), usize> = HashMap::new(); + + grid.insert((0, 0), 1); + + let spiral = Spiral::new(); + + let mut value = 0; + + for (_, (x, y)) in spiral.skip(1) { + value = 0; + + if let Some(v) = grid.get(&(x + 1, y)) { + value += v; + } + if let Some(v) = grid.get(&(x + 1, y + 1)) { + value += v; + } + if let Some(v) = grid.get(&(x, y + 1)) { + value += v; + } + if let Some(v) = grid.get(&(x - 1, y + 1)) { + value += v; + } + if let Some(v) = grid.get(&(x - 1, y)) { + value += v; + } + if let Some(v) = grid.get(&(x - 1, y - 1)) { + value += v; + } + if let Some(v) = grid.get(&(x, y - 1)) { + value += v; + } + if let Some(v) = grid.get(&(x + 1, y - 1)) { + value += v; + } + + if value > input { + break; + } + + grid.insert((x, y), value); + } + + value +} + +fn main() { + let mut input = String::new(); + + io::stdin() + .read_to_string(&mut input) + .expect("failed to parse input"); + + for line in input + .lines() + .map(|line| line.trim()) + .filter(|line| !line.is_empty()) + { + let value = line.parse::() + .expect("failed to parse value as integer"); + + println!("distance={:?}", distance(position(value as i32), (0, 0))); + println!("allocate={:?}", allocate(value)); + } +} + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_position() { + assert_eq!(position(1), (0, 0)); + assert_eq!(position(12), (2, 1)); + assert_eq!(position(23), (0, -2)); + } + + #[test] + fn test_distance() { + assert_eq!(distance((0, 0), (0, 0)), 0); + assert_eq!(distance((2, 1), (0, 0)), 3); + assert_eq!(distance((0, -2), (0, 0)), 2); + } + + #[test] + fn test_allocate() { + assert_eq!(allocate(4), 5); + assert_eq!(allocate(72), 122); + assert_eq!(allocate(500), 747); + } +} diff --git a/2017/04/Cargo.lock b/2017/04/Cargo.lock new file mode 100644 index 0000000..724db05 --- /dev/null +++ b/2017/04/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "day-04" +version = "0.1.0" + diff --git a/2017/04/Cargo.toml b/2017/04/Cargo.toml new file mode 100644 index 0000000..6d34f24 --- /dev/null +++ b/2017/04/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day-04" +version = "0.1.0" +authors = ["logaritmisk "] + +[dependencies] diff --git a/2017/04/input.txt b/2017/04/input.txt new file mode 100644 index 0000000..bf3fffb --- /dev/null +++ b/2017/04/input.txt @@ -0,0 +1,512 @@ +pphsv ojtou brvhsj cer ntfhlra udeh ccgtyzc zoyzmh jum lugbnk +vxjnf fzqitnj uyfck blnl impo kxoow nngd worcm bdesehw +caibh nfuk kfnu llfdbz uxjty yxjut jcea +qiho qif eupwww avyglnj nxzotsu hio lws +xjty usocjsh pivk qnknunc yjcgh bwya djw zpyr +ycfmfe mgq sjiomg nfzjul bjwkmgu yvsnvgj dcjupu wzz blmn +rdowgbt vpwfdoi blzl laghnk gsa vhnpo cztxzlb rtz hvwonhb eciju pfjtbo +bqs bqs dbutvgf mmzb izpyud rap izpyud xlzeb mnj hjncs +xpu vwp nujcos piu irindir tpmfd umtvlm gznu +sfpuxar qcnbte omouazv cnh uaxspfr sepolf rusafpx +xbmaf iceyqqq sabpt gliexel muubepe qqiyqce fmrcc eazk obkeonl fmccr kgk +apg gbycwe gap pag +gagv saqbk lwtllc wnhzz khxsjc +lgc alen rlmsp anel gcbvg +bujlaz rks rlqf deknmee yrp +scqvl weusbc bgvaz vgg cjwsfno vqy zbq aqy tvf bgzav +hbki vei fxdwljs myjuba elbsib pvy xxjxgi dtgv +linzaeu qbwdke fdg pykw +qvtdd aco aav bpu mvkcuc kjfj japgfki jfdl gem hog bdzsiea +wpbigkb lzhwba jssjkn qvb kmwu qddv +iny osyvqnt tumunzb torq bdeneg wywank poza ipp iggorw +tuko mhdbsf vmjdop jomaqpj rcdsud hmgspr lsas nzmwc +cirkjq nmjuu xtgejv gtexvj vjcmtqq unjmu +xsdmezq xvqjvqp exhygy qahju hvd qadmdh lok +wvvys kax rohrrar rwhnvi lhnmefp lsktouy bxilosp +wayf diobnl zvu obnidl oibnld +cewil ygsf ffzp ruxhu vah lnvwt aef lnnjc kgkb gxtlx feko +uti epphrin pywths cpzzh csjei nczhamy gayxmb bdcytq xkx fgmt +qvzyuwi dwo swkw bwjdrn dasgd ijgw vzabaop yefyhmc wgij +dyg sugrf vid etz weyqg nyntx dwfgwm khon hnzzzn xfyra +ofbh bdrsk rdrjj elaxvk jrjdr +msxau rsocvx zxdda mxz lknl +qktaywx dirpdbf unqnd wbrwkuu fvmqwl emxr big +xwz kvsydc ayokjyy qiah omw neo htltxx fxhwqwj colqvbb sxmo ephfkex +ncjxoaf fwjkc czmhv ylg axcjofn dvj bzqjku opvcr jiwzucg vmhzc +gmmnrt zqar twdwrg qiwwki fcbr lixm hjdwwe moiva +roinlxg cxeezve whannk cxeezve pyoj boweioy cpkgxsz +qkct qso xlb xyy aellfet rzt cbboow devfb nih fhbfxzi +qyc ltxia alixt atilx xtgrv +svruz ufvo rvesnxv dik vzurs jjg idk +xeudhrg hudn cilo ljplosb +kpb oyzvywx vldko qhfkwod bkeutk zqcqug pbriu wqocos +qkngzfy whobyri aze jvipdty ocirbep icqwc +kzxxlab sjr zhymws xkbx +nnxs gkwtld dwhkry snuibq dtdl aicug bhtlfzp qzk jctos +regvro mxcq hqof yraucxi jhkol iuxineo pbtnk rfjwc szgjpr ndqqj vfgm +yqrfox xoqrfy utbryu utubyr +jdubjt wqrl wnk rlqw nwiq pnbn qinw uaff ftdo htfrav +rum mur umr tij ovbahl losao imawwpb wadhww tbteyqc +napxd kzeiqcp ppgqucm xkityt frq hugrp gjgtt gmuqppc zwqme +xyuzs ysch howlzgu dkqppbs nvbiz mks mtxv vivouex uvawq +ffe lfsn nlq mpulheq ikcfo wdtz cnwsbph zkib muu +bqkxav wtecb lxwdhr kqbavx aqxvbk +czwswqx ldkxapd pfwd bdkkj iqohla cwosw ihqpd pcc ckhabbn +foiip hau rbqiyhh htm omeubgh symh evfcqg +lqx xlq rsgf izu esetis +npsrkdj fvulgkw eovw mzr uobcze azb tij ihoer ehori jit wknsqhm +gnrksh xwggt oosi bpnmhx qqaa mpmryu jhzyz +yad gbexqcr gbexqcr gbexqcr +ldca xxhznn twyy ytwy zhxnnx xfmpi +floioot kfyh dhibv ezyznar sfg sfg ezyznar +cinioim iiocmin ypla aypl +mhwcjbz dftuqsy wswop eizbf ptsd +ehx mlh nfxgfkz uuw xftmn ptlkbo vsnyo ttwce +oexvf orcg cncnkfk comvhl +lqewsj lyulrcl efixd qvd fhznqnz yvrkwyi xmhgc vzbp +dmr wrxqh thcm giomp rtvl ssc gwq rbklw hcmt fjvud +teozhb dmzwfv qkq pvcqfqq +hvlebc qqmg repxk zwrjdx ztruwb such tyligs ybg +psa rqznokd lgc jstqres yiqt mbiody xazb xjuk dtb +lea ncm rnh myzqzwm +wjml eums ueflvbr cjpgnl qduunu zfxaai jwlm lprzzg vrn ttetyr sume +uwkgeu uiahd plyewgi vveo nwhsitz mcitc uvk zsxehgs sewl +lnbdrka sgtivn sozzq mgd vhxfnlr twrfpk +gadphmk mbx lmlbrf tsnehnr lawdpm fnima gxgl +umty vrn dpow fsnnpjv fsnvnjp nnsvpjf cioaio +euu uue zeskmtk hob stekkzm +ypqpri qwdju ypriqp iprqyp jnoxqa +lkppi ingfxw wlulvp yhwrli nxwigf oyuhq ggfslx +kdd ypvr pyvr waw vyrp khqq mamxca bapq gobfm +iuq upvdpv zxef bfwns lmq lxswr kpsqo pwde iaaou nsw udy +lgzo nil ovgrmt omgtrv jrqp pqrj lit +uumyu iiakfj gvdtzz qbux yxn ejs dvlts +hcm ghutxq zswi tmyhqef hgxtuq +shkhkdk kad seubeax kdl mzu +cpykgr skx rfhpor xsk moyhlai ogv ophfrr dxipuuh +beyw jvrre opodn zdoajhx fhg ijs drczy drczy hjungq +jrzieja gfg yzdn yxm wshibsn fgg +xtylh vxscmvp rfymq uzhpyea spxcmvv dlni msj yxhlt +eov awql miv miv eov +mmvrfbg fjiyf hvqz zpuqmbf fszyuz ldfgni wemfjl fjjpl rbnpy rfb +ppzpeh nam ntv xnchtyk hja hpepzp foj bibvx nmmdlff bsrkp +qiy qiy umhlnh qiy +tyds oepk wae tdsy sdty +ukawr rkwau ghtjhm axy +wtbjiv btjivw ewaf hwk ttq +kdpun myve sqv rhvpy fnjwt puw ujhf thsp nkdadqr +vyw wkkpdpy xlgz lmmcuve ncuq lmotk +pmsfw vxd jpe qxlyasx ejp gwuv +pmgyndm ezofbvx nicbwrw kwnlj yjvnas fdpkfo mqcsyhn pyjpf fbexvzo vkftm erl +trmwvk rywuzoz hbidea kicohfz heidab deaibh +sogf govd dknpk vxrvk rlm vwhjk +xnxbfmw wguzrhd zbmkz piwppa mkbzz xvwrdgy flusfqb +cgduq hbnwr xfx mrejb ckw zkbaihf cloow cwk wuvthv iwqctx +vugx qbucd gxuv ocb cob +ilmet fbelxxz qratdfn unoj hbc duv srmikz +vnzuw zgpbqgf uzm thysyxd dinfh bgvr olungg ksd dsetwqz hpg +omagsf zpr coa kknx bzithq pewp flvoz xiiq weojqr wpep +aagj gcglqt gqcglt xbfx dhdx lbx +pljq plxuscw ilh wfk lhi hli fouieyw +hvnh zvm aqy dzitirm veq ctux +lglhs aqibdii hjbn cfgc qrg pnbntcx owoks ebz +jozngde lwne mbo omb fnyzvvj gndozje +bbdgc igtdj uhahgp sqduko +uuspedu fgnspm ewc slly jbs chl heanm abqijx kadvgxu +akfsft skna kusjqr rkqujs +erc vrljpu lruvjp lpvjur +iors hcdr fsqtcj vop vmn dtqnz tov oscjlw cdrh ctfjsq lrnts +fxp mczo sjlcxa mzoc jmsq hcxybow dmrr bcoxhyw +aac ewraerq odmxpz aac aac +zzio zebmxa szeej poordr gmi owwnnh xfx rzrab lfey jesze +akc yyoj vqod drtne +joxhvyf ymasnbr omouvq isxdrr +qyi ayrkzu jsk vqvvno jkkuxi zufnnwu mrsszdf +ocqi htfb tzjna cdt wkzhynm eergf +yokzugl usyuqu qvotq uweqyow lygkzuo kpmqmb uglyzok +glvshl imqv jrv xlpnsy gcg psj irtiamg wkl +bjcpc nvyloa dkkan efj okubpc cxlowm eone kmpny +cyxqys nmuaftv gqxj gtvsc +beouh dioxiah kizdy hyi cozrray rave fqxmxmj gdm +frjz amrsat lxvhzj azhevtu vxlzhj +zwmnrk sbk txzrcsj sbk oosgfej cvh zuthibi onvwd sbk nhwpzq +gzamt vraw kuk ugayl lyaug bww rwav ijah +bdjirxg vifjr rhbxpa oao yrhjxoi pbn +navb umesiys yhix phuhu aekkciu nlnsiq wjf idqdwp +cmhw rsu urs ziprlfe +kyhxitv cgty bnwjyq cygt sgjn pdab imarvhg yjbnqw +axaa ejancv yau njpc jvwy bpft kwjvg qzrbvtm diu njpc bpft +ambj upe rmqr yudbiqf krudp pqyf +tnb mobnpv vep ohxoc cyip wxyccfo jrbi rwsws kls zlv oohxc +fjh dmb hlbq bqc jhf kax suz fjjg rkpc +wjnn byfirm goeyh xtjmdka +tgyfxx hefpxln mveobqr yeo ftfn srt vim vlcu hevoi xtaaff +imyql xotcl poql rlueapq bkwykm hlalk bkwykm +gkec zff hbmtq rjxjbcf arerlu pvz cdaqi nijmhv uodwjh +mpctof mopftc ksfbat sbkatf +nvdd jub bvi kyggdbx nwtiok gjt mgsm dbhsn rzibgjm dvdn eqi +ysd iirp dfgzza wiyeoou ysd ispkv bcqg wwzqgq xphse +ntq ivposb gsd ezl tlkztp lez qyurp vxsmg dgs +wijs rydbj onm usiyqzb hwrol giusanb kewukl yziuqbs doojam nom +lfacyy xwwast truqtt tzneimn uxsydc ktu eqyaj ndszak +ffleooc kikif fohgop aucy moubqxu +iaxc pnwexdl ncy vmwm xrqoi wpgftq rofx utyzjuf stdxq twpgfq +ppmlp etsvi cjdx poly ynx vfxpslg mqjo qnpsage flpsxvg jwsxiqt +lbyhnb kflrpeq ssoti webxr embbjd kbnx ubzqco +khhc vwuqzb ebocbko rwmonkz edfqn hzh qhncoq gbwdi wjeg ocwow +ghzhd kcxblp lzwkkr gzhdh umk pblcxk +wyajtw jiff ouylv sni lwhlrg avqjiis igzx wbl lhrwgl +glhh kaxha tqii hwzx rgic kaxha rgyidmt qdgxfl ynjc oibfij +bapj bix rjniw ynbql idlvnmt wynpzbl zlpuoix kvn kakwys +aldpxxu iojxp rif xbyqtr jffdvy qnrq tqwsdiu +ulssco ktbymjw bfj zhkg zgc ctyri +ilrmq wfahcgk mrlqi bguad inj +cjzc rekuy ifr wfkg sple +cvjkp qbmumnp mprg ltmwxxh zpemtyb ozzssfd ksu mgrp +nvc sxp mpkxz bhlctq hguaa yrdkm iwsgfg qjssh gobbies hucdh +jdxrjw qmo qmo vobhnu +dnjib wtjp rfdjqdj skpvrb vkwevb kxxovp +fzi kicta zkuvr rfaawv ehklq cfdjsyb tukahwr zkuvr kicta ouq +aba ytdguk gqmpn hvxabff hvxabff dckj +fna wxyqhxd hvy khsu yypoyy lvvue medheua gim slf drdbeh ikihf +jquz wwo wwo ghlz jrbvb jrbvb +jwzvkl yjw ouwla yjw ouwla +zsvlgyf rzqbtj qygynem ukdgjm lbsyh tmdzp fbcaim eymzr +pvw sbs dvsa plmepl pwv ayxk vpw dwt +inayadn pnti yzhxk azga gxq aznbciu gjnmyqm +isgf ndqmk beyqq ebyqq srtzxo aiiw oqfuwp uoqwfp buejctv pxbk +pzl irv tzvzdb wcy eszm ybwiw ycw riizifd iybww +btpu cua azzqffy owcr +ofwq sqlpzat lozdxlc aevjmpc lcolzxd wbbysn qwfo vcrx gdzgi +dbpfmxu ydsxwl ijn svxtop csep ldqeog ffye zcrl soh aclw +wyiyyhv vyhiywy obgi hiyywvy +ddvaoc lhv spurn rgxyy onjw illvn yryxg xyyrg +vid wdttqq kajr myip +wolqlue phlunpt dcmmkfm sgxk dmmckmf sfng jlbsntq dxp +zmneyho fswj xdgsjc oefwjdi htgxvbd tgqrq xodoa +ynw bygqdnh hhmnkuw cojqrke qszzdjo orskwq mdfae asabn +vvpm vkj pcxghao caoxphg axhblxb vvmp +txox nzy eqn zgir dytsi girz ffa ugjjbzj brob fll +kbz pukqbd fiwmuh umwihf bkz dvz +vgs vejs vejs vejs mbkyjjy +viqmnmu bitkyw nddnk dknnd cldnpp hipub plcdpn fdzzpb mmyomn +ndylnfx gozlrx ngptk rnpteb wtacx xmtcjy xldha +fey doyxis ampmtr ycqh syw cqhlj hnngx +dijf nac tvkq ayo akbj lzmngdm wfxpn bpyvrf cvdqpa +zsofz lhho hgat wqskga mnt +mylwm zxsd omzpa waz hcrr lxmpq jsw sqtwak pzoma +rwhgsgt ysdq ztihici mpwcawv alkqg wsxiwx +snldn bcb anjdv cbb awsscc cqxult hjmjew mcycb fdpdg sesrh +kukrqm fawafz qdim wyobtqx bnvjnqg dcvqxta yptr nnpu ughldqp duo zafwaf +knb yjqb bscpnt nzg sqeu zkahna ttuf nsbtpc ixwit vucwj idix +bfqyx xlnpc ijrxu zkqi kjxtahr fgag orusms adi bfqyx bfqyx +dqddc ncbv bvfk hefikb dqddc hqjl otpx zfiu +ntkv qunrzx eztzure ctt rjo bkdt znvd jwdf gqhf mmhrzgt +zeavm hkbf rawqwuf pis dojlkt vnjhmi uvk cufmn qginezd xyut +hnidzk chlctc yst pepd dxntbxg vqk daxfpmu wshyddl +jgd vesqgo bdyqy igl ahstdm wjtd lrtkjsv tjsj sccxbih esn gkkzj +iisiswh jll rhlaf jqwwgfa wmhyo izva vrg zjkak nlxxfer rvhx +mkrkd jlqtpy ukstro ktuors wsj ynqpbp kpiyxzv nxeiwg xpzvkiy +jbr gnct fwklekg cmfqnm ctn gqobrs kwht +pztmjs yiffc kfhsblx yiffc yiffc +biezil iiezbl bzeiil smocoju +viiigm gmmmk yeiv dxzogro qsmzsur hukzwjn lcle syo mdj uruf rxfseu +extchsd adeff ouikoj fyaclr rwwvqsd dooe tcxheds zrdqqhm fdoxv kbxi tlcj +aycnydq qlxhka zoi shplo qll +bfry lbwckm ltq rbfy gpn vojp ruj dpxcve geq +svtvfwh lca lac qia vhwsftv nookdfz xgjiaf yvcdlt +aspgqym fryuzhx bbydf tbn bwutsc fqgi zij lmxhog qnmse +rbb gsys volnas onvlas lonasv vwjdso lnteapy +got iauk kficn jvfuy yvoe jcxwui hyamqx mke mwh jcxwui hyamqx +avutfi ggmha dkopc kothnnb syoi xsd wjedywy +oziejyz yzeijoz hnthyn knj juuq qujtp kgq bymlnlf yicf +zsejuy dybeap hvowmvn okxb yoi epadby cnzjk xfwprzc +lacg iiix fblhxvf nrkkol lnafzw qspzsn gvdy ipj zub uouseo +evukwkh ycjxxc lptwmf pmd izxdsos zrkavf pgjoy zwokg mpjiej +vqw ijwoy eaw wvq svmcq ccxi nyub ynlq eqornax uprt pygfe +plue okbbm btvm gba kutn jacjx ysqt lvx pcxxu qcf +pyw ffjfudq bvk hsdwdva fjnivhf odbmw krpgrj +hziesm bxa dceiwt tmvivjk snl fkh dahsxyx kqlhak lurtk +xss sswyxrg yqff dbkx kbxd mpzbmnl bzplnmm +uvz pjm ilrol pmj uzct ztcu brhkv +heiz jcn syjt zfvlvaq aflvqvz amcjh rxnitw +cxl nxvrn vjnz aewtr cxtko nnvcp ltptd adpxt zvjn fntklj +aymmm tuirj hzngq zhbh paqs kvpfo aqsp kmo acprw sabrso kdqmp +ndqjspv mmhp pndjsvq rti usm +ije oad mvelyg jadz ekm dao zdcmv +qwww tmwmdbb oxxfoza rgmf eonku brh gcgiuoi ojscn +fjedeek ohlax fiydku rbnxpg wfivg cdgs +axwbni hojye mwfe oyqknxp whdgfy ihku mbhr gagnz hehagxj +hibautd blnayq lnayqb gepml mgpel qunw +ircx oeb kujtip zbu ebo cmmn +upyqvot wbponp hnn vav avv tvrky omm +yzqsnf agbfsw dbxoya sfnqzy hqrxek qsnyzf oagyerm xxhukm +xzvk mvcwz oujr hell hoe xexa dqlpqt xdqz ucola hsvv tcmybhl +skldxr mzyol ybzyzd jnnxb rxncdy nkpwy fwlnsw omylz oiwieu fshv ngvha +jkwqf yxrox hejfoq orxyx +rijken xiwf mawqcfu erinjk jsi yyg mmu mdkfqb +ornjes krp eornjs enjros pyqp nnwwjl +wzd uqqo kyeli tikdle aykdjog uiz rbpnw mjxezf ihiz rlgyg +cjm ajqgvkz kfgyy dmczlc mjc kxcm zctyqgh ymsk jwhqfd czpqgan +vxkzvco owo qogj uyictoj kfr pyoo ejrru npluynx bvv jhhzu kuciwc +eqk pcsly kelu arzgoe trfo fotr cuaax +lagonw qvcssqz sdoklh uvovi sfrkmd hnvafj ltg wfjj +viwbkm hpwe kzzwrbr axjtlq mznin wwpjg unlwur +nuzorgo qfoz ydisca qxdfutv hzg +nqgge tobtt hjocx ntyqyi rxzkynw wrnxzyk ciscy trjt ottbt +yuii srawx gljxe eteogz kcu jlgxe tjik ktsnp agudqok jwol vfnyv +vgicg dhnrmxz sjhozy hlalx rutwq +nyoyoje kco hoyam hoyam tta iflud amh gdxcsj vqr fvsqcgv +xdmbtph ueen cskerl rxjvpdc +nricn addljzg obq rikez igq bxygkmv qmgojou uheubk qor +snzd ztusvr vrstzu mceddga hgu +vvrbfjg mcdhmsf ldtwl otuna gmjurrx jgrurxm rxmurjg yrioq +iotkvo sftfvn vvoit lllju xvlg rdsb ywmdf mzxigu kzq +sgqw gqsw lqfu wgqs xpiwou jurgucd azq wgaqpm +ijntzi chlnfj yjqatz hjflcn vys ofq oqf oadthe jrfw +mmc motjo vcwmod rpaszfk zgkkua bpja vjb htrk +bpfvvka kmger mnvvfl hakudy yfprdoo mvnlfv rgmek evnwg +mykpu juavkn cecdvi aszbi lxm hmps oaqoif +fshizd fsdzhi lvcq hhpb eavwno auqlwz rpv owcdojx amsmf qgnddd +pohmcn hlcxk qsesxh rncr +fgyrsis ldem avxmnh frpodq oefzn +plfpu qdyojz xdrzrjy kpv abkh fge bbnotvp liikmcu czvwl oyh +ovha muitw pzy edfjoo fhsxuh dliyruc dikcd cqem ywfy +exyry jtzqn tscr qbtxno cikk poqgr tnjzq eofe sxea anlikep kick +zcie purpw dmhhms bcdo prwup uprpw wfejgjd +kwtjc cmixp dodfwj hcgmmat pkeyspo ubnl ajxvj ffkh xvw +nvlgq oduus psufiqg lrwpn dleftn xtllqvf usgz +liarf sczsf sczsf wky qtzq qvve qvve +cit vtjsh jrhkyvi txj urmq hppx +rhblmxn rhblmxn lkgow dylurwc beyk gfcewxj ehpl disoe tjbjy lkgow +nbkrm jvk ffux ars agns bebic jzjfm kmnbr gptvtsa ufxf +hrlvup jaz tafyr qcgq wkd fiz bgsrx jmtcvo qkbvj +eontk djf tiafrng mtwat puainel nyjoh meynxbf eqdw +aspvmbx tgzuszm fpj xkl nzpr fjp vnomk byx sbtov tnu utn +ldyww gwmiddv hwyh gcgsdit gtgdisc suufl xsw dlwyw +sye dgbd wyf ixqzthx dgdb esy +nsdgera fqz xwbdgui ngdgbcd bcn qrdxml cwcmxws tncm mqsodj cqgk +estayas cocmbpv cdcf vygtswo aplwa estayas +ndc ndc wntr sfls sfls +gse svv esmi lcdii lnr kemrk gnk ildic blnqy wvn +mwlpm awkr sxsudub yauwww hnktbog fpnqc nmxoq yoparu tqjpkug nbipft +czwnkk hrodtmx yyzpil ooqjb cvxzfh +kwa wak gipak gsgrw +jyy fja jjk kuvoqdy urqx +doyu chgn gvtxi qjdigvy kxr dizwrjc sll zenl yyblj +epxeqih kfi hlog pakk kkiidrh hiufw wuhif baqzxzi bgcd phi jzjdxjp +hllhyad sodc nyrtfe kygof hyyqi txddqg wcwxvnt ewqmj wwv +vxymuoe caat diqwbo vfruxdf sqniefn hetcbl nvtttu ouesb +yvoez pvthzc tdowuci wjijicn fhpmq kfobag yctdwj +xaugkb rprkg tidpx pjk tpwwm pbcfhr wmwpt sfynrl iouaw zbnyu +auakc culuxg bffg rodyhea ixlmtfb jdurl szoa +xgona fjzho buh khbvti ddh mgj ptgaqps +dqldupd udpldqd poku gfgpcg zsvk grvk kntx jih uwvxdvq sivk +mwdnq wmqdn uzto mdqnw +alvfm qxqo thwru xqqo jilnsgs rnonk fwntuby ogbha +gvxlxyf cdpv khvpka kgt gshlaa tenb +mtgvvxh mrjrsd truk rrerzx tujweaz +ozepw gsqkr rtmmc cmrtm +spnthg xhlzuu xwcrxz aqqejhh bpzh +ectdftk rgp mkp vxp pevriz wkgfkaw vfygj peg gep wjn +bksbu ywsszf tsbrps vxicr hfustju ynnlbo +sio urbvf ujezjk vkyc ukjezj bvrfu qwwgqmw uqfekvx bzipxus qfumwh +druru kycweog ycmef rjyy fkgp +rmf ifbip rsztco coju wlr bfbmsug lwr bsufbgm nwmp +jjuxtyd yif rkldsvu binq spepa mfg aszm +ghilaau ncm sgbavz omzeotz azukf bgjw zqzo gjbw pld +gtog iqheik budeu guvljmi +qqlj jqql ttk xcxu +cfq cfq kpagib dxfxufw hhksbjh gpcp +xkeax acnia jjubfc mhot uxlhh gnkj pavta rciondm rkquh xudqian +wqhqzg psqh rnnc uujlgq +hpjpaoa maa rdndl xewqj nmagwx xewqj hxuyvou xziv rdndl fbxmbz hmfwghy +dtwnrca hbfcptw qrmvat sdatx les zwizogq +bodiwzg sgoas fsf wgkrn zgbdowi wfkz +ngcsg grtao wcfxpyl gngcs fxwycpl fkpt +txvngo vxngot tkoap zqjc qzcj oeruix myh ihgdfik qtt +rxeh fcbnoo rxeh lve wvoc pmnxej dlcbrh rztt noibg +zyvq lwxqu oyjv bvidmf wxuql +wzc zcw czw dnhkvrg nzslrf +cfgl uwhxu qnsfmt tgyabes mqnq nkitq hmcvxlt qqmn yzmb uomqp +lwziur hgmdmv zuvipkp vir apr gfaq zeo dunat mqgafzg +prq pqkr xlrw njf ncqni kgpoma cmtklv +jwfuc poz opz fuple +fgleub lcgnifu lkwo kftbc onvwvdx lukpod xgmh rnj +rwqvv ezjmoni llq ekd cdvv kzcci gzsj vuipv fnw +rtnua gbnzg kqtogns iozzwc kjpzz kiiurey yzlvzx cpy xrue +fexcjmw ebwssx ewbcgwd uwolou nfdhic vupiykn jss djoo xftbkgo +idf ipvmez qyevwd wfsjxja dif dig +szpbtsa bssaztp sptzasb qppgz odur cpmn wpmg +pxn zjmq rbnr azwstzm mln upaqyty nxp oge nlm +bfaryqv hag phtvh ypi +epeeog lip zqio wuehlnb bau sbd dsb +xbrrp sej agrqnpa aarpnqg bnwyi jbn +uqmsvd asmuyy czxviw pznnmvc +sddwmek wnaea iwphupk sabo +cingdks ksh mtyip zltgafm dflkcd wbdnqup uokm gmxpyd libz svv akce +qge ewv dkabkmb xcpi nrkmsu mkmb djvamg mhhrwjh +krjt etfhm bxzatw zdkvz ehov seyxbw mkiirs plzoplu sogmwb wodfcle +qwea adibdp emo homrd pjcrhlc eqaw kqsrp rphjlcc +gajzo nwjg qxjra jztcnir ijvjwez avxb afz zyywqz kcszgh elmlkfh +lbz ozia bctf bumoji anhil rta xvit +ejybire ypjl qevak fzalx mlh qxlei zib +xmzas kwojjz ntrnrw nbmxlv mdgxs xjhxg suo zdcrxl qkujisz pxmu +eezyd unrtm wyu vhufvto rpb isfcy ygh hgy +nszvbzv ebtt memrsva ebtt qwcaq bhbas pvzfbov ppjbdy nszvbzv jabvrp +rlo zbmi lugvu yeby +tfcd tvl faaq mnural nyarh xnxk ctdf bodz +vwdrhc gub bgu fpcovx rcvwhd jukwsue +aekrhi lpknnrh bett tkib ioqrap igwnst aekrhi lhha +acg mknhazp pcgjuk tajplv +masq fyjkn agq qhxbbl qga npzj fme xtihic rntisg iqv aqg +ipagh fjth mswztpi iexd cocojy vhqrla joe wrsrmw +njztu tsh auqrxca zpp +jctn webxi haq irrr qox irrr webxi +reaw axmnvd voakf lnz ftbxfh zjyxzl pryfjpv sistgb pov mshs +gsy ctsngl ptmnyx vpjx zpvtori pfu ioycdrq +aobdtlj osdnrth sgqe geqs qegs +oamrlxk ygbb rkamoxl nztl sarbmtj yqupjt plu sbtarmj vpa rxea +yvhgp yznko epwpza gqrsod rilukp cglhomj wnaplu ugvdko qdr +cggztg ajw gggzct ubmiefj kpa +rel lvasbh kobm mdnzla pwnyj ehep gzx nhjdnsg rxa +qaz gook rplqwh vsht +dhe aneq ivrn awekad ckcbt zsqca ehd rvni oulwfuu +oxgzzow wntz tkqaoi oxgzzow lwkdpgy lhd aekjasp tkqaoi dnhaw +alxghco cpanoa onjh hyeyebe whxn zfu zozbll gojn +zdqulsa dlqsazu zqudals sfedw +rydtrsv rrtvysd fvyza drdgh lsfzt blnxr cnxe tslzf iijyds ylcxn +cczea nxx kwol kopaza wuvr cyvoo whlicv +zbmrwdq tlzbevx jwzpsc uvkwpd bmss rbzblj +jogx jgi gji hypmtkg ijg oscjv +flkoqja kwmrqv wzehel fvmcfap mkwqvr ivwxg jqfwdvo hweezl +vgjg nzucho nuohcz ggvj tmxci +fqaqx zeybhtg bxeic lftuqp wzuerz sww qfltxk +keiy myrvp blkxcg lncqmsu diittlg fqrf digrel cpwrk ipan dkxb bymlzo +owm irygdz pyhj mow wmo +noul pbvvt zcv ueqyjl zhetlw lpjfhli +felvwb wdykz kyibdz haq qkouj vuav oztyqh +dyxo njcr hcuk ysrr pucw qbajztc +ooyaz pmt hqwu gjx tmp tpm pwz +lyhzajz dfot avyifo kdwka pwypcep kyyw tirlku zdpjmft +aexle hfxo dacwvcy xsiotyg cifq ibupshj aktt rzvf pgafj +pxubhw ibpm jxtxg iwnssf osbpj +exmtfyx blbfg emrunru zkuhoi lfzn zrj unmcece phuppi +icomb rmy mvsqqkh zwjubz lumq wekx +cmdgs gsr pfhqx pfhqx cmdgs pga +rpyf jejc adaiou dutv imbenyu dqw zhebjhu pryf vtxs yprf +cxj roprjn rqoh qacagru snxd +rczvi hfpl luc yowgj nvavlhw vjudkmv dwu teq +klwc cktzh ksnvswl nsgeu xyohp mhs fxnjhm fwrcg rdeadkx cim +ounvb vzqje ujctzzk iyy vxck ebtvbqr uswsmcr jveqz qejzv jmi pboq +lwffygh mqsh vnnj ufz qhms gqfuxo lurzmu +buf psdluck gapwoo wgll sbfavbc lljfvzx cdgo rpt sfvabcb +svefr kubbri fervs nboi zkvq +jwr vtc zkcpzb kczbzp cdned pzbzkc wigjuak fszgweu odflfek +vwdqm khnnj plokjg vnce venc vecn yzxtgb +tawl yrhoz tawl yrhoz +vvehsl kdhzgme rix rcs btm pxnlsps vlhesv sxpnslp yqjtool +eqpyw kpmkcyw wqhglxg ajfzo hbd qvmhy nhokah iisqvad kxuyd fxek +jsz txhwhah hxt djnvl srylveu pxp dzmmn epek tzs +joyzql jqczueb rtdyw fyc fjirfyn tjcalz joyzql fyc +pjrmiz xwnmwns kcqjuut zfgxhdr octwn kqppg zhfgxrd wmwnnxs +ema yqxqs aljjo ajloj wozb +urgmhiz epqj vhhaxdm ptlsvig qzbmm cumbho lkg gyzmg eaopyzf ncfy mqe +ijvwvo oszkees ugvyk hjdj ftip itfp +ylfw qutzdj mgqp cyjss yzsdqqi iykvs fyor sthyqp mrjtzee hgo zwqbtgk +bkfkns gco bykzc mje dwmkrwt ljegqor yxjxp oaleuu +xeltq ggyqis aud frtyxhx iwz wiz fwoxz fozxw +zdu nwduqsa nced iphaaxo +bqjj oah ezd brhgxrc pmkz kdog exw +ihatt hck iepn egemprp wrz wzcuo xjzeaa wku ivjvihh +cwkuof bmj qmxd qbtms zgdei bsqmt ssndhw eeenku lcsqy bvvodr +tek zsgytci vgoun kwwu +jcxvp ijxc buqgix uil zfoku +ggndshq bmjeo yqaxtik blspz yofh edaroy +ipvtxh ouye elln dllvx iqza nhwf zyfw pvlky +iydcx gvarm gvarm wegmiy +sfjd liiflle mulboe qywzs tzbns trojl pad mnfcrhb sltb +gthqj jvpsof jwlfyeg jwhlfj +qckv umzrge gnzc mnr xde +gvgxmhv txnait taxint ius iboqdj +vsfex kbpvsby qembkb efxvs vhflzvm eaazg dyg bbmekq +wxpfk xwfpk xwkpf cjsyi +knzg eefq feqe seppop ttxz qnqfn atgsy cch mkjlbwt uyhct +quzw jbiw miqehe qvf jyipqh kzcjxyh +teuvzf tdtwoi pcuafa cwgjk ccur lgmqv jpjdkk efrnw uloqn dpkjkj lwloeph +yaffjy xntstsv gygq sxttvsn tvnstxs +cvbmdf pfrfkna wupv van iocb hsiyke obspj ytyfkl hbsqtij hkcw +oeddmnu koso mdodeun ybe mhjbmwy ubejz soko yxvuv +nylhy ylnyh olb vcdik +gsp ilba llnu jjk urbvuma qzypf bkceotg ezxq hyvjngf +tfnegyq rue waeif tfnegyq mvqm +wvgnsk cpd oib wrdfaz kohwgkc kzzig hogkwck gkizz +fecuuyp yfq bvanvxb cjeqwf unw dccr qzh zqu voakj +utoazh bjuq kmhcre izmny mirorsy twnl jyoc +fnnpd dmr ccgu eqgewc zuqivf +kkxiba qdabuen oikaz dnuywmm +aogud adugo uzcglpj lucv dgoua mdsqa mvrg +lymhv sof hvyml mlvhy nit +chu bwxp xpbw ghaix seklnc ola zofnrwt uch +wtt abob vblijtd oabb qjws +uozrpw kgf gxidxm uehdr fta pqakkrq atf fat woaolk +gaee voshd ghlyy emvzlkg cmcgk tuwlsj jwtsul znrta mjieqph glker +qiugxas gkg cbzmoz kahs obzzcm +puz omcokz gjc heuqb +dgndhb wid wdi scwnrjf juaisgo eivaw hgdndb +mgcrd hnqg pkpeb vprxcp +atlcnzp fyp cpkivxi bzj ypf cqpt bysu +pnd jiitmzs csw mxnpck vxutdrs ivipzy cws xiegsy qut +txlk avcvbuu hnq yyriq ajyswd urgiwc +qgiqut gvblizs giqnfrk tty mvoj wpikl giqnfrk bkdpndu xztmxn hsmqxf +llthg zjslki wilj rcyfois bavz hrqxn +ytbw hlkl vip skycogy ejiirhx +ndmtg bthlbw lsoq cvlvo sqol sqlo bppl sdkbls dtpyzrq vgm +psm xpj xjp lqi spm gqirw aglpj +htg fcchvyt xffev szdu lieadft +nbjo qohgzu vofg vvild dbtyi pdolxn plnoao jxze xlpbxj brajzg +urpp jjv lihmvp ivkwdqr sesyp ypbry qok sesyp ivkwdqr was +yinepzv qvnzdtf apv ucxo bdioo juga hjfsyl hmowo avc +dmiv tplae iiuiaxx tpale pyzkc +giwhst mpexd byfyc swuzkc +yydkwp xuu vjya kav ujmcxy qrtp zvlk +lsvdyn tkw qxu omvlc wwmfvov mrgcoov dhpu tfair hupd zbx njzgwtw +zuz rsxc xsrc gdwwf nycsv zzu kcu +unlvzv jerqqgm nozma ykbflj qihqkx +pctffo begf ivrvy ezru mvqt waocq +tubtuk gxkc ikgw bjrird kxjebbh sbjyc yafkd khqajmt aclpmf gqfo yrpf +rdt vrxa fyudo myeosb ursflwk +wbjras edlbwdp ctobtw jbvtvcd xjgoo cmunxm mjtbpi klovx bypmsab unc +xckml uztr htublq vilabvr jdiwus qejxur evfw qqm +tzqq tzqq wkb wkb +dgmg ljzc dgmg mbmco cgze qsap jccvot uors iiq +rwvac woylk dmn teorprx nyuvz hcwwxlj lvej drbjo asjgq +ljen tpfl vixcivr guaf lnje waim jlen +djgaa janhi adudm yzv zkcb xqw fgvrz +kpkjoon ggzx skp rqcsw xgzg zgxg jtf ghc +rtnyxo qixfd nphekk mouzk gny fpzquw qgywx rpr gqydze +gawdlv vrivoof rte iyp gaih sfzplm +csojx wzojode uzy qulr lylmb guvtkwv +ovxj aamms ftxo ebckdqw wqvsdci jwfqxks jafrcrn yyomrot +qnu jqwr ywudxk qpsez rdc kiyfz iiecf dthxjjb bown +typ zxcvjo rip acjhl paaab qhqipg xkguye sbxy pomkvn +ofvaegv hgak oafevgv hkemar rqkha grklnsp msvkkku rekahm bxmjnw +ahoihju sdyn phi uhz lupbx +lavt jef klmq oqyfpf kis nazul ymezxek xpla fxyrfnt +nwnagwy hvpjqfg sgm ungfstr gso owqqxjh +hey hye ipyrt qxmthg jth wpbr hxgmtq cvfkfux qykdzhk movcfnl vxyoc +zsras abnrj fgaczuk ssazr xzf cnxu gns wnqqy dwjh szars +uhb zanlvh lvdotkb xekl kcofo +lhx iccy ibkjw ciykxaj imsx ehamqlz iwzapxc rhaltv +pofit owmpqej vwrobh jvox gdqehss yyxd styu tfkm fiotp +ecz mdpoqsv mdpoqsv yxx rexok hcfll yvury hdhcfu juhkvpt rspnfj hxvgdir +ohed mtigaoe eodh agmiteo +vjvv hfco cppbxtw hawsjxz ovlsq qgs risgwhg auhj +togivgg czrtvw ccz wzvtrc bse lsk +ndc ndc lrfi iyleol nchx jxpv xdcsfmp nnx wtvq pih tgc +hzpf sur zhfp klfmhx lbuidp xiqimnf +qddpdk trfxpip pnsowj hidgvnf prur rsrautp aamykfm fysqjmq xwzjane mbmtxhf oqctt +lfd eops govslp ultbye vrqai hcjkcf snpape +cbok koumkad otpozb pqcs emilpe wpcyvxd bock +spjb xkkak anuvk ejoklh nyerw bsjp zxuq vcwitnd xxtjmjg zfgq xkpf +juo pmiyoh xxk myphio ogfyf dovlmwm moevao qqxidn diff --git a/2017/04/src/main.rs b/2017/04/src/main.rs new file mode 100644 index 0000000..610fa7b --- /dev/null +++ b/2017/04/src/main.rs @@ -0,0 +1,90 @@ +use std::io::{self, Read}; + + +fn has_duplicate_words(input: &str) -> bool { + let words = input.split_whitespace().collect::>(); + + let mut iter = words.iter(); + + while let Some(needle) = iter.next() { + if iter.clone().any(|haystack| haystack == needle) { + return true; + } + } + + false +} + +fn has_anagram_words(input: &str) -> bool { + let words = input.split_whitespace().collect::>(); + + let mut iter = words.iter(); + + while let Some(needle) = iter.next() { + let mut needle_chars = needle.chars().collect::>(); + + needle_chars.sort(); + + for haystack in iter.clone() { + let mut haystack_chars = haystack.chars().collect::>(); + + haystack_chars.sort(); + + if haystack_chars == needle_chars { + return true; + } + } + } + + false +} + + +fn main() { + let mut input = String::new(); + + io::stdin() + .read_to_string(&mut input) + .expect("failed to parse input"); + + let part_one = input + .lines() + .map(|line| line.trim()) + .filter(|line| !line.is_empty()) + .filter(|line| !has_duplicate_words(line)) + .count(); + + println!("part one: valid={}", part_one); + + let part_two = input + .lines() + .map(|line| line.trim()) + .filter(|line| !line.is_empty()) + .filter(|line| !has_duplicate_words(line)) + .filter(|line| !has_anagram_words(line)) + .count(); + + println!("part two: valid={}", part_two); +} + + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_duplicate_words() { + assert_eq!(has_duplicate_words("aa bb cc dd ee"), false); + assert_eq!(has_duplicate_words("aa bb cc dd aa"), true); + assert_eq!(has_duplicate_words("aa bb cc dd aaa"), false); + } + + #[test] + fn test_anagram_words() { + assert_eq!(has_anagram_words("abcde fghij"), false); + assert_eq!(has_anagram_words("abcde xyz ecdab"), true); + assert_eq!(has_anagram_words("a ab abc abd abf abj"), false); + assert_eq!(has_anagram_words("iiii oiii ooii oooi oooo"), false); + assert_eq!(has_anagram_words("oiii ioii iioi iiio"), true); + } +}