From 812fa7498c38e5465c523d1944b83a3d411941b4 Mon Sep 17 00:00:00 2001 From: Rhiannon Morris Date: Sun, 6 Dec 2020 10:13:36 +0100 Subject: [PATCH] day 6 --- aoc2020.ml | 3 +- bracket.ml | 7 +- bracket.mli | 6 +- data/day6 | 2226 +++++++++++++++++++++++++++++++++++++++++++++++++++ day6.ml | 89 ++ misc.ml | 17 +- misc.mli | 6 +- seq.ml | 2 +- seq.mli | 2 +- 9 files changed, 2344 insertions(+), 14 deletions(-) create mode 100644 data/day6 create mode 100644 day6.ml diff --git a/aoc2020.ml b/aoc2020.ml index 79a1553..b2b54b5 100644 --- a/aoc2020.ml +++ b/aoc2020.ml @@ -1,7 +1,8 @@ open Aoc2020 let days = - [|Day1.main; Day2.main; Day3.main; Day4.main; Day5.main|] + [|Day1.main; Day2.main; Day3.main; Day4.main; Day5.main; + Day6.main|] let _ = match Array.to_list Sys.argv with diff --git a/bracket.ml b/bracket.ml index 6dcca24..cc4440b 100644 --- a/bracket.ml +++ b/bracket.ml @@ -13,6 +13,9 @@ let infile_lines ~line:f ~of_seq name = let infile_iter_lines ~line ~iter = infile_lines ~of_seq:(Seq.iter iter) ~line -let infile_chunks ~chunk ~of_seq input = - let of_seq seq = Seq.line_chunks seq |> Seq.map chunk |> of_seq in +let infile_chunks' ~chunk ~of_seq input = + let of_seq seq = Seq.line_chunks' seq |> Seq.map chunk |> of_seq in infile_lines input ~line:Fun.id ~of_seq + +let infile_chunks ?(join=" ") ~chunk = + infile_chunks' ~chunk:(fun lst -> chunk (String.concat join lst)) diff --git a/bracket.mli b/bracket.mli index 40ae1c1..aa129b3 100644 --- a/bracket.mli +++ b/bracket.mli @@ -7,5 +7,9 @@ val infile_lines: line:(string -> 'a) -> of_seq:('a Seq.t -> 'b) -> string -> 'b val infile_iter_lines: line:(string -> 'a) -> iter:('a -> unit) -> string -> unit +val infile_chunks': + chunk:(string list -> 'a) -> of_seq:('a Seq.t -> 'b) -> string -> 'b + val infile_chunks: - chunk:(string -> 'a) -> of_seq:('a Seq.t -> 'b) -> string -> 'b + ?join:string -> chunk:(string -> 'a) -> of_seq:('a Seq.t -> 'b) -> + string -> 'b diff --git a/data/day6 b/data/day6 new file mode 100644 index 0000000..cb968a1 --- /dev/null +++ b/data/day6 @@ -0,0 +1,2226 @@ +sukewbthnjdyv +sjubpeyvx +ouehaytkgzbv +qfueimylvcrb + +foyedvcm +yfodemvc +cydvomef +fdvmocey +yvefocmd + +yizvxsnrhafmulctdp +zvpnhusixraejywfcmt +fxaiustovzhnkmrypc +btcfymhrnapuvxwdisz + +csiquwmeg +jwmceusgq +cwsuqgzea +tudevlosqcbwgxk +qewisgucr + +knbiqdemv +iknjmph +yxtzsrumonk +gkwmndqv + +lmtuq +lmt +jultm +wcltmegbk +otmql + +muw +neumw +rmuw +mwu + +kpqbneys +kqebynps +syqenpkb +qkneybps +bypkesnq + +wguysaop +suyphabtmocg +prygsowua + +zikctl +spqelxygof +jlm +zlim +hlvb + +ejnypwcmsutbdkqf +swfptbqucykmdn + +qgcmfhdspiywu +csuihkqpydf +icqasudphfy + +rcegxphy +xpghcyer + +idljrsopehmn +xkzguawebtvqf + +lohunty +thonuyl +olhunty + +v +lvgze +v + +z +j +s +oae + +mngbsztec +zmxsgtyoeri +gseztm +ueltqmfzgs +etsmnzfgc + +zqmbvy +yq +oyq + +cyhaeltuxkwfzgo +wdoqfjltnipsvkcxhyze +ytzkrlwohfcex +yhzetxbcflokw + +vtxjhymsfcw +swtmghqzfv +vwtmslhf +ftzhpdrknwmovas +mvwfbhtus + +povrg +gvr +rxgv + +npymvdcjhkz +cygihpjndmkzv + +pz +zxpu +pahz +oypjdzn +cmpz + +vup +vud +vu +uv +vu + +jzqwy +qcrsjubnd +jnysqduf +qtphglmaejiov + +fsyhkgw +guypskhw + +obdj +ibv + +lrt +kzafv + +ozax +l +l +l +w + +lzbdyveqpj +ekrocfbags + +hidv +hixduv +uvdifh +ndivzh +gdhcvtime + +mdyrbfujolche +qvldabjmuc + +o +i +e + +cwjoesuyvbmfx +yzafdkcevjglshobmx +ofscpvjrinxeytbmq +mvxcfuesywjbgo + +jolexqn +ejpbn +jzespnb + +rklhfdmpvixqzebsjatwyg +sqfjzhgxketiplamvrdyb + +tkrxoqu +lruqo +arpuzoql +rluqo +olraduq + +s +s +s + +upyzxrmgenk +iumrzpncxey +pzicymnerux + +skxy +xzkmy +rtaepyck +zkmyg + +kuymqh +xyqmuz +qmykue +oyfbqum + +t +u +cqs +il +jhl + +szrhdwe +olr +gr +fypmtur +hnglzr + +quv +unpr +fru +ru + +tdkybancpfmvhez +igbouylstjxwr + +vckofs +kvspnfcbyg +vskfcer +kcsvfj + +bevcrslyfopmzkjng +dsvoeflrzj +rfjesolizv +xqroevzjsfl + +k +eb +o +m +x + +gxulbvfnj +nvfxugj + +liqcxnv +vxlfqn + +o +o +o +o + +ynsowejdq +fuzrxmls + +necsvqwyxfzbur +fomigbkasyunhvpt + +k +kv +k + +jlnscagkozwm +ctgmlznwkas +ewgjcfmsnzlka +scluzgwkxabnrm + +rmfviobzuekan +gztioywe + +ihxumnvtajswgbl +bvsitkamwjhgxul +agvhjwusbxlitmzo +yhdxewivbsgrcqupajmt + +azrmjwki +mikzjrwa + +podwmavyujf +jvtawfoyudkp +apyovdijfuw + +nqyvc +cnvy +yvnc +nvqyc +aycnwfv + +go +nv +zs +rbmda + +laixtnkeqvjr +tfagkclver + +w +wz + +ismtrejyqhzncko +zctksyemvhqin +ztiqaynludkscxhm + +lqtowzfpau +pleajiht +snb + +xmilskwayjtdgcuzfpbr +akmpqrbotzgswcjuy +jytkoezhmrpbcuswag +qzabcgksjeyutpwrm + +bzv +byz +kszb + +repd +nqplacx +pert + +qjax +sqzikvtuc + +jbvflcxmkgeuiqshwdon +ehojsklfxngmvcidwubq +efmilsjwgqunxvochdkb + +asbcpe +pecsabv +sabucpe +cbspea + +puazdrxn +huodn +ul +bhxtalj +ewqgkcfmyiv + +mkzlap +gkuejz +vckdwty + +bgwuqlcpye +ruyplegbc +ebgslpyuc + +rzxjahqkdm +qsvzl +fqzl +yqzs +qgivz + +oz +z +rgz + +qeodmnwfrcgszxljpbtiva +bxfmsotjiwahdreyqcgznlv +rfgoacmsvtdlxiznbwqje +isnrctlvbdjeogxqmfywza + +k +ok +ndk +k +k + +kvlaxjyuizosc +rskivnuzdgylcax +yeulqahszikvxw + +njcgolfwi +nbvgpfwjaoislt +ngifljcoyw + +kmhe +jtkg + +rwxcsfokl +owikfaxpc +njoxkwcf +ackfwox + +ur +ur +ru + +fdywlphcigkqo +thuynwzra + +yg +yg +yg +yg +yg + +lgujzisehrmfvpqdtwx +kpxwbjsrycvmedotuna + +caoqxmnz +znmoqax + +n +n +n + +dl +z +z +z + +myxjup +xapmujy +pymjxu + +armiuvky +rukyvmai + +oblmhucy +lor +oadzwlv + +gmuhklsdpeifwjzyx +ujhimzlwxpkdfcgye +hdzjyexbmfukgplwi +hjfiugmzlpwnyekxd +uwpozylxmhkgjdfie + +egvotzkidfbschnwj +cuojhenkdtgivfzwp + +sydwoxjtrgeilkpq +wlisqzgxyjdepo +yjisgwoldqpxe + +ziu +vbcli +dhti +gik +iu + +wsaqb +fdhmkv +oqzeligb +yxagtq + +hgxnkmtczelbiywdu +egdlkbhxinzwmtyuc + +zylwnjbpxfikgma +uyiwbalxjfpnzkmg + +fdk +zudwmolx +iuwydo + +ipg +gpk +pg +lgp + +qo +oq + +ftvpzxbnrcaejlsughokm +pajgbomszrvlkthufncxe +rcvkltzomsanehubpgfjx +slpnugxkvbtofcjzaremh +mevnxbcwlofphgjzustark + +imqpfwxzdbyej +befpdqiwymzjx +jbweqdizmxfpy +mdifjqpxwebzy +fqpwyzejxmbdi + +xcgqsnhjfewkitrdbl +ikexjmzqghfuwb + +xvlt +plxizgt +canruewkof +hdv +ph + +selthipryzdjaqo +mwvgfsczjx + +lkvhrmfxcei +dlxeikvrhmc +bcivhjuletrx + +hameyvutcq +ceimstquyha +tcvmheuaqy +qtycuimhae +wtexqymuahc + +aqi +ahqi +iqa +aqli + +dqsyvxihlnapkugfet +avhylqkigpntuf +uyogpqtznfjablvkihw + +ujteibs +jnmse + +lcark +kcalr +raklc +clkar + +pdriy +dypir +rpiyd +iyrdp +iurdpy + +xqfiongludk +mgthdfqcjislw +gfrodulibnq +eqiofgld +dialxyfqg + +nuglmj +yglmejodvu +pguymjl +ojmuzglb +twqumlhjkirgxc + +zvcfwmxr +mtwlcnvyr +vmwrtc + +fnegrtvcszb +fvtczsbrglen +regtnblzvc +qvetwrbjngzc +rztnsvbcge + +c +c +ic + +ytafbngdrwkmsizu +mtbarufinsgdwz +buzgnmfirsatwd +gmfdwaivrupstnzb + +wmiugpfxvaqy +mysauioxwqp +wxmupiyqa +iualopmhywxq +uqxpiwyaml + +rfoazmhstpwu +ylhdagctoszuv +tnouzbsixja +ethsavmwoquz + +rusvk +sukrv +lsurvk +ivarksuj + +vtonlxkefpmhc +toxnmplkvehfc +lxepkfohnctmv +lcfpwvkomnxeht + +k +uk + +masqlgwvbzthjfodi +qidwstlzhmgbvjfa +walfgtjbimhsdvzq +jgvqfidzwhtlbmas +jfbdtsqvwhzimgla + +ycghqoakjvledit +cvogqadtylxheikj +dlikveqjytgocah +qjogltyvkdiehca +hqctvekdgoaiylj + +qmfszexayhrodlkjgcunvpb +azkcfvgbqhwntisemxojlurpyd +mahdrunjvogfszeklqxcbyp + +afneqblchsiztjkormgwyv +xtnekyjawmcgboqzhlvpr + +sx +jdbx +lx +xh +xa + +rdjilzeufkawpynthm +uihatklnjrwyzbefpd + +xamycgrp +odcxabirgyp +yrxgnpca +rpcyhxiag +carjykfgxp + +qfzjcxvngr +vxjrngcfzq +fgvnzxcqrj + +pndiwz +ziwnpqd +hnckpziuw +iwpnza + +oqg +n +e + +xiqkbmeunpgz +qkunzpgexmbi +buzpqknhsegmxi +gnqzekimpbxu + +hw +hwqy + +nikreb +beirkn +rekinb +ikenrb +briekn + +ygu +yug +uyg +guy +yug + +qa +aq +paqt +qlaei +qmuona + +eikhtowu +ucqt +dblxyj + +h +h +h + +efachl +lxwseg +kdvcotebwl +urmzieqypnj + +xim +mix + +yueg +rfuqv +hcuyt +mwdxoijl +pu + +dt +d +d +dg +d + +njpbavcqi +apbvnci +xitcnkavbp +jvpbanic + +ihafgmuzlsecyw +wilkugsacehmfy +hmsogafiycewl +yasifqwghmpcel +sewfmlgaichy + +bwzqplsndam +npablswzmdqr +mznawdpqlsb +pmqnwblasdz + +bstnjrdih +mzqg +auvxom +xfl +xwzeapqcyk + +biylorc +jehr + +klsmr +bsrulm +sulrm +lmcysr + +ryhfwom +ylfprowhgs +whdayfro +rbfhwxqyo +ofhrwy + +bjsotye +btykhedw + +ytfvapsh +wgrvpyahkf +fyhvpa +vyhstpfa + +a +ak +am + +z +z +z + +kvzfwneupotmcgldhjrx +mdkwnevctjxlouqrzhfp + +ipwgoe +poegniwd + +mptxh +umj +yegdkrizcvb + +bea +e +e +ey +es + +acbzkvrhujltyqf +htvcaqgkfiulbypezrj +aqkfzthjbyuvrlc +yaqtzlkhcuvjbrf + +ilgschjkmxuy +qtiywjlcx +lfcjyqxoiv + +e +e +e +e + +vtaiyrfpj +jtpmvfyra +pfrytvja + +kmlxghip +mhldpg +mghplq +mhpgl + +glv +sugfl +klgdib +glw + +xteusvw +euxtvsw +wvbxteus +wmsxtuphveq + +cdzjibqkytax +jkbzxdiyqnct + +zankicousdgtl +ustgdaniczokl +okulsgtdaincz +ktsocladiuzng + +inau +naui +iuzmpan +uina +ianu + +plbuxck +clfpxkbu + +ryxu +yru +dcrjyiu +ryu +uyr + +vgwrjpsxhqn +fdqpn +pfqn +pnuqt + +wahxceymdtj +ycdmjaxwhet +emdtaychxjw +dewhymjtcxna + +gbua +nkw + +fz +z +pz +bz +zf + +jlfeonbgdutm +nebtofdjmlgu +ldugbeynfotmj +fmlutjobegnd + +pdkzowbuflqgt +twbolqufpdzg + +cyeuvjtbinholfx +cjhostyevfnlbmi + +x +bx +x +xa +x + +rudlgmtnkc +oqbxv +o + +vyasowhlpgdufrqbenxt +batgwhlsqufvopenryxd +xtyrenhpvafgbsqwdlou +fhxanltgworqbspdueyv +twpyqnuvgerxbhldafos + +mvcb +vcm +vcm +cvm +mvc + +ycaplgozxd +daoxlgczpy + +b +b +b +x + +fz +f +krjeaxmf +f +fz + +vcbm +vwsgef +evln +yqiuhtkzrj + +ng +ng +nlj + +acoplfbrxjgwutq +jrwocqlfatxubp + +oszjfuv +dslu +pxdus + +zubdqopa +dbuapjnqo +buiadoph +ojawubpd +sofpmrudab + +ct +ctyx +gtc +ct +tc + +j +j + +hdqgvk +vqkdgh +qvgdhk + +fmgpbxdwyiqj +bqywxfgjimpd + +dxmuvetajoysibhqg +nxedgmqvipytbsurjo + +eubkmnpz +hxmvufkibnz +kbudmowsz +inrzbmuxk + +hqje +ejhq +heqj +ejqh + +y +y +yc +y + +nmsgowetayil +hpvbdqnckxj + +zyj +zdyjk +yzj +jypz + +qgpu +qg + +fu +xs +omw + +w +agd +dx +tezoc + +erqkcxt +sdpmvilozyan +quc +gxbhqr + +tdeqmjigaywlvsrn +imsctqvnrdwjlgyea +vunkwyhibsrgmxaqtldzej + +qxpnhkyz +hnypxzqk +qphzxynk +pzyqxnkh +ynzpxqkh + +bue +bue +ufbmeq + +neg +e +ksxo + +fgdkuwm +grkfu + +c +c +c + +djqksy +syqjd + +uqvztgcy +tuzvcb +jztuvce +ctuevz +zuovtc + +phlbum +bhupml +uhblpm +aplhbmute + +gbiwk +gawxiek +gkiw +glkbiw +giwkl + +xepwdgfrytajinhoq +rsaotezjgucnlimk + +oficy +yca +ycd +cyg +yc + +lub +cblu +lruxnb + +nbwcmqa +xbnqwcam +nmbawqc +wnacfqmb + +cvounwyxtmrfdhjbsla +tvdmxjhqucaowbfsnlr + +uhcdfzsgxwtejkqo +hxzcquksfgeodwtj +osezufdhwqjxtcgk +tcewzdjoqghxuskf +qgzhsujdxwoeftkc + +xvhboqlgrypjf +hftqjpxguyolvb +jxvqgyfacopzbl + +hqosbywltnagkzpudirjcmefx +hnmuldwyxcpfsbrzkgejov + +ghtvjnuwldzx +vsuzahjwmnd +pzwvuctijlndh +qwznuybvjheofkd +wdusnjrzhvt + +zuphrg +puhzrg +purhzg +puhgzr + +injtqw +niqtj +tjpncqrzl +stqjn +tgjnwq + +ogrqaclmytjspwuefz +owpcyrqgatmfueszlj +qeprtazojwlghumfcsy +syfclprwjzauogqtme +mltuasgyqjeopzwcfr + +vwczioq +wnlh +wn +hfnw + +xpamkfbv +gytnslei +zhcswj +eznydrt + +gwnxykecs +sxenkycw +yknecwsx + +arsyvxtn +fpkejwcuog +lxzsdhirmqbn + +deoi +byeanvt +idple + +gtjhvn +ukny +ltnm +qofsadewxcb + +jsfxod +bcqyxzd +xdpomwnt + +wxdypceabjtigruhmszv +abyxhgtevjpmwrczuids +czvgbhrtjxsaiydwpmeu +aybegztxsihrcjpvwumd +ztdeimhryjxwcsbapvug + +awk +wa +vwa +aw + +kh +gk + +orhs +ohqrs +srho + +cdseliqzmxr +putwvjigze +ikzvanwe +pgazjie + +lj +jl +ljc +jlr + +fcjtuhaokiex +eoxhfqukzitcjanw +xjoutkphcfdgsial + +diqvuj +vdquji +xudsiqjv +dvqjui +uvdijq + +sgyjcewoqmtknir +njcueswamtrgkqoi +srinwekoyqtcmgj +qwxbrjkehgfvcntopszimd + +ihudyzfgvplqjawrtemcsxkbo +wmfdbjzxtkiruvyqscphelago +qspaetibkfdzuhmlxjwryovcg +pfgykiqajmoezudwhlrcbvtsx +qbweptkonashfgrjxuzcdlmivy + +tqpnysgxbrczi +ewungkavbzoqix + +dnatolubrm +gykvdnqblero +rbndolsm +zlbdrosnf +arhlbnfuod + +bof +obf +obf + +sfowhkxidyu +dsyxfhik +khxdgsfyi + +troasbmedwuc +bakeputwdfmycos +bmvwlngheqsctazujodx +odbafecmtwsu + +svugapj +hupsjv +uspvj +vuspj +ysduvhjp + +epvkocuynsdgxabw +askfqcwevpudxlngby +jwxcvbyghdsauekpn + +uxomkrnqbda +bkdaxqnuomr +mnqxkdubrosa +qmrblxndkauo +daqbknurmyjox + +fdmys +ydmsf +fydsm +sdmfy +sfmdy + +kwyios +yksiov +okqnlashy +ogyks +vkfmosy + +bwsa +wbphsua +nubotsaw +ajscmwbf + +nhxec +ubdkivs + +eatgmjflvkbpqyroszuidchnx +vndrhqzbcfkxouemjgltys +dbhtvucnwfmylozsejkxqrg + +sizuofhdl +chdztjpym +xhzoebd +abhvzsd + +wepdrksjizqxa +jdegpilxkrzaswq +kvpybqrxdszjiuamwe +sqzdijkrxpeaw +sijqpzxkaewdgr + +bhip +bhk + +ynfhorsbquxicw +ufgrcnsixybhqow + +ivopdlxhzysjqncw +pukfrqxish + +gwfmuntbicp +dwgsmfntbxzuq +teumifngbw +ghtnbuwykmf + +ayrwtqmpvhjnfbo +fybqnxjrswakto +obglufdeitqrncza + +wynjtzfvdpiahxlrubksgqm +pxqgkjtbdhvyusnlzmwafri +yjlnqcrzsbtumvkfiahxwpdg + +bcfmw +waezsm +siwgz +ovtrnduhqwl +wciex + +dsiekwvym +dswemtyvaik +vsmkewiryd +dyewiksvm +mydelvwaski + +jinutyhcm +dvymgtpbxj + +ekyambt +etabrngkcy +hoayktbe + +vypd +xgfhle + +idkwmoephjnlvfa +ecofuiknpalt +euacykbifporln + +ogyxzvnr +gozynv +nvozyag +vnozgy +zyeovgnq + +tgplxrfdnuzqme +ugktcxpmrlbdf +xlvmyfbcdghprtu + +pbgueijkfax +aufjegikx + +l +ly +l +l + +awmdfvtrlybucg +vtfwubmrcgld +cldmjtpurkwgvzbf + +l +l +lk + +qkpouawef +cqfgkbameixo +ouaktqzwfje + +camibs +tcyd +ndgxc +pcwlt + +pfbnrxzywviot +ypgrmixowasufznvj + +lzbyhnwsgdrxomai +omlyzanbhvgiwdrs +lborwhziangsydm + +bconaghpkfzvmy +qhyxogapvkfmcn +kcgfuhympnvaorw +sthkfoncjliapydvmg +kqvnoempghucyfa + +zixq +qzxi +xqiz +lqimxgz +xqiz + +w +jstq +xkphoue +fzjv +sgwt + +ocl +bctnamsyhdfr +ce +c +jclip + +aywt +pt + +on +nho +on + +wyikztj +zecdrxan +psmubwzvj +fzhmkq + +bwtuvk +uvbtkc +uvkpto +mtqykvsjrgiu +twovku + +m +m +g +s + +pdmuxeftk +szvgeotcrwbuq + +ibvgkput +iugpkvtzjbx + +skzuqtbiaedovwhlrpfnygxj +yqfidorlkwhgsuptzemvx +boelkavqwrtxhzgifypuds + +o +o +xo +o + +bkpjouw +cjoklhbw +ehukwbo +bkfxynqrgo +iokjabw + +kceugzapxfmisljnwhtrbd +gfzhwrbkdcliuejsamntxp +msdkgplhfrjucetnwaxzib +ktsrinlcaedfhzgbjuxmwp +bwguhamrtfkeplicsxnjdz + +lz +l +z +u + +mwsuaicld +saiwmludc +sciamwdlu +sdawuclim + +zvb +zpv +vmdqr + +djr +isjdr + +ybek +rkl +fgoknah +kmij +qktyx + +oulpwbgy +oalwgujy +ehflnwckxgosrdizum +wvloug + +vcuxtb +vcux +vuxc +cixvu + +tyczpjsn +szpnjtcy +zpsjytcn + +hurjk +krhuj +khjr +vrhkj + +befydcomjzpi +vpejdyb +darbfeylcpjg +tnyuekwqbjdh +oexdbsyj + +d +d +eiyd +d +d + +anhoyr +hn +hrna +hkxpnifbc + +yapmothqvzxkwbgufe +ojwbmysdi +bdrmycwosl +wnmyob + +qkjznrdpsfbocmuaeihwlv +jbsumpqahtlwdczfrkv +jlpcqbhfduzwkyrsvtma +jxdqhacvzpwsgkbfurltm + +cr +jxsqu +wc + +qzsgdceyfuwlkjrmio +idlcywerqojzkmgfsu +tsokrqumcawlefyzgij +kulosgvhzqrjfiywcxme + +tfpqmobildwx +cnawmups + +yuilzhtrpvkq +tvucoih +bjgafmenxdsth + +opzulrejdgqhwftvbn +yozgtenplwrvjbfdu +urobdigfwlnpvjezt + +jeatvniymqcogupsxfwd +qedsypugotcjvawfmixn +dpqyseiajuwxmvofntc +pxamvsucfwoyqjhitedn +xsuypaovrlqjewizfcndtm + +vugbznlqkixady +dvoejyxcfzbrmas + +mwsklah +ahksmwl +bmwkhisla +ahlwsxmk + +srfqb +sqbrf +qrbfs +sfqrb + +xhvbocnpwgaqylirsuft +onrypglqxfibhvwudska +opxvsfniwblrqjhaguy +reixqwnglhfyvbaspou + +linazro +np +n +nm +mwn + +gvbxwtsalpurfcm +bwgacrmvxupsfl +abfwpumxcrgvsl +aluvmgfrbscxpw +mlpcbxawsfrvug + +v +v +v +v +v + +nwdzilkeqogcjxybaru +mcygaopwdrizkuxjlbnqe + +zocngjfxebvrwlsydqp +oqvfclunwxsbrzpgjdy + +jvrglxbp +brlpvyjx +rxlpbvyj + +voiuyjcdtgsnh +cwtugdovkhin +bhnatyoxgvmcdiu + +ikfl +li + +wt +wztjqy +wt +tdwsau +wt + +owkszmhcqdeb +rpyaswvxclf + +aqxneirmc +mnqaiexrc +qxcaemnir +eqxmniarc +nzeaxqimrc + +obefhjkmsyl +fgcdqwvzypur + +jv +jv +vj +vj +jv + +vesgfhmrox +exmfgsrvh +nfyirshgjvmex + +hyabitjszvupmfor +ierfutjmhbs +hjxinstkfcqb + +giqrzmfsuxcehvldkabw +iqfsgzbxlvawhmudcrek + +top +yjqvk +vqx + +qpdiksm +dkmiqs +msdkiq + +olwkfxdpehmj +kdfpeomljhwx +jplxoewmfdhk +jpkeowhtlfxdm +qzkojefdhxpwmlu + +sxjwrpgqeciz +vnkcujwhidral +mejsrxizocbtwy + +qojeghzvlkn +kqonvcjeghzl +vokgqlzenjh +vozhjlnqkeg +kljohvqgenz + +dpwyhufkvaiqob +dpuanijkbqgy +alkpqbsrtide + +wcju +wuqgs +ampdbnzwufok +wulcyq + +izojdpfgke +zpeokgdijf +epfgkiodzj +gdefojzpik + +wjqpblyt +ajbqpwflvty +jpqywblt +bqlwjyztp + +brej +jre +herj +jre + +myibr +rbimly + +gmwbanlupcxjkrtsfqieovz +ieuamrzqvsxctbnojgkfpw +cvstxzkmgnqiaujfporwbe + +si +is +usi + +hsuqefpd +qrupshdg +dsuhpeq +quhpesd +qpduhls + +djewcplsmbnykqfuhv +bkgucwsvymaei +ykvzmscurwbe + +ifpavbtrzjlyesqdgkhxu +qzyalxeunimdojgbf +awyuezqifbgjxldm +jmeydfgiblxuzqa +wjnuxzdeagblfiqy + +e +b + +lwx +w +whi + +xqomviapj +myqcvo + +vaidsjrbgouhw +ynufzsqepdtx + +ier +eir +ire +eir + +q +q +q +kq +gq + +gdlnrpjwbkmcy +pledjybncmw +nwdbpcmljy +cyzofudwptlbnxjm +qmybdpchjlnw + +guxvnk +bvgztknx +gvsjpxrknfe + +tkc +tck +ckt +tck +ctk + +tcvihysmdwjfuz +hdjpkcyuetafxm +jvmhcyuftd + +etvflsguxwqparh +pqshwvikgutlraex +ghrxultaqpsewv +stmlauvhrxqgepw +lthnsavupxqwedrg + +q +q +o +q +q + +p +l +fd +n +p + +kejbzgqhrwpsdmyluctaifx +jbqyaksrwgpxezcthidlfum +fithrjwagodsqzlycmxbkepu + +bjlktgunzed +ezdtujbgkl +oljkzbdxetgu +jlgastdeubkz +ljdzgtbuke + +b +b +b + +zcmqedjshfngwuta +yczngvjfdkmuotaerhw +quhjzdniftleagwcm + +uxokfse +byseztxkcdpo +xqresokl +xskogven + +cpbfntrsqzdauvwmighokjl +jnlzpgamuksvhdftorcqb +dmktlpofhbczayusrgnjqv + +rywemn +ney + +tnfmkwbr + +ieyok +knyeo +oeyk +cmkoey + +fgeodaihyqrj +aiyzfkdqhgj +aqfzgydjih +zjhgfiqyad +fhjdmaigyzq + +jfsthv +fzkshvet +hsvft + +chjmnapvdlqi +lqvpcidjham +lhdctpiqujavm +mavpbcjhildq +mjpvalqdhic + +rxvozyjuc +cvzxyour +zyuvxocr +zjcxvuoyr +rcyvozuxe + +mkf +sfmk +fmk +pmkef +kmf + +myoakncviphrld +vpkiycnradohmx + +yvdlnm +tg +uhdo +jwfqs +lozgrx + +flwcpvgm +lvpfmcsagw +vgwflpcmu +glvswmacpf + +ujnaeld +nclsuje +nmejlu +deunjal +lequnj + +qveitg +eiv +vuei +erlvi +efvaipc + +b +b + +blkdegxiuwpozmh +mbielokudhzgwpx +dewlugkxpmzobih +edimgxuhlowpbkz +odekxuwzmhbiplg + +agktcxds +cstxadgk +nxpdkcshuitrga +dbtgskamcxvf +akgdftcsx + +ap +pa +ape +pa +pktag + +cnxazmsefgqupvdjl +ygwfsodp + +cobevtqrmpsfi +esivcqbrtmopf +mrscpvtieboqf + +nezfcvyqolapxdtgjh +tjdcbnhpzwqe +tzqcjnpehdr +crnepdtzhqj +jtcrbzhnpmeqkd + +uzcvrtfk +utzrfvcbk +vcktufrz +ercpvzukft +cvzuorfkt + +fhdvlupmyinrkg +ykiapgmdluhvn +vklipdybnuhgm + +gndywvfsrkmojb +otdfbrynkwsvgj +sdyjgobrfvtkwn +yfrobjxgdnskwv + +jrcxmdlb +clbrijx + +eabkotfyqicsrgluhv +pxqzmaitgdjnhw + +mpydoxr +odmpxwyr +mrydpwazxo +dyxzmrop +drtpymxno + +irfveyz +riyfzev + +envoajbhsp +ayswzvnlxtjeoh +jvwholeinqsfa + +gh +mgh +hgmj +gwbh + +ymdjralcitnkwgsx +xnilbdojkyfrmchtgas +ukcatelqsxyrdpjvmigz + +xvbwsf +rsbxvwf +bvfswxaj +swbvfx + +hx +e + +jepqlufigz +pxejfqgiul +fxipqejlgu +eljguiqpf + +fvco +cotfvqxm + +kxpweshd +wkxsdcpheyq + +ncfrt +tnfc +tfcnd +cfjtn + +sgpcajvwz +enulydokbixmh + +ft +bjtmsf +tf +tf +tf + +pgfuetm +tmfeupg +pmetfvug + +bts +bstz + +rdfxyb +xbqpy +bex +rqxb + +vj +vj + +tfue +gujxt +fsnout +tufnl + +jhpnewz +rnqzwhl +vhyznwkigt + +kcizgojlrnyhbetfmd +drlcjtybkhmefionzg +erihblomzdgkntcjfy +nfmlrigzbejykdhtoc + +hbkfsjmpncuytgqd +cewstfdnjgypmhqbu + +lnyupsfxzkdebhgwoamriqctv +sqzptvgfcnworhuxiymbalde +yflwhamutxobsdqncgpvezir +qrysnohtbdzljwfvpgcmuxiea + +rkaqlw +crkwuobal +alwkr + +yehogdimsf +levrtiphjcgdf +wkeihgdsf +fzqdesxngkhmia + +ovdmtba +oamvur + +sfrwvczuopkjtldqyexngbmhia +cayogtsqwbrimehvjflxknuzdp + +ghlawfdteobicxqu +wacqbthguzfexoi +couhigamqjpvfwtbsekx + +pznud +nklpxd + +cpolfguxeaimjkq +oaliefuxmkgwjqc +ckiemqxagflowju +yioqzuhcmafekjxrlg +fogqkmileapxjubc + +odrtypjgnhuifmxv +mfxpjnzhoitwygruk + +atmfbz +tcma + +rfpesujl +duxmejc +jzxynvogtbdequ + +on +on + +fwbvnmyh +inmhfybvw +bywmvhnf +vfynwhmb + +kweqzphagnbd +ftphezwngmv +ugyncshezip + +zfxsrhdqjoyb +jszhfrqybdxo +brdxysfzoqjh +rjfzxshyboqd +rfxyzhdoqjbks + +mloyxu +vfieh + +flswu +bfozhsrw +fsw +kwfds + +qcmapueyrvzki +xnthjgdwf + +avn +anv +cavon + +lvdhrz +lvhzrd +vhrdzl + +kthsozafpm +nxaverjibgocl +wmyuado + +mxwybevtsdkzrq +rbsqweynkxzdmv +vdyzbmqxejwrsk + +qw +bwj +vcew +lw +w + +djvk +jdkvu +kjd +rdkcezj + +jvydnmoiszp +bglirhwa + +icuzoqfdwbjlyhegapvsxt +lypjieabuotxgcdhqszfwv +hwyijspgabutldxvoczqfe +bswhptyvefclugjodizxqa +edihqsjtcxwpyzblfgvoua + +o +gq +o + +sb +axro +sw + +nmkyft +fgktypjs +ftvky +fyztk +tkfy + +dgkxmyeficrhualpnvs +kefsldzyphnumvaigx +vsxqoflupgmaidyenkh +yluvxqpgndkaimfhse + +yhwckdbfujtpminaq +qfjhgpukmcobwid +fchqsrjxpvlzkimb + +wlhantpvmydbzjk +nahtdkzjmywpv +jevahszfprdkmwytn + +sfqcrtv +frt +frt +tprf +tfrh + +hvobcgqfdutm +gamtpkcbqwvuhn +uvbcqxhtgm +tdmhgvbcuq +fqmuchtvgdb + +jxoc +jxoc +jxco + +uzybvip +dotieypbwu +ikbspyugx + +eqhwdmtlizyvuksjbc +keutmlrqxnbod +rdqnmlbuket +bdklqrfetmu + +byvhscwt +cvwb +vbwc +cbwv +vcwb + +qb +ri +o +v +b + +csfjmh +hpqsfjz +hsfmj +jfhse +jshf + +ubjpnxcoltzhrsmkiwva +primkxnzljbtohcasuwv +xrtmockuvzalwbjshpni +bunwycjzgikhotsrvmapxl +cvxsnpkairjhobtlwzmu + +wamkifotyqxhdcezjbln +afihocljxnkwqdmtzyeb + +ysnukcpaxbw +kpqbcwtumxysn +lbpknsxwcuy +fbnupywdcksxgvj +bsqytkxnuocpwe + +lhpsuvgcmeqzj +gjzphexlcvms +hmljrocgwivtzkpase +vcjlzuqdgpfhems +evclzhbmpuxgysj + +zrawojsquknbihmepgxyv +qefaowrgumldkbx +qgekuxmcaflrbow + +xlza +xzajl +aryzlx +xaclzj +axzl + +cv +cv +cv +vc +cv + +brohlqgmzwiyvjkef +nolmufhkwygjcevb + +mjayudk +ci +wcnsxo +fc + +alvcxywzhperjqmdkn +lwmesakjxcpdznvryhq +kzdcprxevjhyamwlnq + +exr +er + +nexlqvsawjbkfrhutcygzpdom +qmbfjkgsvtiydelruaphzxwco +zqjkumlhstafpvbxdweogrcyi + +l +l +l + +eoqxjms +okqmefsxdhb + +b +b +b +b + +mwfadliuhgskrejn +berhwinfljmdausgk +xzfjimunsltraqcwehg + +otf +vhuap +lkn +d + +eabxzpfjuytwrg +xreqgynzpiufbjatwl +pbzuajwgcrtmyxfe + +dvwcr +rdwvc + +qio +qoi +ioq +oqi + +jbyi +ojirb +jiba +bjig +ijb + +dprgjzib +jprqg +xajpewhrg + +ehgvwcxydpal +pdcnuawygebx + +mapdoqswbzenick +cgqyxmwsvaeihpjzofb + +xqphsmjwblofntv +mtejqivalgun + +xngvtoihcur +oipgvtxcunrh + +dihof +ifh +fhiw +hfiw +hif + +ctrq +txziwjcvl +oanymhtd +krexztpgus +tvsi + +cqkvfn +fvnkc +npofwkxrcd +ucfnk + +lnb +bn +bn +nb + +pukncdrbeyvwsaqjohxgfltm +qjepzvgwaxybrultfcsmkon + +nlczsygmdabuorweqjhxfitv +nmuvojghteyaxibwldsqrzfc +mihetjnswbyzdvufcogxaqrl +iulxgqfoctnjhvrawbzemsdy +exugdvclmqfzsojiwnbarhty diff --git a/day6.ml b/day6.ml new file mode 100644 index 0000000..ba17e07 --- /dev/null +++ b/day6.ml @@ -0,0 +1,89 @@ +module CharSet = Set_ext.Make(Char) + +let to_set str = String.to_seq str |> CharSet.of_seq + +let count_distinct str = to_set str |> CharSet.cardinal + +let main1 input = + Bracket.infile_chunks input ~join:"" ~chunk:count_distinct ~of_seq:List.of_seq + |> Misc.print_sum ~format:true + +let count_intersect strs = + match List.map to_set strs with + | [] -> failwith "empty list" + | s::ss -> List.fold_left CharSet.inter s ss |> CharSet.cardinal + +let main2 input = + Bracket.infile_chunks' input ~chunk:count_intersect ~of_seq:List.of_seq + |> Misc.print_sum ~format:true + +let main = Misc.main 6 [|main1; main2|] + +let%expect_test "main1" = + main1 "../../data/day6"; + [%expect{| + 26 + 8 + 24 + 21 + 22 + 13 + 6 + 8 + 14 + 20 + 16 + 15 + 8 + 24 + 7 + 5 + 6 + + 18 + 7 + 25 + 24 + 6 + 13 + 13 + 4 + 24 + 9 + 6 + 8 + 6 + 18 + 14 + 16 + 3 + + 26 + 11 + 22 + 12 + 1 + 13 + 13 + 12 + 9 + 17 + 7 + 25 + 14 + 21 + 6 + 9 + + 8 + 1 + 16 + 23 + 2 + 19 + 17 + 25 + 8 + 14 + 8 + 11 + 15 + 2 + 21 + 17 + + 24 + 6 + 11 + 12 + 20 + 8 + 25 + 16 + 12 + 17 + 4 + 24 + 4 + 21 + 16 + 7 + + 14 + 2 + 19 + 2 + 26 + 8 + 1 + 3 + 7 + 8 + 14 + 21 + 19 + 17 + 12 + 20 + 17 + + 16 + 12 + 5 + 2 + 22 + 13 + 21 + 20 + 22 + 16 + 14 + 5 + 23 + 9 + 5 + 6 + + 23 + 23 + 12 + 15 + 2 + 18 + 16 + 25 + 9 + 14 + 2 + 17 + 16 + 26 + 24 + 8 + + 19 + 17 + 10 + 12 + 5 + 14 + 4 + 6 + 3 + 11 + 16 + 1 + 26 + 3 + 20 + 3 + 12 + + 18 + 12 + 26 + 10 + 9 + 16 + 11 + 12 + 3 + 1 + 21 + 8 + 18 + 5 + 19 + 18 + + 1 + 10 + 10 + 11 + 12 + 13 + 13 + 7 + 8 + 8 + 15 + 12 + 7 + 4 + 13 + 13 + + 17 + 3 + 15 + 20 + 4 + 10 + 2 + 9 + 21 + 4 + 15 + 11 + 17 + 5 + 1 + 6 + 12 + + 20 + 18 + 4 + 2 + 22 + 6 + 4 + 7 + 10 + 23 + 23 + 8 + 6 + 7 + 8 + 1 + 6 + + 12 + 9 + 9 + 24 + 8 + 7 + 9 + 20 + 16 + 18 + 26 + 26 + 6 + 13 + 19 + 11 + + 23 + 9 + 26 + 12 + 22 + 16 + 20 + 4 + 3 + 5 + 21 + 4 + 21 + 8 + 25 + 26 + + 20 + 20 + 3 + 12 + 25 + 10 + 21 + 15 + 5 + 15 + 14 + 12 + 26 + 20 + 20 + 5 + + 15 + 20 + 20 + 26 + 24 + 22 + 13 + 15 + 13 + 10 + 21 + 11 + 20 + 11 + 2 + + 18 + 2 + 18 + 15 + 19 + 17 + 26 + 7 + 16 + 18 + 5 + 3 + 23 + 17 + 3 + 19 + + 11 + 25 + 2 + 20 + 22 + 3 + 9 + 8 + 5 + 18 + 24 + 7 + 8 + 6 + 26 + 4 + 13 + + 26 + 26 + 8 + 23 + 17 + 25 + 20 + 24 + 22 + 10 + 5 + 24 + 10 + 15 + 1 + 21 + + 20 + 9 + 19 + 4 + 10 + 20 + 10 + 21 + 2 + 14 + 22 + 20 + 9 + 7 + 16 + 25 + + 12 + 22 + 19 + 10 + 12 + 5 + 6 + 23 + 3 + 11 + 23 + 25 + 2 + 5 + 11 + 22 + + 3 + 3 + 22 + 15 + 3 + 19 + 20 + 2 + 5 + 24 + 15 + 1 + 23 + 20 + 24 + 6 + 8 + + 8 + 15 + 9 + 15 + 10 + 6 + 15 + 19 + 11 + 11 + 13 + 1 + 15 + 18 + 6 + 20 + + 13 + 23 + 12 + 16 + 16 + 9 + 26 + 12 + 7 + 19 + 6 + 26 + 9 + 3 + 11 + 8 + + 11 + 7 + 22 + 6 + 8 + 4 + 9 + 2 + 11 + 16 + 18 + 18 + 26 + 10 + 24 + 9 + 26 + + 23 + 8 + 21 + 19 + 7 + 21 + 2 + 9 + 21 + 13 + 11 + 12 + 22 + 5 + 6 + 25 + + 16 + 8 + 9 + 18 + 22 + 3 + 7 + 12 + 22 + 25 + 19 + 9 + 18 + 4 + 16 + 23 + 8 + + 6 + 10 + 22 + 20 + 22 + 25 + 25 + 8 + 2 + 20 + 15 + 19 + 3 + 26 + 1 + 12 + + 1 + 22 + 12 + 20 + 5 + 3 + 8 + 14 + 15 + 22 + 20 + 12 + 6 + 24 + 13 + 3 + + 25 + 24 = + 6587 |}] + +let%expect_test "main2" = + main2 "../../data/day6"; + [%expect{| + 5 + 8 + 16 + 7 + 3 + 3 + 3 + 8 + 7 + 1 + 14 + 10 + 8 + 1 + 7 + 1 + 0 + 6 + + 2 + 12 + 7 + 3 + 11 + 2 + 2 + 2 + 6 + 1 + 0 + 0 + 2 + 4 + 7 + 0 + 11 + 3 + + 21 + 4 + 1 + 9 + 2 + 4 + 0 + 1 + 1 + 3 + 5 + 9 + 0 + 7 + 5 + 1 + 1 + 7 + 1 + + 10 + 4 + 13 + 8 + 10 + 4 + 0 + 7 + 1 + 11 + 0 + 15 + 2 + 1 + 1 + 20 + 6 + 0 + + 1 + 8 + 2 + 1 + 21 + 1 + 10 + 8 + 1 + 6 + 2 + 3 + 2 + 12 + 7 + 1 + 0 + 6 + + 8 + 2 + 16 + 15 + 13 + 1 + 0 + 17 + 15 + 1 + 2 + 2 + 21 + 13 + 11 + 0 + 3 + + 8 + 9 + 3 + 14 + 3 + 5 + 5 + 6 + 5 + 5 + 9 + 1 + 14 + 9 + 6 + 5 + 13 + 1 + + 16 + 15 + 23 + 19 + 1 + 17 + 7 + 10 + 5 + 0 + 12 + 2 + 6 + 3 + 2 + 0 + 1 + + 1 + 3 + 0 + 1 + 7 + 12 + 11 + 0 + 1 + 4 + 6 + 4 + 6 + 1 + 1 + 19 + 6 + 0 + + 1 + 15 + 6 + 1 + 8 + 5 + 2 + 7 + 11 + 13 + 4 + 7 + 3 + 3 + 11 + 0 + 1 + 12 + + 12 + 13 + 1 + 0 + 20 + 3 + 10 + 0 + 1 + 0 + 1 + 14 + 2 + 6 + 2 + 1 + 6 + 12 + + 15 + 5 + 4 + 1 + 1 + 3 + 2 + 0 + 0 + 0 + 16 + 8 + 3 + 0 + 4 + 1 + 5 + 5 + 6 + + 4 + 9 + 2 + 3 + 7 + 18 + 16 + 11 + 21 + 8 + 6 + 4 + 18 + 1 + 0 + 8 + 0 + 1 + + 0 + 2 + 20 + 2 + 1 + 4 + 3 + 2 + 11 + 6 + 14 + 25 + 7 + 6 + 3 + 8 + 11 + 5 + + 15 + 11 + 5 + 4 + 4 + 0 + 22 + 3 + 13 + 2 + 14 + 6 + 8 + 8 + 23 + 1 + 9 + 4 + + 6 + 0 + 9 + 6 + 10 + 9 + 1 + 12 + 1 + 6 + 1 + 11 + 15 + 12 + 4 + 0 + 1 + 1 + + 2 + 1 + 4 + 0 + 3 + 8 + 20 + 1 + 3 + 22 + 0 + 9 + 1 + 3 + 1 + 5 + 4 + 8 + 4 + + 5 + 1 + 2 + 5 + 18 + 0 + 17 + 3 + 2 + 16 + 19 + 7 + 7 + 5 + 18 + 1 + 14 + 1 + + 19 + 18 + 7 + 10 + 2 + 2 + 3 + 9 + 2 + 2 + 9 + 7 + 20 + 0 + 6 + 12 + 5 + 11 + + 7 + 2 + 10 + 8 + 3 + 5 + 22 + 2 + 6 + 10 + 14 + 0 + 1 + 4 + 3 + 3 + 1 + 10 + + 5 + 3 + 9 + 14 + 0 + 0 + 23 + 10 + 1 + 14 + 5 + 21 + 3 + 8 + 4 + 9 + 5 + 11 + + 8 + 3 + 13 + 0 + 8 + 5 + 3 + 1 + 15 + 8 + 2 + 5 + 13 + 10 + 8 + 12 + 13 + 6 + + 6 + 7 + 7 + 8 + 2 + 14 + 6 + 0 + 9 + 4 + 8 + 4 + 0 + 2 + 7 + 3 + 2 + 2 + 2 + + 4 + 18 + 15 + 24 + 5 + 6 + 4 + 26 + 14 + 3 + 14 + 14 + 3 + 3 + 2 + 8 + 6 + + 12 + 0 + 3 + 0 + 3 + 6 + 2 + 13 + 1 + 3 + 1 + 22 + 0 + 0 + 4 + 17 + 10 + 13 + + 3 + 9 + 4 + 5 + 9 + 4 + 0 + 4 + 20 + 20 + 10 + 11 + 12 + 4 + 2 + 13 + 0 + + 18 + 2 + 24 + 1 + 6 + 1 + 14 + 0 + 14 + 5 + 3 + 3 + 4 + 9 + 12 + 7 + 11 + 3 + + 1 + 4 + 2 + 22 + 24 = + 3235 |}] diff --git a/misc.ml b/misc.ml index 093a1ef..78fdb6e 100644 --- a/misc.ml +++ b/misc.ml @@ -26,16 +26,23 @@ let%test _ = fold_list add [1;2;3;4] = 10 let%test _ = fold_list mult [1;2;3;4] = 24 -let print_fold mon xs = +let print_fold ?(format=false) mon xs = let res = List.fold_left mon.op mon.id xs in let rec go fmt = function | [] -> Format.fprintf fmt "%a" mon.pp mon.id | [x] -> Format.fprintf fmt "%a" mon.pp x - | x::xs -> Format.fprintf fmt "%a %s %a" mon.pp x mon.op_name go xs in - Format.printf "%a = %a\n" go xs mon.pp res + | x::xs -> + let f = + if format then Format.fprintf fmt "%a %s@ %a" + else Format.fprintf fmt "%a %s %a" in + f mon.pp x mon.op_name go xs in + let f = + if format then Format.printf "%a =@ %a\n" + else Format.printf "%a = %a\n" in + f go xs mon.pp res -let print_prod = print_fold mult -let print_sum = print_fold add +let print_prod ?format = print_fold ?format mult +let print_sum ?format = print_fold ?format add let%expect_test _ = print_prod []; diff --git a/misc.mli b/misc.mli index cb59edb..e49faca 100644 --- a/misc.mli +++ b/misc.mli @@ -14,6 +14,6 @@ val fold_list: 'a monoid -> 'a list -> 'a val mult: int monoid val add: int monoid -val print_fold: 'a monoid -> 'a list -> unit -val print_prod: int list -> unit -val print_sum: int list -> unit +val print_fold: ?format:bool -> 'a monoid -> 'a list -> unit +val print_prod: ?format:bool -> int list -> unit +val print_sum: ?format:bool -> int list -> unit diff --git a/seq.ml b/seq.ml index 76f1e47..03995b0 100644 --- a/seq.ml +++ b/seq.ml @@ -57,7 +57,7 @@ let chunks p = | Span (lst, seq) -> Some (lst, drop_while p seq)) let line_chunks' = chunks (fun s -> s = "") -let line_chunks seq = map (String.concat " ") (line_chunks' seq) +let line_chunks ?(join=" ") seq = map (String.concat join) (line_chunks' seq) let%test_module _ = (module struct let lc lst = List.(of_seq (line_chunks (to_seq lst))) diff --git a/seq.mli b/seq.mli index 736120e..a9f0d59 100644 --- a/seq.mli +++ b/seq.mli @@ -14,4 +14,4 @@ val drop_while: ('a -> bool) -> 'a t -> 'a t val chunks: ('a -> bool) -> 'a t -> 'a list t val line_chunks': string t -> string list t -val line_chunks: string t -> string t +val line_chunks: ?join:string -> string t -> string t