Initial commit
This commit is contained in:
commit
f242d2b0df
420 changed files with 62521 additions and 0 deletions
3
2017/.gitignore
vendored
Normal file
3
2017/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
*\~
|
||||
*.hi
|
||||
*.o
|
18
2017/01/day1.hs
Normal file
18
2017/01/day1.hs
Normal file
|
@ -0,0 +1,18 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.14 script
|
||||
|
||||
sumMatchingOffset :: Int -> [Int] -> Int
|
||||
sumMatchingOffset k xs =
|
||||
foldr (\x acc -> if fst x == snd x then acc + fst x else acc) 0 xs'
|
||||
where n = length xs
|
||||
xs' = zip xs (take n . drop k . cycle $ xs)
|
||||
|
||||
toDigits :: String -> [Int]
|
||||
toDigits = map (read . (:""))
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
digitsStr <- getLine
|
||||
let digits = toDigits digitsStr
|
||||
putStrLn . show $ sumMatchingOffset 1 digits
|
||||
putStrLn . show $ sumMatchingOffset (length digits `div` 2) digits
|
19
2017/01/day1.scm
Normal file
19
2017/01/day1.scm
Normal file
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/csi -script
|
||||
|
||||
(use extras)
|
||||
(use srfi-1)
|
||||
(use list-comprehensions)
|
||||
|
||||
(define (sum-matching-offset k xs)
|
||||
(let* ((n (length xs))
|
||||
(newxs (zip xs (take (drop (concatenate ((repeat 3) xs)) k) n)))
|
||||
(f (lambda (x acc) (if (= (first x) (second x)) (+ acc (first x)) acc))))
|
||||
(foldr f 0 newxs)))
|
||||
|
||||
(define (main)
|
||||
(let* ((digits-str (read-line))
|
||||
(digits (map string->number (map string (string->list digits-str)))))
|
||||
(print (sum-matching-offset 1 digits))
|
||||
(print (sum-matching-offset (/ (length digits) 2) digits))))
|
||||
|
||||
(main)
|
1
2017/01/digits.txt
Normal file
1
2017/01/digits.txt
Normal file
|
@ -0,0 +1 @@
|
|||
8231753674683997878179259195565332579493378483264978184143341284379682788518559178822225126625428318115396632681141871952894291898364781898929292614792884883249356728741993224889167928232261325123447569829932951268292953928766755779761837993812528527484487298117739869189415599461746944992651752768158611996715467871381527675219481185217357632445748912726487669881876129192932995282777848496561259839781188719233951619188388532698519298142112853776942545211859134185231768952888462471642851588368445761489225786919778983848113833773768236969923939838755997989537648222217996381757542964844337285428654375499359997792679256881378967852376848812795761118139288152799921176874256377615952758268844139579622754965461884862647423491918913628848748756595463191585555385849335742224855473769411212376446591654846168189278959857681336724221434846946124915271196433144335482787432683848594487648477532498952572515118864475621828118274911298396748213136426357769991314661642612786847135485969889237193822718111269561741563479116832364485724716242176288642371849569664594194674763319687735723517614962575592111286177553435651952853878775431234327919595595658641534765455489561934548474291254387229751472883423413196845162752716925199866591883313638846474321161569892518574346226751366315311145777448781862222126923449311838564685882695889397531413937666673233451216968414288135984394249684886554812761191289485457945866524228415191549168557957633386991931186773843869999284468773866221976873998168818944399661463963658784821796272987155278195355579386768156718813624559264574836134419725187881514665834441359644955768658663278765363789664721736533517774292478192143934318399418188298753351815388561359528533778996296279366394386455544446922653976725113889842749182361253582433319351193862788433113852782596161148992233558144692913791714859516653421917841295749163469751479835492713392861519993791967927773114713888458982796514977717987598165486967786989991998142488631168697963816156374216224386193941566358543266646516247854435356941566492841213424915682394928959116411457967897614457497279472661229548612777155998358618945222326558176486944695689777438164612198225816646583996426313832539918
|
20
2017/02/day2.hs
Normal file
20
2017/02/day2.hs
Normal file
|
@ -0,0 +1,20 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.14 script
|
||||
|
||||
range :: (Ord a, Num a) => [a] -> a
|
||||
range l = maximum l - minimum l
|
||||
|
||||
divisors :: (Integral a) => [a] -> a
|
||||
divisors [] = 0
|
||||
divisors (x:xs) =
|
||||
case filter (\y -> (x `mod` y == 0) || (y `mod` x == 0)) xs of
|
||||
[] -> divisors xs
|
||||
y:_ -> if y > x then y `div` x
|
||||
else x `div` y
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
contents <- getContents
|
||||
let numbers = map (map read . words) $ lines contents :: [[Int]]
|
||||
putStrLn . show $ sum $ map range numbers
|
||||
putStrLn . show $ sum $ map divisors numbers
|
27
2017/02/day2.scm
Normal file
27
2017/02/day2.scm
Normal file
|
@ -0,0 +1,27 @@
|
|||
#!/usr/bin/csi -script
|
||||
|
||||
(use extras)
|
||||
|
||||
(define (range xs)
|
||||
(- (apply max xs) (apply min xs)))
|
||||
|
||||
(define (find-divisors x xs)
|
||||
(cond ((null? xs) 0)
|
||||
((= 0 (remainder x (car xs))) (/ x (car xs)))
|
||||
((= 0 (remainder (car xs) x)) (/ (car xs) x))
|
||||
(else (find-divisors x (cdr xs)))))
|
||||
|
||||
(define (divisors xs)
|
||||
(if (null? xs) 0
|
||||
(let* ((y (car xs))
|
||||
(ys (cdr xs))
|
||||
(first-divisor (find-divisors y ys)))
|
||||
(if (= 0 first-divisor) (divisors ys) first-divisor))))
|
||||
|
||||
(define (main)
|
||||
(let* ((contents (read-lines))
|
||||
(numbers (map (lambda (x) (map string->number x)) (map string-split contents))))
|
||||
(print (apply + (map range numbers)))
|
||||
(print (apply + (map divisors numbers)))))
|
||||
|
||||
(main)
|
16
2017/02/input.txt
Normal file
16
2017/02/input.txt
Normal file
|
@ -0,0 +1,16 @@
|
|||
790 99 345 1080 32 143 1085 984 553 98 123 97 197 886 125 947
|
||||
302 463 59 58 55 87 508 54 472 63 469 419 424 331 337 72
|
||||
899 962 77 1127 62 530 78 880 129 1014 93 148 239 288 357 424
|
||||
2417 2755 254 3886 5336 3655 5798 3273 5016 178 270 6511 223 5391 1342 2377
|
||||
68 3002 3307 166 275 1989 1611 364 157 144 3771 1267 3188 3149 156 3454
|
||||
1088 1261 21 1063 1173 278 1164 207 237 1230 1185 431 232 660 195 1246
|
||||
49 1100 136 1491 647 1486 112 1278 53 1564 1147 1068 809 1638 138 117
|
||||
158 3216 1972 2646 3181 785 2937 365 611 1977 1199 2972 201 2432 186 160
|
||||
244 86 61 38 58 71 243 52 245 264 209 265 308 80 126 129
|
||||
1317 792 74 111 1721 252 1082 1881 1349 94 891 1458 331 1691 89 1724
|
||||
3798 202 3140 3468 1486 2073 3872 3190 3481 3760 2876 182 2772 226 3753 188
|
||||
2272 6876 6759 218 272 4095 4712 6244 4889 2037 234 223 6858 3499 2358 439
|
||||
792 230 886 824 762 895 99 799 94 110 747 635 91 406 89 157
|
||||
2074 237 1668 1961 170 2292 2079 1371 1909 221 2039 1022 193 2195 1395 2123
|
||||
8447 203 1806 6777 278 2850 1232 6369 398 235 212 992 7520 7304 7852 520
|
||||
3928 107 3406 123 2111 2749 223 125 134 146 3875 1357 508 1534 4002 4417
|
49
2017/03/day3.hs
Normal file
49
2017/03/day3.hs
Normal file
|
@ -0,0 +1,49 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.14 script
|
||||
|
||||
import qualified Data.Map.Strict as Map
|
||||
import Data.Maybe
|
||||
|
||||
right, up, left, down :: (Int,Int) -> (Int,Int)
|
||||
right (a,b) = (a+1,b )
|
||||
up (a,b) = (a ,b+1)
|
||||
left (a,b) = (a-1,b )
|
||||
down (a,b) = (a ,b-1)
|
||||
|
||||
spiral :: [(Int, Int)]
|
||||
spiral = scanl (flip ($)) (0,0) directions
|
||||
where directions = concat $
|
||||
zipWith replicate (concat (map (replicate 2) [1..])) $
|
||||
cycle [right, up, left, down]
|
||||
|
||||
shortestPathLength :: Int -> Int
|
||||
shortestPathLength n =
|
||||
let (x,y) = spiral !! (n-1) in
|
||||
(abs x) + (abs y)
|
||||
|
||||
neighbours :: (Int,Int) -> [(Int,Int)]
|
||||
neighbours (a,b) =
|
||||
[(a+k,b+l) | k <- [-1..1], l <- [-1..1]]
|
||||
|
||||
|
||||
insertCell :: (Int,Int) -> Map.Map (Int,Int) Int -> Map.Map (Int,Int) Int
|
||||
insertCell (a,b) m =
|
||||
Map.insert (a,b) (fromJust sumNeighbours) m
|
||||
where sumNeighbours = fmap sum $ sequence . (filter isJust) $ fmap (\k -> Map.lookup k m) (neighbours (a,b))
|
||||
|
||||
spiralSum :: Int -> Map.Map (Int,Int) Int
|
||||
spiralSum n = foldl (flip insertCell) (Map.singleton (0,0) 1) (take n (tail spiral))
|
||||
|
||||
spiralSumValues :: Int -> [Int]
|
||||
spiralSumValues n = fromJust . sequence $ fmap (\x -> Map.lookup x (spiralSum n)) (take n spiral)
|
||||
|
||||
firstValueLarger :: Int -> Int
|
||||
firstValueLarger n = head $ filter (> n) (spiralSumValues (n `div` 1000))
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
input <- getLine
|
||||
let n = read input :: Int
|
||||
putStrLn . show $ shortestPathLength n
|
||||
putStrLn . show $ firstValueLarger n
|
||||
|
29
2017/04/day4.hs
Normal file
29
2017/04/day4.hs
Normal file
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.14 script
|
||||
|
||||
import Data.List
|
||||
|
||||
testDuplicates :: [String] -> Bool
|
||||
testDuplicates xs = length (nub xs) /= (length xs)
|
||||
|
||||
countLinesWithDuplicates :: [String] -> Int
|
||||
countLinesWithDuplicates = sum . map (fromEnum . testDuplicates . words)
|
||||
|
||||
isAnagram :: String -> String -> Bool
|
||||
isAnagram s1 s2 = sort s1 == sort s2
|
||||
|
||||
testAnagrams :: [String] -> Bool
|
||||
testAnagrams [] = True
|
||||
testAnagrams (x:xs) =
|
||||
if or (map (isAnagram x) xs)
|
||||
then False
|
||||
else testAnagrams xs
|
||||
|
||||
countValidLines :: [String] -> Int
|
||||
countValidLines = sum . map (fromEnum . testAnagrams . words)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
contents <- getContents
|
||||
putStrLn . show . (\xs -> length xs - countLinesWithDuplicates xs) . lines $ contents
|
||||
putStrLn . show . countValidLines . lines $ contents
|
512
2017/04/input.txt
Normal file
512
2017/04/input.txt
Normal file
|
@ -0,0 +1,512 @@
|
|||
sayndz zfxlkl attjtww cti sokkmty brx fhh suelqbp
|
||||
xmuf znkhaes pggrlp zia znkhaes znkhaes
|
||||
nti rxr bogebb zdwrin
|
||||
sryookh unrudn zrkz jxhrdo gctlyz
|
||||
bssqn wbmdc rigc zketu ketichh enkixg bmdwc stnsdf jnz mqovwg ixgken
|
||||
flawt cpott xth ucwgg xce jcubx wvl qsysa nlg
|
||||
qovcqn zxcz vojsno nqoqvc hnf gqewlkd uevax vuna fxjkbll vfge
|
||||
qrzf phwuf ligf xgen vkig elptd njdm gvqiu epfzsvk urbltg dqg
|
||||
sfpku viwihi fje umdkwvi ejzhzj qrbl sfpku sad nawnow ksnku
|
||||
nzhj mfudick ueaa jnhz kpy pzk
|
||||
euiin xvl elaoelu wbdd xlv jtm nohtq gfdbgdg gdfggdb edtym
|
||||
xfmkn wyww woe hwysuh gjw dtk utryasc dela eluk vmmun
|
||||
nmag qfwe cwslmgd nlhf hpf
|
||||
ifs sszo iod isf jna
|
||||
pjptwg wreera leyb hmlbpf qcrbma ylgue
|
||||
rwlpo jhla rprxvgs quguh pyybwgl qqvcb
|
||||
rxtcpdy wmpci mpcwi vwvdzdn nfpnj rcsxinl itatg ycy hrctg ron wveju
|
||||
zmkfn wip pyiz pyiz tnyg dvftf elks ezhotbj wip
|
||||
sgmtfdd xdl sch sch yaxzh wphgksh knzrixp yaxzh etm czqbaa jldta
|
||||
gnbr rnpd upe eeb sbq sbq oxc rwvugoj
|
||||
cshk thcc emfxx emfxx pbtcf jpim vltkqar czy iudkac jhpcc nqs
|
||||
uzbvx fkiuyk izxdiu yutntvn dixuzi hkyfnud oyz ynutntv
|
||||
ewl mfns idy fphu yqccb pte unukirt unukirt fdx
|
||||
lzn tin fgena qbql qycbdw gbtn lctlysx adhjfq blu aiv
|
||||
ites ites pbxzunl vljzh lqgerta pbxzunl
|
||||
vmk wjfzvhn pqkidze qfwh
|
||||
tqprmc exypl caf kwikh mdyyljc pbo hhxxo skna
|
||||
sqxgejb ejc fvup hpesvs luz fcxqwhr ypxof fxlcp pxyk xiczjri
|
||||
vjg qcw fsyqaoj mxf jha feclqqr vzdqnk verw mvmvm pvdqtcd xsfu
|
||||
fwwn ktvdh aecfv acfve yjozxwo cnujw bcgde lphnk knlph bqwlqju
|
||||
uwwapm dlln uwwapm uwwapm
|
||||
huupab ewetcte huupab ewetcte
|
||||
wjs zipivpd klwafr ipcczg wbv uujstsw hykn
|
||||
mgojdyh hlm xruta lbmaxit pabqrnp vkyigd ptpzr glin gfau pbo
|
||||
tbwx baqxq vtz jwex tvz tzv
|
||||
efopwx wfknzb ogaxln tqzrh jne zugd zpxikma
|
||||
rdjsa arjds hqdldw fjrtl midt qjv jfrlt
|
||||
dggqohj bidaaty iah lgmug wwmlbc lggmu laonaoq erkqrb tqolnns iygv qnonlst
|
||||
msc glwn xjfnij itt pka irrafjd euazydj silo
|
||||
zsyut znsht ldky zsyut dzcdft znsht
|
||||
iit cyteu pib fgvrs iux ffctql pib zuzp zsbb ieoi
|
||||
xxtwlu kqfxjhq isj xqjhfkq dohrs haovzc cgfwfrt munqon vuyexz nouqnm
|
||||
eptpqgi uiflvd acj livzq ejtt bniud cjdh jkrcken lspfy tpxri zibj
|
||||
zxme dpo fumup gly bkdcwxn lsly eglhe
|
||||
uoshw ijoyiql rcskaa vjbqv roiinzi fppqdu
|
||||
xuw vdbxie oypcx khxq xebjt oypcx uitqep vdbxie hoz
|
||||
lrjv tdksk uebo wktebvx nlapmp udhhxh uliqbm cklyyf jlzw xrmdlvx
|
||||
fosspck fosspck fosspck qyidyur hxnxmb dkpj
|
||||
rmrvlms susvos idw hzy idw tjgxbc lhgqxr tjgxbc uuq
|
||||
etjmbdr hwqe lnfwzni lnfwzni good eisci etjmbdr
|
||||
yqde bmlcc yuel vpyplss vyvhho kslgiu lllhc jtkijdj uclz hfbqsf
|
||||
tlohlvv tlohlvv bdqahw tlohlvv qavcqrn penia saafy
|
||||
lvtzyt qffe eaikhv eaikhv wbnl mdkg mdkg utfrm
|
||||
luowwk magp luowwk oyao oyao hsb yms
|
||||
gnxply vsdqum nprf jik axdp ariqjpc hjqcc
|
||||
izbo nkqkb xpqg pgxq qpxg gpm jxbkvu resj
|
||||
hsgyxar hvsl ner zzmcn lcpdvqn ern
|
||||
rfjlhu xkyh hafs cvvk drg vjsk mymc iab ycmlubx kpwemiw
|
||||
wlci qhhpr vhpr oyrili cnynh sivdso ldjya wilc ioiyrl
|
||||
cdfwd mbtk sienxui jsmxzo yxbeyl bybtc covxaq yuxn ktbvztl ktbvztl rcekjhk
|
||||
ptenhqv tzdt phetqvn mfkdz
|
||||
hmezeak pqvqld amsih jxqacc uferfyh nfqjsz rtuqdzz pohcx qia cpxho hgpqs
|
||||
iygny dluc uxqz nlujm xkdtlm xbdgepg jwn ohl wpfll
|
||||
lnqf pcxy cpit enp zpj lqfn oowgw yoxdff ohvcfcf fuvz qkpmb
|
||||
oydu jlscilm pzxen nmtdngu tslcupx ntdgmun uztpx nlhh jqn llsv
|
||||
euyx epn gyvg cwtoe ruyap yaurp uryap obbl ovo
|
||||
pgo irm ksrxe qotuygd afwh qfhzfsr wafh dqjbwce dzfo hew skrxe
|
||||
dpvel dpvel ipljjxs vrrsob iakey uheuu swxu qmnmn mpjkb jqrwfmv jozj
|
||||
sempz plzxqe qvyg sempz fejux
|
||||
cqgqvg zhqir rqzih vyu fmb mfb
|
||||
uejl kjh ayz dzimg yzafvg dem vlogg
|
||||
htfkd htfkd hwykmm htfkd
|
||||
oxvgq wtai rkyyxya ldkecdv
|
||||
lvlrsu rsullv pptnrwi slvulr vxrk dpzti
|
||||
gde ixwoz nnsx nhc nzi
|
||||
dsadkj qtgya wco psyondq jayad crc lswwm purrad pof
|
||||
nocibgs hxqdejv nlqxdpu dvzd
|
||||
jfaws aiwnjm tqjpgs fuiobz gwnemv hjevs xkbbgiq sakgv zmwpkuq grjllw
|
||||
xrr jwhtchs boaqkg wjhdr xrr
|
||||
vyapct tgw juzgwkz odddvof juzgwkz
|
||||
unuu kubdd dxr drwg
|
||||
qpefzz iemo fwa vhdcxx
|
||||
hseqy copss gytzub lxi mrxtwc hxqqdfx ijt kcy tafjs jit
|
||||
uevse rrq zmwyjfe xljx lhgnyzt rngvwqd
|
||||
gfvpyhq xpdhind eocgpiz ebs pcmsgjy swni iwns thspnh yvbzxz fgb
|
||||
hxr ehw ekfd ncxcs gxjmd oqszdjp fgu gwuoafw zumenf qltbw whzuxov
|
||||
wfc pawqo pim jxgt dtiwzil hdptivc slkazm htafjih hzheez rkk amy
|
||||
mgoatiy pkec ddvwyni zuya aqrcjes ubkaeus nuhhad upe qfem bpcc
|
||||
rmyeg qfq bia lzk fusqfb ltvgry vggr xaxi avwdkbg zhlzt
|
||||
zkjoeee dyi sxdwfqa irqljmw gek dgdb mrakr ddaznn zlh ajzzacf juv
|
||||
kmqcy pohbej hujdgao rsxfkn vlu
|
||||
scnpa hvl cybql lvh lbcyq msw deqqb yjpsndq
|
||||
ndhjooo dpf ziey jtjlc eesag ldhgoif
|
||||
tysbae wkpst kjz stpkw sil yetsba
|
||||
ghvlfq flhvgq tgkjie gqlvfh
|
||||
oimn vlmsljl ocala vokhrs odyv msn dzly wcky
|
||||
cfjwmh rpsdor bttnkg jxenm mwdk mer jgsusdz cslf
|
||||
ialvxk bvc qjfikr caw puhmmfl xpmsx
|
||||
tyoey egcf dijg vywd enued uxkshz nav bdrn hjugffi iobqwiy
|
||||
eykhxck shpfjhk vlqg alkenz kuj okxs oeth mqbr nfvqvkv xfvyi mboo
|
||||
zbw curcajm mel jxqcw mpdscxq rhadty zrddeh wmedc wkcwt yvwm
|
||||
iee hzeofmh pqlkkb azlam fpj hzeofmh ripi
|
||||
sawaqek oyoiwtb npq pisadk nnd bzgo wiqme lxnvn
|
||||
obqx ffiegn obxq for xobq
|
||||
zwway wwazy aqxg gaxq
|
||||
ebssilw nuscati mofyc sogyacc yujmdwu ehxsx qcaf udvoo nlcfaz eov
|
||||
vnbe wtzzjn bczyxt crmvas zujy kukq zujy kukq
|
||||
gvltk kgltv kglvt zflikic
|
||||
hby pium gut fjqn sksoqyq kcliapa
|
||||
tbonrr prf vga jqgw ulze ukfig
|
||||
zafixw hia omgwoi noeiox fqbket iviidgp bebune kwcuotp slvy wcx
|
||||
fjq cyecn fhxvj byv kojvj iaqd aaxva rkogp
|
||||
vqbbt sjmr mxu mxu rlfj yqhtzv cuar yde yrs sjmr
|
||||
iyxiyp auepgw dtpbyvu thuoai fpsfkpn bemgbsk lni ozy jogp xldyvvx fpsfkpn
|
||||
jtha ibn ahbkh xzxkei tql mycvmyh ioyw
|
||||
mpsc pvdiuu wqixxlo cqwmlrw cttoz lad
|
||||
srl xxlnofu dqf snxd zjlp htxzd
|
||||
fkv berlbyh kyna wkme qjzgh thpw frup
|
||||
irhreaj udkpbza qmgp ormlipa lbyuc
|
||||
empizc apcb ossmtj awk ttsgi bfoymzd ftx jkicph qqjv tywp fwzfe
|
||||
zaqkd ysn zaluvs rljdk ast fjp amjqr uabrya ufswzjg vcldkxt hzsmrbl
|
||||
qvy tqgnwj akibr tfjevhv vav
|
||||
mhe sxg hacoa emh kasf hid jklfy ijk dih
|
||||
qvwbenk akdctm jztmsx aqvpodu vmknns nck letcrk poba
|
||||
lhve kkvff iiixid vtsun uvgte mmlxk pgd
|
||||
gktphd aaoqwz lrvsuw ofcyvmi suvwrl dpqiol wjgj uqigjx
|
||||
tbp xoc lmz dyzlvp bjleh pxj xjp xbil
|
||||
gpzgvj tctszm tctszm pnp upqtmm rribg tctszm sllsbr
|
||||
hpm qvjnd lyqg bybpwn etz pwfigbg uqgrvpg cvniubo
|
||||
tpowus bdncyxg gmm ebfg zwoue izgkwtx gmtfeg xvudp xgmjp atrvn aqgl
|
||||
wlrxvo wvonohi owxlvr owhnvoi
|
||||
knyo aiixyi sjtqb kukhgv qkj qiuefb syhfc aoana okmot tdsmnoj eyzqjn
|
||||
szhto szhto szhto fxpsavu dtcz hnwqdvk iza
|
||||
poykme rboczge tuyiw sxr
|
||||
lpgbp bpmf aiqy exzqt gxdoow yjp fxwdmt eoklc jnps zbnbiwr ppvl
|
||||
huecy jjhyz pwcea ffofmj tts
|
||||
ahbmkw brz xdenmw mwexnd ncdxgf gcxnfd
|
||||
yhfnra vqljz bkyxzt vhtsyde ysaxt qbw
|
||||
gqhiej rofhmp soeebdp rcuiblb rcuiblb rrnh nses
|
||||
pxrwe suil iihzf lhcgmfm mqasxh ttpp kqitdyf cuabaa
|
||||
cxl cwsp qyseogj dimvv igsoxu ncrexla ubrvpp oum usluv
|
||||
rkmo jqqcdjb mobqcta pbcmoi afjlh mork
|
||||
nmohoeq fezpxh fezpxh yec
|
||||
yxlncrt ivi dajo tjpim tjpim
|
||||
hzhy rcjs uhyvwz tdpxlqw itoiyf
|
||||
ded apfmhe stfk ugyujv drwks zagqnw mbbzmvc aoupemq
|
||||
iezre wivdwif xzytxe xwytd vpnol pljx aot phln ztncw
|
||||
ozblu asda tkxh xqe pvijnl qwwh uvp bdhtgjt uynwtav cdz uqmvp
|
||||
eukgtsy kdfb bdfk tnv dfkb ewdemb
|
||||
rsf cxnk cid qsa zwk oetnggn
|
||||
fpq oim zetbmlk fpq oim xgv cbaj cjrqm
|
||||
phgldt fhmkc efkztj qidri vsv bvjf lfwfgm wfuoln toamg wfuoln idrs
|
||||
iuc rrdnk rrdnk asqhnz qxkigmo eeoim mmdtgif akk
|
||||
rfvsyy kopfhmd tnv ibo demeqm gxrxw hwk ukorln bep
|
||||
ialo eogif sxlj xfegx nanch egoif eymwt
|
||||
kttrpjq gbnyiat kptg oarewx vkmt gbnyiat szyokf
|
||||
tjll xviodi tjll efc rliugl wfbbpq wsqvdli jur tjll bguqyu
|
||||
uecm yzjhn vqf labnc xyaksj
|
||||
hjtef zzq ellr wtrodcg drwqo ernt uzx sqiokam
|
||||
izmh ddutl bdzft jvfthh
|
||||
ecr xqrp qlxstu kgprd gqvtwni mkughf bulabe bvoxkx
|
||||
jwsna vjwq swkycg cpp dvmyal xotxviy qkiva ffa eakwp fww yirri
|
||||
ufnl lpuxw rjki nggh ajdkpvo oeuaemy bjisma vsjzc
|
||||
ctxu aavlw rap fzxtcp msufn fzxtcp sdlaom vgvdvpc
|
||||
rftw cyf twyxi orifavd
|
||||
ogiht ertz wcw jnqdup phvp lbw
|
||||
tplpyq jeh aobamqe bvaim qptac gssi mkjbaj
|
||||
nmklyg iitx iczojzr vjspqb uooky uooky hjk
|
||||
ggnekbb bnebggk sepzjd fvqfgr
|
||||
wnfwrn yaiogv mbusuy cpbcgs thjea
|
||||
atndjc dbjgdz guedeay rasa kfhame pusuu dbjgdz
|
||||
xivzyml xivzyml eqsykxo bshvz xivzyml
|
||||
nfe ayx gscy ylyp oqyl isatnpx poaelm zsrw dpd eyrdjpq yllk
|
||||
feqktz mlm jhi yxigeu xzqa qwv yquxw emken jgqsp rojfcu
|
||||
ruvfcud poubal xswer hfhpyp guf pzgzoq pzgzoq jwgxafi guf kqzzlu apg
|
||||
rxwcsdc rxwcsdc ywu rxwcsdc
|
||||
dmgsey xrtx wldwyxz avi
|
||||
yxnqv ewlx fvif ozfcbxb zqapa yudqksk wlxe mjpvgz
|
||||
ozoa ozoa hwkbp ozoa
|
||||
qcv drtqn uqv kcsavgn ybzs tkw
|
||||
njmloq wapa srm srm ifurca
|
||||
ezm ccj rub yuaww xhee liikjee kcabgic sbgqx vrpyo pzmesdp ksvv
|
||||
hycyne raaksm nylsc lcpgn akasrm vxwoaum
|
||||
zhugs pqquitv bae lyozb fhij pcdcc bae rygsgm pqquitv pizz
|
||||
oxx bzk grpis qiqljwh svkn
|
||||
qcq qqc fzgn sqg
|
||||
lclad motw ukz zghp
|
||||
glr okzfs zgv ygsvv sauuog glr amxr vvmwmu khy eyh
|
||||
ukpxpy rgnqyaw ncm coeblf
|
||||
qdbr ortzo spvnrnq uomtj vffbeva
|
||||
miwar bidfxp eibo qyee
|
||||
yldec ghwj mxlemvi imac klkvmg fekxhp kevlzfr fcgnoq fncgqo
|
||||
hlm vlol qdic rltij nlzxfys rzpoh
|
||||
krpwspb yrosr hioqla dbpgzgu dvkvvc vvdckv lcjzb qbsbr acbi rtnk
|
||||
iqtvk jcldzuv smly whmnte mdwlse mkxw mfnkv mkxw kes owkfh
|
||||
iwcjmkt rnb bjcdjl furhzuu exs
|
||||
kjwu iuaj ixkujoa jzeau whpn
|
||||
tvj zrdy fwsbagh zrdy czuzum lxotprx wbohaai
|
||||
crsyzod jouf osxntw iwzzie bodu scze gjxn vgxvqo gjxn mmthykb
|
||||
dabjfb vjqz cvr gsymwoe qzpusj twvwhw gyvlqd kdrdkzm bdljp cvr
|
||||
vmswdz lgjsvxz yjkgqkg tzmjkfp uzbmwxe kuqa dzomt hep jjlibs oxvpvq cix
|
||||
iqgd btwdjd ncdrovj ltxqc orwhdlo orwhdlo
|
||||
nxro uxj ovgha elvzl xmlzssr wonimvb urecfx dbfn kope
|
||||
tbes cgyh fypswue fgxjqtd dxdrfm pzhnaeu kugspa
|
||||
eouzw qrpokyb fyhpb bcvfvze brdwey gpaa fpqutw pbqkroy axtc egamku gxk
|
||||
xdrovpt peeww wkcin suir gvrbix
|
||||
hgsjks juvod jtii iijt
|
||||
yaw hzifa wpagkd tgvmc iru yyeuy mgcvt fhiza
|
||||
lsk lks kls edypaxo
|
||||
tjz qjs mgoyd gomyd ztjbex nprwk vvw rtjsq quvf vuziqtb oygdm
|
||||
kftodz xua lyxt zfadf fgdwt zfadf xua ehwykd wniahd mqoarg
|
||||
qgiapb xptk iscyf zfspn qvrpva egufqte zfspn hksw xwxrs dkdruku vegfs
|
||||
wqifs wfsevg iwnjjpi oajju tkvhpl lemuw
|
||||
rzbmhso pbvb lfgpq fzjwxxh pqlgf rbhsomz
|
||||
ufi aiyd gxozgx hygjp dtma uughdc ojumcf yuadt
|
||||
caami tqzkvor tqzkvor tqzkvor
|
||||
vhtnvyx myxdywi mwpwq hjxadd qkcj vvytxnh dmbea
|
||||
jvjtcjg mbiwyad cup xkrfk puz uxpmutf rjxyxyn mfchc
|
||||
ocrak zprfbgu pjjzl zoehfkm xqn qki uxq tcv emknqjp wvmkas
|
||||
nxg myr myr vnfzpoy
|
||||
gwu ezt kbmeouj sxue cxax gcquz ieegnal xecusia vxf
|
||||
xermi xermi qporwc mzemns ticltnz ddpsstr ddpsstr slgbn
|
||||
xnujwtw bvzv xjwntuw unxwtjw
|
||||
tipo akp fkmcls wglmjq fnrtsv
|
||||
fan dfbya qrp lcvxqqu ldpm gucmeky mrzy fixaph rygneb ocm pjh
|
||||
ovtrqs ujmbnal geihpe mijhy eewuic toaxbp ipy tvb evlmrtd lbujmna
|
||||
lsmbwwd hvurk ihbuek hvoyq erzomhn gue lpq dihon dgzvst
|
||||
fuoshq hfrzeu zfrhue ufqohs
|
||||
icgwnbi gmhogxu gmguohx toixb hfwj haxlav hbe jdpxeyi xtgfi
|
||||
vfakk ioil hddqu sdztx hduqd bmiuyr vmas
|
||||
mcvjjhf sfgt sfgt lambvp dnqc pfecquk
|
||||
xgr omy bmoadg afbna mar nicpazd iveku zdioyo
|
||||
rpipon dwg wgd pironp
|
||||
fkyx wjefuy mfesst ztlf gnnceb rsbvuk ckilt kliqnm iuifcvu
|
||||
lmgzx oknwr wmttry luipa vcttj nuqdmy
|
||||
iota efrxkk daqzm certtoi nnvqrwz qrqgza tllwp efrxkk
|
||||
alde wqmdjy erh txrtqm zuljg hspbnrd pvsnebh bkue pvsnebh txrtqm txtthn
|
||||
hgggm rswwfpj uctzrv bylqeen dpbnw ostsjwn jtjiyuh ofxu mmmqlg ayhza opbgdrv
|
||||
qmhkh orbeokv agosach lhujcju jzpp wmxtcy jcxglu iuwmzrv xwkgz sxlzld
|
||||
dzcdm lwal xpujjm xpujjm lpfojz lqqcon qmqrg
|
||||
gmwugq ceslt rxcogaq jwkraq
|
||||
joxr brdy yixlou brdy lnr lnr
|
||||
wbut pxlsclt igigapq zeacg jxiezn hvws wwz ujpbl fdjtfjw opod kea
|
||||
tsodswf pufo zqrt zvcpu
|
||||
nyy mrqmg zkt tslzsf zkt
|
||||
hxywv lbmogd hhv npyzgjy whfvv mlfqjr ggjz owijo zmesslo gtvizw
|
||||
xzz dvpzxbd wxwlp cye rcqpgrr gynzo nhy gzpk fpfmb
|
||||
nhaakbv iazpdc yadqbe kmqm dffq lidnh cegjosw kgd hwivd wijj
|
||||
cwmdyf huoy awihev qav cwmdyf rdwck hahj pesfyk uoju zrirjdu
|
||||
qabl vwcwbb phnd xnp huuzwxl rukbp kod sfu ngcvgrt buncnfw
|
||||
regyd gjzfwf hpuv zmm vphu gwffjz
|
||||
rdf emo crsoeo bksetj aqfzm pphny
|
||||
opbmboi iakvj ymjwm vxoq qvox yafk zkch adlusz
|
||||
qhm jul zasv xhu qnhjwzx
|
||||
mjmyvd mezfuls upbdpzw awc qxta bzrx tjpjmj dxfyewc zorm
|
||||
bko kfokm htcpoqc liuvj xhmpcu ccqphot dthvo pfj dtxpmu xoocm cmxoo
|
||||
kxv eenns qhpfsvo gqoyv jzjho aoscl fetug agxmfea aygpt
|
||||
javmegf jlmt epdwy egfs hwv uszcqvn foixpz iukh dbuhqgs zgb
|
||||
zrex zrex xtx ydan maomp hqdhh mfvan broh wvwhqbu
|
||||
phatsot joipm pmniq arqzmbe vurl bgy iwbwk oyhngcv vnzbzgm bgy
|
||||
xprufgn vhca nrs abuh zwsxmhk mqrj tyslsij ojkdzom wepxg koodzv ypvyy
|
||||
vop nnpz mcod mlli ntyhz laqztb kauqkla gmrfte pcuhaci
|
||||
vrenj lypors prknc djbdkzv amofdx
|
||||
lgig lojnrw obusoc fkwe ggnv pydcraq bvdivl vev mrojjs rxa
|
||||
qeg tap jocwlsm vqxa lmjscow
|
||||
gptlrgq vdasm erdc oparmw
|
||||
rgbsa nacqhvm pczf anupcp upudwgp
|
||||
jbnobi ifhzrd ihrkkf osw wos lrnwv
|
||||
aiuntpl fcxpmz fplacs fplacs tipm gfotkx
|
||||
fsbnd qoc ozmbi rqv fmbxh tuso kfoxvjn ocja zzs jwplx
|
||||
muaklvq ghozoxh nwxbh mgoou ufptl ouhh reyuf jougckd dgprag
|
||||
gwbnqwv dtrd mkzxinl erxl zmfa skuu crxmp wwao wwvdpk nxbn lglzy
|
||||
qeejk wvnypc yfzyfcr eeqkj
|
||||
nmcp fmkgfyi grfthau azw
|
||||
kkallxz rjke ukbt ixkhfb bktu jkre
|
||||
pxj mnwe djrjde gpsc enqz pdbydx cktfs jjeddr
|
||||
mgplj yyunujc vis odee ccesa yyg yjcnuyu doo utse
|
||||
flyy juvxomm vcdcyva lfyy ozxnuzw bmgns
|
||||
kmsypi zpbyiv rrycnb qos sslwyeo jgbyv njltzt fuwk nwfb ozcf xqnf
|
||||
sdcvgmy sdcvgmy hzv uyq sdcvgmy
|
||||
fyox vmgxahj ywaxbmm ugy ruwc mys yrjwr ozsxb vaq
|
||||
gjpyc sgdn kgm fbvq cziui nzy bwu ezjkkus jrag
|
||||
kxcr tgjxss xkcr bembjv rbbiw bwbri
|
||||
dcz rrhvdc zbonfzy ubjt
|
||||
rvq yjnzswt vatkopb xlj dwxig dqlt qts iva
|
||||
lylclc jptz rbidu lbt byxk
|
||||
lwre vwriwh afixsi vwriwh
|
||||
kmvbflr nfptw fbglxh pyas dxmn hemf segaz zrs
|
||||
dvbey zmj xfoi bma udtxhb
|
||||
yryng geiwgz bbrvjp ala
|
||||
olzicp olzicp qhhslry olzicp
|
||||
exf xdmwh xdwhm nhjsssn rmlkdb excguia fex
|
||||
xkwgeso htys sjdk jizciy gjjl phgqdjh wzdb izew zcrumu llxfp
|
||||
frkohf oifsm aisebkt ijsfkot ukk
|
||||
koqf xvoior tpe erfpnp npnx
|
||||
sneysk nsxki wpmhd mdor akrpvgz moicncj sbsj owfhj exw
|
||||
oqqbvk xztx gtxlms icmo
|
||||
lfy ltq dlzqlvi ovbrsa gzm nhcjq umbtgm nhcjq
|
||||
iuopdzq cqaeuu xuzngq kxlx laml slvvr frtml tvioiez vyoomw xickbqh
|
||||
ckahov mepeku gtaf gtaf
|
||||
tlto cnnz kzsbkjo kzsbkjo
|
||||
kqf comkf dvrkyl jdsqi rnwvb vxvd pok
|
||||
hncq xcx yuykfs egrruvw yqh smcou
|
||||
tywyq xeq cix yywqt jhzptci hybcoe
|
||||
zsw zsgot wnu sumd azmuos qawjaz rpf zkxgwdu iom igh
|
||||
vmxmelt gll ysbbt yboqoyz ykdglk cnypf otn owsz ipn epfeka bkmy
|
||||
wxjpce etzyavi whb sxzft bfu dgwnbgc nfw sxcteis qqpk
|
||||
kofv dgoyme vlza oxhbo lrqt uic tvfqiyy iaqm afnk
|
||||
nsmpg wkibdcz dxbw tlxzm zgwe nqwjji eacbhn blk
|
||||
shlgws eencr rtufah kjyvqw transt ecsq otbf
|
||||
obs xsjceex ffqj sob djpq jcda zlskve
|
||||
rfqtle klarp mtzrx rasr eisqovk rpt vymibt zwrif ilsnd
|
||||
ldu ffd ldu tizfexr fwpmyan
|
||||
flxso tzec pzn flxso kzdouon tkvkj
|
||||
tvd arh qywql uev btvnpm
|
||||
wtwx kzafvk ybyzmhv mdbrphy vamlvr gbxhod tyulba krcqj ikotmla qfhpa
|
||||
bnfin ebngj agfdfzu rhjtj aaqzh fsyp nilar uwurjnu hhmso hhmso
|
||||
uanmesj vshh syosjdt xkormf syosjdt ifvytwl qnw vshh jkg
|
||||
epyzcn pgdxgye lecnx nebg jzdhvge hfy imiyft
|
||||
zonbcnv vuvg sxtuty zdhmiow lmud cuegzg
|
||||
bxgft mxhzrh unqd pqpsnce khykn qlb oujdxpq pxrd jzxjuxr tij
|
||||
qss mqirowz ijjswjm jjer utwn kuedqxx bxshuok qkfag dmfwcr
|
||||
jgln zdohd xitfbge xbokj xxeuv wqhvhjo erg cua fhc mhwy
|
||||
euo ousht ipxt tpzq vnbmlo wvbjpb yjg bwpjbv nzvsea aerhsqv
|
||||
axhmi bcf zdx vplso xhmai qsk psolv
|
||||
ydnpmyo pfba zmo nat ykwxvm ydnpmyo rtd uuvqqr hcfccbd rtd
|
||||
ytp guw ydmyf rww oucmpf gemhpj labc
|
||||
edpbefn awgg qzpe aat cupig
|
||||
mmi ghdaoh ibx fbyj gge vmmssen nplt mmqcra omcvm uwa fxypxfc
|
||||
kjaw mtijne cfmsigd zwcjjd ajxjlqr tbp bnilc
|
||||
fse ele vcsyiv bfe udny vznrao mgrjfgw
|
||||
hadl nikvvpf gmdg bkmgt ugj
|
||||
xkis qmr cgz nresp gms zrii coxkke vfsqiil
|
||||
wmicbf bkk wcwklfg vpcbeg kfmjab vabc dax tnao tnao fvvzeyq fqm
|
||||
bct tvj tra soo stqao kqua ikupoy wulcu nauxkkb pvqxy bfu
|
||||
wpz txdduxq gaehfki kxo lvjzpxu iqon swr eyihl nbbec
|
||||
fuphnbj bdtz huwu zdtb ilgzpa uyaut vpy viff tuuya
|
||||
cvusbh bgy apsao qsupha
|
||||
jtzlbd ljfvh wkjrw xsah sef jygb pqym zbcwok zdmug qpym
|
||||
hbibuax iorqc dqjrs daeb iorqc qiw sagyt rkc sagyt khbr
|
||||
shz mgn pqrdbm jvace gfhnq ann zosq wdwzmuf kswsg dzt brlavyo
|
||||
qiw cdvwds dckpruy pybjra lfvgfn cwj bajtud pojehb rzrzvwe
|
||||
txfyk zkgeeu zkgeeu zkgeeu wskcv nccoz
|
||||
eettnxq gbgr uiqonyz wqtgs ozfjbn gbgr
|
||||
svd thmmr rbbtxn sxkq isxlnhf tamdlbe bqrgvu nmpvlkc spko
|
||||
qmn rspbjme ikjddkq kdb ugpegi egipgu
|
||||
ufffijo revqpep zfw kwd pnya blqo rnntzx anpy
|
||||
piaeyf vbeye uuqd vbeye
|
||||
hamd hap ekk lgla twto
|
||||
isniinr crz sjpmfxn uskwj
|
||||
lzeofk tavbq ijcglqy lvy jliqcyg lwlip
|
||||
uhyyyw itlrf tdc iabeocv jzwnjh vqxll nefze pyrxmx eispxnm hzlksce
|
||||
ucuh mlam bhyej rgzkew ctbo iswqnvg
|
||||
ytmb toppqgp ytmb gqgpr gqgpr vps ebv
|
||||
eavn atkqltv bjvojs kaskr vqltakt uiktr xglc eyb rkkas fhnf eaorqm
|
||||
jmfipc ujggeh hdxpfa xtab ydkibi ycxn ujggeh icheh vpznael oprbf
|
||||
xazqxg khlemu awh uwz vhnixk vdcty hkk
|
||||
gcl kayi hfozask grpseyn zviy tzoum qywnr wqkhq
|
||||
ctrrcpw wqfbylp wqfbylp wqfbylp
|
||||
gtk lqohf hqeaku mdj zrfkmxn bcqgf msing
|
||||
luhpel kexokpx vojap ldaexs bbbtz
|
||||
oimnqb esg zyjmbfh dfyhcf khpo zjtgm yelztbs ugj zjtgm mxro xyfxpk
|
||||
dgtsu vvk wwfugbx aai zlxab beyxcg bpx chc bnxui
|
||||
irrwbo orwibr lqt qtl tqknh
|
||||
ihjsg ihjsg powwy pycyqo ihjsg
|
||||
xdcu outh fnqrc eihkss bdylm sjunib eihkss
|
||||
jpnw ycimse rffu ismyce uhxl feai
|
||||
yyodnh dvwshkx vulh pvxj ydhyno hyodny
|
||||
vuuweg pfguvyu orhei orhei wrm amkr xecja lmnveth
|
||||
wriwe xgtnvj tdmxf gadtqh bezjvz lifu
|
||||
euft tchbm xmtlwji tchbm
|
||||
cfi zudn zludl pwiu axe psed
|
||||
dbtfwf ajxcudj uaxdjcj dxuajjc zouyy
|
||||
fmycmej bqhe jyfecmm kkrv kcdvjoy
|
||||
grtb uzs rkxzt hivhic brtg hwyc lsl iivhch qbcp
|
||||
ymn xfpka hqm sldz dblvsoe
|
||||
qrcapma hntgmy difrkpk difrkpk xlsph
|
||||
flvqh akcw boxrz ywhq boxrz esnxzv boxrz
|
||||
zrvh jskaw mfs fkj
|
||||
abveb qxfnlfq abveb kbwiyvd abveb
|
||||
pgarl nbfrenx rnxgx bdlkix liltdm dzcokeg fubupcg iwp xfayp obfaz nevfw
|
||||
nuhvaci blyv fcsp adlanka sjy syj ysxl
|
||||
avwakn dkoya yzuszuk lqrr oqfyd dmgbhd lqrr
|
||||
pxa mcvtoug nlweso yffqc dtuagcd ovvrkz ggfhw wnlseo bpqbn ohxzs rxzo
|
||||
djkcl kbgyfir ogquot uoqotg jtmyd ohudvle xrnbt yvsln wykqt hntc xlrhqrb
|
||||
ykt tkxfmd exas kty
|
||||
zebstke msbbndq itmli ubexmht vekvd xbmb iajbj wac sta
|
||||
ptdg oftwo goiulah tfmsrqs jffxvnv ozaluj qlhqjy wyffa
|
||||
xeq ezmlpw xgno xorvfo yzq vwif wsi
|
||||
hdove hqbzhu pjrxlj uafuh rizlb advmkca
|
||||
jzk ddoisdh tfjh yuvikps ixpkf hnu
|
||||
kixa djx uksr ogxty dxj clda ukrs
|
||||
xgiy diwbvn vphdbg qnelyz tqptqig lenyzq ecsswj
|
||||
alx awj fpasmmg zukuh qaanvb too nvskuk too gnria
|
||||
suo suo brw nazq suo dqv
|
||||
tan uxiz oqa xyezcd lsaicjr bosiak rmmh
|
||||
bidpomf dimcj qekero wbrc lewt kmgmlao
|
||||
bciacj eye lxfpef cbdshd dhdsbc qwnhil iuokc
|
||||
zduefht lrgfjn nclksm wpjpjr hkeqd oprsjcw
|
||||
chhdr bram swdfjr yikqra xkzsloc otptp agec hhdrc uofljf toppt wpbyrwo
|
||||
bwlpb nishr knnrysj bvr ftnb iedskch weo
|
||||
czo hsfp wblh cru kzalun intt
|
||||
jvob rppz rkwv hgyhrqg
|
||||
sgo hued jnygge izf ztan kjgpcn fagff jsi ijcxzoi tgqjjp tgqjjp
|
||||
ltjq zidjy rfmy yevuaa nlhfyg xytdtle wsqvzzx wfflboo nawhv golhf xhsti
|
||||
bmtzlml xcbsquq vnfsux voep lkss ioim
|
||||
ntfffh gcncwu mmymn wkwlswa gcncwu iaeyumz
|
||||
kcgdm rbaau cwsoya pznnnn xzz zbbdlhw zxuelq xzz pjeq
|
||||
xrmnuct kwvykx khxr ioua xnmtrcu xrnctum ujq imnt ecee
|
||||
xjsgx fby fby fby ggtpgdm jqvuj qshewki tkml ymsazcq
|
||||
sdbyhwg kewtrte novhdcp wbuaoh dtytgtx zez whygbds hpg
|
||||
tjvaqo yrycda yrycda ldbp yrycda
|
||||
kloi tmsocmx dza sqtxc wgevs zlevs vtm
|
||||
ftnx drvdm ryjfdgw nerynh cwfjpa mddvr
|
||||
wsqjyn svg ncw aesn hvuq vybajti aesn bql atxhp ipu
|
||||
eye romgxj gumuke jwi jrf dtt kcj wmg waw
|
||||
ptltud oymklv fgnmbc ete apanovb vpt vyospi
|
||||
clkguhu rbxs lxtnmy ferdx qbmrpg pvojnj zbcffbp
|
||||
itngp dvtlq fzxp cxrf gbxxqp aafls pfe bpxgxq
|
||||
nmikrui ddsq srfilr gnuvghu mwnacz nlbdm zcjm uylgev umzu mftz nmikrui
|
||||
bow jmnxyen bow hvz
|
||||
lksibxk lefzh lksibxk nkxsi nkxsi pldvhk
|
||||
osjlzns pihvr zpeu zxjgjb xplykfk xplykfk
|
||||
hajmfss cardd kaddjw uicfde taue
|
||||
rgwdjra sgifh ggt mpzx usghkos oob fvzx ghnyxr sblcif
|
||||
dtu gnihpry kjdpiny xvax itmluk fxvgaap bei xuq wzcy rhb hailtgo
|
||||
wwob ueldq ueldq glxc umimwv onu dxhmhis ebottoa lnysfiu
|
||||
zfbyi eyq etaj idpbkf
|
||||
qshcfjb ozzqigv raztm ymcv sgivwoc kightf dcaglk udah fdm
|
||||
jmxr jrcnck enffwfl jycc jmxr cylnigo enffwfl
|
||||
bkslhv tykqw tykqw mbeqrbt tykqw
|
||||
vogf nhqltpt nhqltpt vogf kpc
|
||||
ryayz ddktu rfhkmx xok xninjcm ijcrw fxu
|
||||
cmezfj zaamjrs whlcuoo mug lcaqhkb ymkdci qexa onhgk pgy
|
||||
hcrcok qri fki wbiog ptj pmgtdt
|
||||
xsl mpfxwbz bmzxpwf hrysu bmfxwzp xfja
|
||||
gybzho ktokndy rzkbr jcnp ahicq weccg pgrodkt che vaglyn omhmpo
|
||||
vdv bngjox srs faymg xrmf enseu aygfm gvsd
|
||||
nuzi xodkbag eevovl bfjuv nuzi xmejqn
|
||||
kcswegw bpa dgil insf insf
|
||||
stg tklrut poi knurfpf
|
||||
pcs dgirfie yep lvkfk ype hntt athvad clfybsq ofjhegj epy qwawns
|
||||
wjtpgd wjtpgd vxnapp mwyfsm vxnapp rvcswcs jksa
|
||||
ckzslrg wdzeimw cqhp nfgk zgukvd yyt tra erkx wdzeimw
|
||||
hsww avl vkmzej hsww
|
||||
mum oczj jfew rag zjoc wjfe yqynjqt cbkcsgo mri
|
||||
vjhfqdi vjhfqdi npfa pzdmy utlyw bwvbfm nqdv iiap ygpky bwvbfm eocya
|
||||
ewkqi ckb yviuro mqz vtrdam yzkqzv ppbj lhmj blkafo juxvwke lvewc
|
||||
ljrewgx sutnb hfsavbu jofr ltml mjzkzz nmjii sutnb eonegt
|
||||
cxzv nepyrb wmejdo vwqi aeqys
|
||||
sbx fmne obzdz rdnfb gmb sbx ykcae hbzom ncwju rhpiao obzdz
|
||||
lsgfun cbmfjwk fya ktzxbwt
|
||||
ica bpsk bwjwkp obloxdx uwoqdo bnnhjuc tlsx qtaacp bdooxxl jamy ade
|
||||
psus wmtkg ikvfx fkvesj upqlhfs ueje nyt abxvo
|
||||
adlbl hzskbrp ooht nps
|
||||
wtcgnvy nvqtvx tvgnycw ntvcygw kkxcp zyjmpbh
|
||||
xfxww xsddqe ewvmgw qxqwy wpabtz ppe zuiw zubcc onaqii
|
||||
kkaeec xhcakul wrrvi dtlqfy ahqdilw bnt gwimw espaivx nam yfv
|
||||
lxz jtc nkwgz nbgsao olsck emtltf xidwcvm lcjxq
|
||||
eav dzh hnbp hnbp yeg
|
||||
egaq yvat kavsige csar zsi sptai
|
||||
pofijc ibdnoe caoazp azlnjk dqp chik lowll iby gpvjv ohm
|
||||
ors lexk zcneaj rmesx jman uqkb kvkq zfufmn
|
||||
qgsyzxd hlm juerg ortfzw hxjzg
|
||||
fxwy lcoc fyxw pzhynp yfn zdzrz
|
||||
datmws ckwghgr gbtyf lqrpfgl mbgpd dyjilr fgybt hxpg
|
||||
mxw facxdnu wxm urltwtf qfo wtpwrj
|
||||
esa srypq jauwv dpm wdgqq hrke icvudq bdmubb ellhfjh ttpjjd gxmg
|
||||
gvwvqwj cbzzuvj eckube adqinpa djutlue wcpw vrt ucqwu ekruwsn
|
||||
fhj fst zmtb yhwk dxlbozs fcb vjvuxin dxlbozs rixdvu
|
||||
egfoep cvq icd prwj icyg
|
||||
aojaa ezmcuf udreyi bja cyrtpl wjl
|
||||
gjeka bsbufp tbqqq vbmnqg sfqtgac odhq xzsxt
|
||||
yse gujdr ugjdr sye
|
||||
tax hntqw phf eixjwfh qkylnu nkyuql ugsuj
|
||||
wyh egum zizhfc jrq htbyug lop dsu
|
||||
exh vfdoosj ajrna jbiaz lqsgvks xklqgjv abtmdud
|
||||
juqc ormfa sab tucsfln detqfo feg kifsion juqc ovhra
|
||||
hvcrh oddhme omzmu vmy she xulvfa fecmgi
|
||||
ayo gspge nkmy yblsj lrsre nkmy pwocjz gdexqqx ovovm
|
||||
acy sqcz ijl htt yjsi rly vea bck
|
||||
bniafe yore xnh rkcfd hxfuzw xlr nkzmmcs ekwggiu kgoboi wfuzxh hwfxuz
|
||||
weq crkeq cccphe dtozviy kzkkdr yku cephcc ctq zbau dewpi
|
||||
vfla rzpl bnmx uvggon foivrb fval
|
||||
ziaove lawkpdn ddwl sxj krroj rqmffxv babb
|
||||
bdw dsifr kuueet hugddwt piz dwb sjixveg kmsoknq
|
||||
czl feyxf soyvbj tnmpjn kklwi akx nqepntc
|
||||
nrmhc tkkn jrxgc jrxgc tkkn
|
||||
ufzn mrhiapi qrme kjlf qrme xpp qrme loyzizz xqm coli
|
||||
qvaoye mysv ydfxr iixrw
|
||||
dql tqarux fxqfn haoinu lyati xml
|
||||
kyve obatly dgfjt fjz sqrz xlbst lgwlt zovih aepy otrpl oifid
|
||||
ymawam afgye lcnpkmv feilfws vonseh rxrdco
|
||||
tqij kuawg dmova slds imdtb sjsafo ffkzzl pxxenva wuakg efbgx
|
||||
yrwoaos vpw ijjpua jnbxl sev yvgdxzr mpqa vpe lboh sev
|
||||
krwdtd uglxtcz mljcgdk lqj fgpfle nuui cqk exr nuu oyn
|
||||
dwd nwt idhclm vgkh rpubq wybhapp
|
||||
hskhgpy gzvz jztbr jwv vcx vdjmnjr jrsp
|
||||
ikml ceuhcng biu zoo gra bnnforx abzan hwsmd lmki tsl yvogo
|
||||
kqfc younaz azvgfz gesajr tmwxvyb vmcdu dclwh rfjwhic slfym
|
||||
pbrhjml rsacryg jga qvgks neh fcq qmi mwb juezk mjteeg alkb
|
||||
pcj ujstl fkrqm eeczrle hbkcvm upbo mrb qrspjt
|
||||
jbq rrk xjl rgokbnx hor ogg szxqu hysy vqj piorq wtrtrdk
|
||||
bnq ntvhcrf vrm puer kde xaxkja sfxgjf
|
||||
pgcicus hqeqkkx xqekqhk qqkxhke
|
||||
puquxi hmeaehh oxe tasipw qzyg hyvy wcmpwe
|
||||
hvs fxq wvfy zjepsl dvrfxnc xnvg
|
||||
xle crcuc qkhnv crcuc oedez bjw pmwq
|
||||
xzzpiy cjwss jwscs apb bpa
|
||||
ydjhhf yeltadb lwi cjdcb ovaox xrdm vkxub
|
||||
zax xza admbc lvpzfeh auxn rwasj
|
||||
kebx eild nrskdr meja jxczomh gcne
|
36
2017/05/day5.hs
Normal file
36
2017/05/day5.hs
Normal file
|
@ -0,0 +1,36 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.14 script
|
||||
|
||||
jump :: Int -> [Int] -> [Int] -> Maybe ([Int], [Int])
|
||||
jump n back front =
|
||||
if n == 0 then
|
||||
Just (back, front)
|
||||
else if n > 0 then
|
||||
case front of
|
||||
[] -> Nothing
|
||||
x:xs -> jump (n-1) (x:back) xs
|
||||
else
|
||||
case back of
|
||||
[] -> Nothing
|
||||
x:xs -> jump (n+1) xs (x:front)
|
||||
|
||||
countJumps :: Int -> [Int] -> [Int] -> Int
|
||||
countJumps count back [] = count
|
||||
countJumps count back (x:xs) =
|
||||
case jump x back ((x+1):xs) of
|
||||
Nothing -> count + 1
|
||||
Just (back', front') -> countJumps (count+1) back' front'
|
||||
|
||||
countJumps2 :: Int -> [Int] -> [Int] -> Int
|
||||
countJumps2 count back [] = count
|
||||
countJumps2 count back (x:xs) =
|
||||
case jump x back (newx:xs) of
|
||||
Nothing -> count + 1
|
||||
Just (back', front') -> countJumps2 (count+1) back' front'
|
||||
where newx = if x >= 3 then x-1 else x+1
|
||||
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
front <- map read <$> lines <$> getContents
|
||||
putStrLn . show $ countJumps2 0 [] front
|
1003
2017/05/input.txt
Normal file
1003
2017/05/input.txt
Normal file
File diff suppressed because it is too large
Load diff
35
2017/06/day6.hs
Normal file
35
2017/06/day6.hs
Normal file
|
@ -0,0 +1,35 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.14 script
|
||||
|
||||
import Data.List
|
||||
|
||||
distribute :: Int -> Int -> [Int]
|
||||
distribute _ 0 = []
|
||||
distribute n len =
|
||||
map (+1) (take k baselist) ++ (drop k baselist)
|
||||
where baselist = replicate len (n `div` len)
|
||||
k = n `mod` len
|
||||
|
||||
redistribute :: [Int] -> [Int]
|
||||
redistribute xs =
|
||||
zipWith (+) d xs'
|
||||
where n = maximum xs
|
||||
(a,_:b) = span (< n) xs
|
||||
xs' = a ++ (0:b)
|
||||
d = let l = distribute n (length xs)
|
||||
k = length xs - length a - 1
|
||||
in (drop k l) ++ (take k l)
|
||||
|
||||
findCycle :: [Int] -> (Int, Int)
|
||||
findCycle xs =
|
||||
aux 0 [] xs
|
||||
where aux k acc xs =
|
||||
case elemIndex xs' acc of
|
||||
Nothing -> aux (k+1) (xs':acc) xs'
|
||||
Just i -> (k+1, i + 1)
|
||||
where xs' = redistribute xs
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
xs <- map read . words <$> getLine
|
||||
putStrLn . show $ findCycle xs
|
1
2017/06/input.txt
Normal file
1
2017/06/input.txt
Normal file
|
@ -0,0 +1 @@
|
|||
5 1 10 0 1 7 13 14 3 12 8 10 7 12 0 6
|
60
2017/07/day7.hs
Normal file
60
2017/07/day7.hs
Normal file
|
@ -0,0 +1,60 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.14 script
|
||||
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Data.Attoparsec.Text
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
import Data.List
|
||||
import Data.Maybe
|
||||
|
||||
data Program = Program
|
||||
{ programName :: Text
|
||||
, programWeight :: Int
|
||||
, programChildren :: [Text]
|
||||
} deriving (Show, Eq)
|
||||
|
||||
parseProgram :: Parser Program
|
||||
parseProgram = do
|
||||
name <- many1 letter
|
||||
skipSpace
|
||||
char '('
|
||||
weight <- decimal
|
||||
char ')'
|
||||
option "" $ count 4 anyChar
|
||||
children <- many' (option "" (string ", ") *> many1 letter)
|
||||
return $ Program (T.pack name) weight (map T.pack children)
|
||||
|
||||
findRoots :: [Program] -> [Program]
|
||||
findRoots xs =
|
||||
filter (\x -> programName x `notElem` l) xs
|
||||
where l = concat $ map programChildren xs
|
||||
|
||||
totalWeight :: [Program] -> Program -> Int
|
||||
totalWeight _ (Program _ w []) = w
|
||||
totalWeight xs (Program _ w cs) =
|
||||
w + (sum $ totalWeight xs <$> (filter (\x -> programName x `elem` cs) xs))
|
||||
|
||||
childrenWeights :: [Program] -> Program -> [Int]
|
||||
childrenWeights xs (Program _ _ children) =
|
||||
totalWeight xs <$> (filter (\x -> programName x `elem` children) xs)
|
||||
|
||||
isUnbalanced :: [Int] -> Bool
|
||||
isUnbalanced [] = False
|
||||
isUnbalanced weights =
|
||||
not . and $ map (== head weights) (tail weights)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
contents <- T.lines . T.pack <$> getContents
|
||||
let programs = map (parseOnly parseProgram) contents
|
||||
--mapM_ (mapM_ (putStrLn . show)) $ programs
|
||||
putStrLn "Root: "
|
||||
mapM_ (mapM_ (putStrLn . show)) $ findRoots <$> sequence programs
|
||||
putStrLn "Unbalanced: "
|
||||
let Right programs' = sequence programs
|
||||
let weights = zip programs' $ childrenWeights programs' <$> programs'
|
||||
let unbalanced = filter (isUnbalanced . snd) weights
|
||||
mapM_ (putStrLn . show) unbalanced
|
||||
|
1241
2017/07/input.txt
Normal file
1241
2017/07/input.txt
Normal file
File diff suppressed because it is too large
Load diff
13
2017/07/test.txt
Normal file
13
2017/07/test.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
pbga (66)
|
||||
xhth (57)
|
||||
ebii (61)
|
||||
havc (66)
|
||||
ktlj (57)
|
||||
fwft (72) -> ktlj, cntj, xhth
|
||||
qoyq (66)
|
||||
padx (45) -> pbga, havc, qoyq
|
||||
tknk (41) -> ugml, padx, fwft
|
||||
jptl (61)
|
||||
ugml (68) -> gyxo, ebii, jptl
|
||||
gyxo (61)
|
||||
cntj (57)
|
85
2017/08/day8.hs
Normal file
85
2017/08/day8.hs
Normal file
|
@ -0,0 +1,85 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.17 script
|
||||
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Data.Attoparsec.Text
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
import qualified Data.Map.Strict as Map
|
||||
import Control.Applicative
|
||||
import Data.List
|
||||
|
||||
type Register = Text
|
||||
|
||||
data Order = L | LEQ | EEQ | GEQ | G | NEQ
|
||||
deriving (Show, Eq)
|
||||
|
||||
data Operation = Inc | Dec
|
||||
deriving (Show, Eq)
|
||||
|
||||
data Instruction = Instruction
|
||||
{ register :: Register
|
||||
, op :: Operation
|
||||
, value :: Int
|
||||
, condition :: (Register, Order, Int)
|
||||
} deriving (Show, Eq)
|
||||
|
||||
parseOperation :: Parser Operation
|
||||
parseOperation =
|
||||
(string "inc" >> return Inc) <|> (string "dec" >> return Dec)
|
||||
|
||||
parseOrder :: Parser Order
|
||||
parseOrder =
|
||||
(string ">=" >> return GEQ)
|
||||
<|> (string ">" >> return G)
|
||||
<|> (string "<=" >> return LEQ)
|
||||
<|> (string "<" >> return L)
|
||||
<|> (string "==" >> return EEQ)
|
||||
<|> (string "!=" >> return NEQ)
|
||||
|
||||
parseInstruction :: Parser Instruction
|
||||
parseInstruction = do
|
||||
reg <- many1 letter
|
||||
skipSpace
|
||||
op <- parseOperation
|
||||
skipSpace
|
||||
val <- signed decimal
|
||||
skipSpace
|
||||
string "if"
|
||||
skipSpace
|
||||
condReg <- many1 letter
|
||||
skipSpace
|
||||
condOrd <- parseOrder
|
||||
skipSpace
|
||||
condVal <- signed decimal
|
||||
return $ Instruction (T.pack reg) op val ((T.pack condReg), condOrd, condVal)
|
||||
|
||||
executeInstruction :: Map.Map Register Int -> Instruction -> Map.Map Register Int
|
||||
executeInstruction map i =
|
||||
if cond then
|
||||
case op i of
|
||||
Inc -> Map.insertWith (+) (register i) (value i) map
|
||||
Dec -> Map.insertWith (+) (register i) (-(value i)) map
|
||||
else map
|
||||
where (condReg, condOrd, condVal) = condition i
|
||||
curCondVal = Map.findWithDefault 0 condReg map
|
||||
cond = case condOrd of
|
||||
L -> curCondVal < condVal
|
||||
LEQ -> curCondVal <= condVal
|
||||
EEQ -> curCondVal == condVal
|
||||
GEQ -> curCondVal >= condVal
|
||||
G -> curCondVal > condVal
|
||||
NEQ -> curCondVal /= condVal
|
||||
|
||||
executeInstructions :: [Instruction] -> [Map.Map Register Int]
|
||||
executeInstructions = scanl' executeInstruction Map.empty
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
contents <- T.lines . T.pack <$> getContents
|
||||
let Right instructions = sequence $ parseOnly parseInstruction <$> contents
|
||||
--mapM_ (putStrLn . show) instructions
|
||||
let maps = executeInstructions instructions
|
||||
putStrLn . show . maximum . Map.elems . last $ maps
|
||||
putStrLn . show . maximum . concat $ Map.elems <$> maps
|
1000
2017/08/input.txt
Normal file
1000
2017/08/input.txt
Normal file
File diff suppressed because it is too large
Load diff
4
2017/08/test.txt
Normal file
4
2017/08/test.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
b inc 5 if a > 1
|
||||
a inc 1 if b < 5
|
||||
c dec -10 if a >= 1
|
||||
c inc -20 if c == 10
|
38
2017/09/day9.hs
Normal file
38
2017/09/day9.hs
Normal file
|
@ -0,0 +1,38 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.17 script
|
||||
|
||||
import Data.List
|
||||
|
||||
data Stream = Stream
|
||||
{ depth :: Int
|
||||
, score :: Int
|
||||
, ignoreNextChar :: Bool
|
||||
, garbage :: Bool
|
||||
, countGarbage :: Int
|
||||
} deriving (Show, Eq)
|
||||
|
||||
processChar :: Stream -> Char -> Stream
|
||||
processChar stream c =
|
||||
if ignoreNextChar stream then
|
||||
stream { ignoreNextChar = False }
|
||||
else if garbage stream then
|
||||
case c of
|
||||
'!' -> stream { ignoreNextChar = True }
|
||||
'>' -> stream { garbage = False }
|
||||
_ -> stream { countGarbage = countGarbage stream + 1 }
|
||||
else if c == '}' then
|
||||
stream { depth = depth stream - 1, score = score stream + depth stream }
|
||||
else if c == '{' then
|
||||
stream { depth = depth stream + 1 }
|
||||
else if c == '<' then
|
||||
stream { garbage = True }
|
||||
else stream
|
||||
|
||||
processStream :: String -> Stream
|
||||
processStream = foldl' processChar (Stream 0 0 False False 0)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
stream <- processStream <$> getContents
|
||||
putStrLn . show $ score stream
|
||||
putStrLn . show $ countGarbage stream
|
1
2017/09/input.txt
Normal file
1
2017/09/input.txt
Normal file
File diff suppressed because one or more lines are too long
41
2017/10/day10.hs
Normal file
41
2017/10/day10.hs
Normal file
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.17 script
|
||||
|
||||
import Data.List
|
||||
import Data.List.Split
|
||||
import Data.Char
|
||||
import Data.Bits
|
||||
import Text.Printf
|
||||
|
||||
twist :: [Int] -> Int -> Int -> [Int]
|
||||
twist xs len skip =
|
||||
end ++ start
|
||||
where (knot, keep) = splitAt len xs
|
||||
(start, end) = splitAt skip $ keep ++ reverse knot
|
||||
|
||||
twists :: [Int] -> [Int] -> Int -> [Int]
|
||||
twists list [] k = list
|
||||
twists list (x:xs) k = twists (twist list x k) xs (k+1)
|
||||
|
||||
hashRound :: Int -> [Int] -> [Int]
|
||||
hashRound n lens = (drop rot list) ++ (take rot list)
|
||||
where list = foldl' (\acc (x,k) -> twist acc x k) [0..(n-1)] $ zip lens (cycle [0..(n-1)])
|
||||
rot = n - (sum (zipWith (+) [0..] lens) `rem` n)
|
||||
|
||||
sparseHash :: [Int] -> [Int]
|
||||
sparseHash lengths =
|
||||
hashRound 256 . concat . replicate 64 $ lengths ++ [17, 31, 73, 47, 23]
|
||||
|
||||
denseHash :: [Int] -> [Int]
|
||||
denseHash h = foldr xor 0 <$> chunksOf 16 h
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
line <- getLine
|
||||
let lengths = map read . splitOn "," $ line
|
||||
-- let a:b:_ = hashRound 5 [3,4,1,5]
|
||||
-- putStrLn . show $ a*b
|
||||
let a:b:_ = hashRound 256 lengths
|
||||
putStrLn . show $ a*b
|
||||
let h = denseHash . sparseHash . map ord $ line
|
||||
putStrLn . concat . map (printf "%02x") $ h
|
1
2017/10/input.txt
Normal file
1
2017/10/input.txt
Normal file
|
@ -0,0 +1 @@
|
|||
192,69,168,160,78,1,166,28,0,83,198,2,254,255,41,12
|
56
2017/11/day11.hs
Normal file
56
2017/11/day11.hs
Normal file
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.17 script
|
||||
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Data.Attoparsec.Text
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
import Control.Applicative
|
||||
import Data.List
|
||||
|
||||
data Direction = N | NE | NW | S | SE | SW
|
||||
deriving (Eq, Show)
|
||||
|
||||
type Path = [Direction]
|
||||
|
||||
type Coord = (Int, Int, Int)
|
||||
|
||||
parseDirection :: Parser Direction
|
||||
parseDirection =
|
||||
(string "ne" >> return NE)
|
||||
<|> (string "nw" >> return NW)
|
||||
<|> (string "se" >> return SE)
|
||||
<|> (string "sw" >> return SW)
|
||||
<|> (string "n" >> return N)
|
||||
<|> (string "s" >> return S)
|
||||
|
||||
parsePath :: Parser Path
|
||||
parsePath = do
|
||||
path <- many' (option "" (string ",") *> parseDirection)
|
||||
return path
|
||||
|
||||
step :: Coord -> Direction -> Coord
|
||||
step (x,y,z) dir = case dir of
|
||||
N -> (x, y+1, z-1)
|
||||
NE -> (x+1, y, z-1)
|
||||
NW -> (x-1, y+1, z)
|
||||
S -> (x, y-1, z+1)
|
||||
SE -> (x+1, y-1, z)
|
||||
SW -> (x-1, y, z+1)
|
||||
|
||||
finalCoord :: Path -> Coord
|
||||
finalCoord = foldl' step (0,0,0)
|
||||
|
||||
allSteps :: Path -> [Coord]
|
||||
allSteps = scanl' step (0,0,0)
|
||||
|
||||
distance :: Coord -> Int
|
||||
distance (x,y,z) = maximum $ map abs [x,y,z]
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
Right path <- parseOnly parsePath . T.pack <$> getLine
|
||||
--putStrLn . show $ path
|
||||
putStrLn . show . distance .finalCoord $ path
|
||||
putStrLn . show . maximum . map distance . allSteps $ path
|
1
2017/11/input.txt
Normal file
1
2017/11/input.txt
Normal file
File diff suppressed because one or more lines are too long
39
2017/12/day12.hs
Normal file
39
2017/12/day12.hs
Normal file
|
@ -0,0 +1,39 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.18 script
|
||||
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Data.Attoparsec.Text
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
import Control.Applicative
|
||||
import Data.List
|
||||
|
||||
parseAdjacencyList :: Parser (Int, [Int])
|
||||
parseAdjacencyList = do
|
||||
node <- decimal
|
||||
skipSpace
|
||||
string "<->"
|
||||
skipSpace
|
||||
neighbours <- many1 (option "" (string ", ") *> decimal)
|
||||
return (node, neighbours)
|
||||
|
||||
dfs :: [(Int, [Int])] -> [Int] -> Int -> [Int]
|
||||
dfs graph visited vertex =
|
||||
case lookup vertex graph of
|
||||
Nothing -> vertex : visited
|
||||
Just neighbours -> concat $ map f neighbours
|
||||
where f n = if n `elem` visited then visited
|
||||
else dfs graph (neighbours ++ visited) n
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
contents <- T.lines . T.pack <$> getContents
|
||||
let Right graph = sequence $ parseOnly parseAdjacencyList <$> contents
|
||||
-- mapM_ (putStrLn . show) graph
|
||||
let cc0 = nub $ dfs graph [] 0
|
||||
-- putStrLn . show $ cc0
|
||||
putStrLn . show . length $ cc0
|
||||
let ccs = nub $ map (sort . nub . dfs graph []) (map fst graph)
|
||||
-- putStrLn . show $ ccs
|
||||
putStrLn . show . length $ ccs
|
2000
2017/12/input.txt
Normal file
2000
2017/12/input.txt
Normal file
File diff suppressed because it is too large
Load diff
7
2017/12/test.txt
Normal file
7
2017/12/test.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
0 <-> 2
|
||||
1 <-> 1
|
||||
2 <-> 0, 3, 4
|
||||
3 <-> 2, 4
|
||||
4 <-> 2, 3, 6
|
||||
5 <-> 6
|
||||
6 <-> 4, 5
|
31
2017/13/day13.hs
Normal file
31
2017/13/day13.hs
Normal file
|
@ -0,0 +1,31 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.18 script --package ghc --package text
|
||||
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
import Util (filterByList)
|
||||
import Data.List
|
||||
|
||||
caught :: [Int] -> [Int] -> [Bool]
|
||||
caught = zipWith (\d k -> d `rem` (2*(k-1)) == 0)
|
||||
|
||||
severity :: [Int] -> [Int] -> [Bool] -> Int
|
||||
severity depths ranges catches =
|
||||
sum $ zipWith (*) depths' ranges'
|
||||
where depths' = filterByList catches depths
|
||||
ranges' = filterByList catches ranges
|
||||
|
||||
findDelay :: Int -> [Int] -> [Int] -> Int
|
||||
findDelay dt depths ranges =
|
||||
if not . or $ caught (map (+dt) depths) ranges then
|
||||
dt
|
||||
else findDelay (dt+1) depths ranges
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
contents <- T.lines . T.pack <$> getContents
|
||||
let depths:ranges:_ = transpose $ map (read . T.unpack) . T.splitOn ": " <$> contents
|
||||
putStrLn . show $ severity depths ranges (caught depths ranges)
|
||||
putStrLn . show $ findDelay 0 depths ranges
|
||||
|
43
2017/13/input.txt
Normal file
43
2017/13/input.txt
Normal file
|
@ -0,0 +1,43 @@
|
|||
0: 3
|
||||
1: 2
|
||||
2: 4
|
||||
4: 4
|
||||
6: 5
|
||||
8: 6
|
||||
10: 6
|
||||
12: 8
|
||||
14: 6
|
||||
16: 6
|
||||
18: 9
|
||||
20: 8
|
||||
22: 8
|
||||
24: 8
|
||||
26: 12
|
||||
28: 8
|
||||
30: 12
|
||||
32: 12
|
||||
34: 12
|
||||
36: 10
|
||||
38: 14
|
||||
40: 12
|
||||
42: 10
|
||||
44: 8
|
||||
46: 12
|
||||
48: 14
|
||||
50: 12
|
||||
52: 14
|
||||
54: 14
|
||||
56: 14
|
||||
58: 12
|
||||
62: 14
|
||||
64: 12
|
||||
66: 12
|
||||
68: 14
|
||||
70: 14
|
||||
72: 14
|
||||
74: 17
|
||||
76: 14
|
||||
78: 18
|
||||
84: 14
|
||||
90: 20
|
||||
92: 14
|
41
2017/14/day14.hs
Normal file
41
2017/14/day14.hs
Normal file
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.18 script
|
||||
|
||||
import Data.List
|
||||
import Data.List.Split
|
||||
import Data.Char
|
||||
import Data.Bits
|
||||
import Text.Printf
|
||||
|
||||
twist :: [Int] -> Int -> Int -> [Int]
|
||||
twist xs len skip =
|
||||
end ++ start
|
||||
where (knot, keep) = splitAt len xs
|
||||
(start, end) = splitAt skip $ keep ++ reverse knot
|
||||
|
||||
twists :: [Int] -> [Int] -> Int -> [Int]
|
||||
twists list [] k = list
|
||||
twists list (x:xs) k = twists (twist list x k) xs (k+1)
|
||||
|
||||
hashRound :: Int -> [Int] -> [Int]
|
||||
hashRound n lens = drop rot list ++ take rot list
|
||||
where list = foldl' (\acc (x,k) -> twist acc x k) [0..(n-1)] $ zip lens (cycle [0..(n-1)])
|
||||
rot = n - (sum (zipWith (+) [0..] lens) `rem` n)
|
||||
|
||||
sparseHash :: [Int] -> [Int]
|
||||
sparseHash lengths =
|
||||
hashRound 256 . concat . replicate 64 $ lengths ++ [17, 31, 73, 47, 23]
|
||||
|
||||
denseHash :: [Int] -> [Int]
|
||||
denseHash h = foldr xor 0 <$> chunksOf 16 h
|
||||
|
||||
grid :: String -> [[Int]]
|
||||
grid input =
|
||||
map (denseHash . sparseHash . map ord . ((input++"-")++) . show) [0..127]
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
let input = "stpzcrnm"
|
||||
let g = grid input
|
||||
mapM_ (putStrLn . concatMap (printf "%08b")) g
|
||||
print . length . filter (=='1') . concat $ map (concatMap (printf "%08b")) g
|
29
2017/15/day15.hs
Normal file
29
2017/15/day15.hs
Normal file
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.18 script
|
||||
|
||||
import Data.Bits
|
||||
import Data.List
|
||||
|
||||
genA :: Integral a => a -> a
|
||||
genA n = (16807 * n) `rem` 2147483647
|
||||
|
||||
genB :: Integral a => a -> a
|
||||
genB n = (48271 * n) `rem` 2147483647
|
||||
|
||||
matchLowest16Bits :: (Bits a, Num a) => a -> a -> Bool
|
||||
matchLowest16Bits n1 n2 =
|
||||
n1 .&. 0xFFFF == n2 .&. 0xFFFF
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
let (inputA, inputB) = (783, 325) :: (Int, Int)
|
||||
let n = 40000000
|
||||
let seqA = take n $ iterate genA inputA
|
||||
let seqB = take n $ iterate genB inputB
|
||||
print . foldl' (flip ((+) . fromEnum)) 0 $ zipWith matchLowest16Bits seqA seqB
|
||||
let n' = 5000000
|
||||
let seqA' = take n' . filter (\k -> k `rem` 4 == 0)
|
||||
$ iterate genA inputA
|
||||
let seqB' = take n' . filter (\k -> k `rem` 8 == 0)
|
||||
$ iterate genB inputB
|
||||
print . foldl' (flip ((+) . fromEnum)) 0 $ zipWith matchLowest16Bits seqA' seqB'
|
112
2017/16/day16.hs
Normal file
112
2017/16/day16.hs
Normal file
|
@ -0,0 +1,112 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.18 script
|
||||
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
import Data.Attoparsec.Text
|
||||
import Control.Applicative
|
||||
import Data.List
|
||||
import Data.Maybe
|
||||
import Data.Monoid
|
||||
|
||||
data Move = Spin Int | Exchange Int Int | Partner Char Char
|
||||
deriving (Eq, Show)
|
||||
|
||||
isPartner :: Move -> Bool
|
||||
isPartner (Partner _ _) = True
|
||||
isPartner _ = False
|
||||
|
||||
parseSpin :: Parser Move
|
||||
parseSpin = string "s" *> decimal >>= return . Spin
|
||||
|
||||
parseExchange :: Parser Move
|
||||
parseExchange = do
|
||||
string "x"
|
||||
a <- decimal
|
||||
string "/"
|
||||
b <- decimal
|
||||
return $ Exchange a b
|
||||
|
||||
parsePartner :: Parser Move
|
||||
parsePartner = do
|
||||
string "p"
|
||||
a <- letter
|
||||
string "/"
|
||||
b <- letter
|
||||
return $ Partner a b
|
||||
|
||||
parseMove :: Parser Move
|
||||
parseMove = parseSpin <|> parseExchange <|> parsePartner
|
||||
|
||||
parseMoves :: Parser [Move]
|
||||
parseMoves = parseMove `sepBy` (skipSpace *> string "," *> skipSpace)
|
||||
|
||||
spin :: Int -> [a] -> [a]
|
||||
spin n xs = end ++ start
|
||||
where (start, end) = splitAt (length xs - n) xs
|
||||
|
||||
exchange :: Int -> Int -> [a] -> [a]
|
||||
exchange m n xs
|
||||
| m == n = xs
|
||||
| m > n = exchange n m xs
|
||||
| otherwise = start ++ b:as ++ a:bs
|
||||
where (start, end) = splitAt m xs
|
||||
(a:as, b:bs) = splitAt (n-m) end
|
||||
|
||||
partner :: Eq t => t -> t -> [t] -> [t]
|
||||
partner a b xs = exchange m n xs
|
||||
where Just m = elemIndex a xs
|
||||
Just n = elemIndex b xs
|
||||
|
||||
move :: [Char] -> Move -> [Char]
|
||||
move xs (Spin n) = spin n xs
|
||||
move xs (Exchange m n) = exchange m n xs
|
||||
move xs (Partner a b) = partner a b xs
|
||||
|
||||
findRepetition :: Eq a => [a] -> Maybe Int
|
||||
findRepetition [] = Nothing
|
||||
findRepetition (x:xs) = case elemIndices x xs of
|
||||
[] -> Nothing
|
||||
inds -> Just $ last inds
|
||||
|
||||
moveMany 0 _ xs _ = xs
|
||||
moveMany n seen xs (m:ms) =
|
||||
if xs `elem` seen
|
||||
then concat $ intersperse "\n" seen-- !! (length seen - n `rem` length seen)
|
||||
else let xs' = move xs m in
|
||||
moveMany (n-1) (xs:seen) xs' ms
|
||||
|
||||
newtype Perm16 = Perm16 [Int]
|
||||
deriving (Show, Eq)
|
||||
|
||||
toPermutation :: Move -> Perm16
|
||||
toPermutation (Spin n) = Perm16 $ spin n [0..15]
|
||||
toPermutation (Exchange m n) = Perm16 $ exchange m n [0..15]
|
||||
toPermutation (Partner _ _) = Perm16 [0..15]
|
||||
|
||||
instance Monoid Perm16 where
|
||||
mempty = Perm16 [0..15]
|
||||
mappend (Perm16 p1) (Perm16 p2) = Perm16 $ map (p1 !!) p2
|
||||
|
||||
applyPerm :: [b] -> Perm16 -> [b]
|
||||
applyPerm xs (Perm16 p) = map (xs !!) p
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
contents <- T.pack <$> getContents
|
||||
let Right moves = parseOnly parseMoves contents
|
||||
let start = ['a'..'p']
|
||||
let partnerMoves = filter isPartner moves
|
||||
-- print (length moves)
|
||||
let positions = scanl' move start . concat $ replicate 1 moves
|
||||
putStrLn $ last positions
|
||||
let dance = mconcat . map toPermutation $ moves
|
||||
putStrLn $ foldl' move (applyPerm start dance) partnerMoves
|
||||
let thousanddance = iterate (<> dance) dance !! 1000
|
||||
let milliondance = iterate (<> thousanddance) thousanddance !! 1000
|
||||
let billiondance = iterate (<> milliondance) milliondance !! 1000
|
||||
print billiondance
|
||||
let billionPartnerMoves = concat $ replicate 1000000000 partnerMoves
|
||||
putStrLn $ foldl' move (applyPerm start billiondance) billionPartnerMoves
|
1
2017/16/input.txt
Normal file
1
2017/16/input.txt
Normal file
File diff suppressed because one or more lines are too long
26
2017/17/day17.hs
Normal file
26
2017/17/day17.hs
Normal file
|
@ -0,0 +1,26 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.18 script
|
||||
|
||||
{-# LANGUAGE BangPatterns #-}
|
||||
|
||||
import Data.List
|
||||
|
||||
rotate :: Int -> [a] -> [a]
|
||||
rotate n xs = take (length xs) (drop n (cycle xs))
|
||||
|
||||
spinlock :: (Num a, Enum a) => a -> Int -> [a] -> [a]
|
||||
spinlock n steps buf = foldl' f buf [1..n]
|
||||
where f !curbuf !i = let !newbuf = rotate (steps+1) curbuf in i:newbuf
|
||||
|
||||
valueAfter :: Eq t => t -> [t] -> t
|
||||
valueAfter n buf = buf !! ((i + 1) `rem` length buf)
|
||||
where Just i = elemIndex n buf
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
let input = 312
|
||||
n = 2017
|
||||
start = [0]
|
||||
print $ valueAfter n $ spinlock n input start
|
||||
-- let n = 50000000
|
||||
-- print $ valueAfter 0 $ spinlock n input start
|
25
2017/17/day17.scm
Normal file
25
2017/17/day17.scm
Normal file
|
@ -0,0 +1,25 @@
|
|||
;; $ csc day17.scm -o day17 -O5
|
||||
;; $ ./day17 -:hm8g
|
||||
|
||||
(use srfi-1)
|
||||
(declare (fixnum))
|
||||
|
||||
(define (prepend! x list)
|
||||
(set-cdr! list (cons (car list) (cdr list)))
|
||||
(set-car! list x))
|
||||
|
||||
(define (spin steps n after)
|
||||
(let ((buffer (circular-list 0)))
|
||||
(do ((i 1 (+ i 1)))
|
||||
((> i n) (cadr (member after buffer)))
|
||||
(let ((new (drop buffer (+ steps 1))))
|
||||
(prepend! i new)
|
||||
(set! buffer new)))))
|
||||
|
||||
(write (spin 3 2017 2017))
|
||||
(newline)
|
||||
(write (spin 312 2017 2017))
|
||||
(newline)
|
||||
(write (spin 312 50000000 0))
|
||||
(newline)
|
||||
|
70
2017/20/day20.hs
Normal file
70
2017/20/day20.hs
Normal file
|
@ -0,0 +1,70 @@
|
|||
#!/usr/bin/env stack
|
||||
-- stack --resolver lts-9.20 script
|
||||
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
import Data.Attoparsec.Text hiding (take)
|
||||
import Data.Text (Text)
|
||||
import qualified Data.Text as T
|
||||
import Data.List (minimumBy, (\\))
|
||||
import Data.Function (on)
|
||||
|
||||
data Point a =
|
||||
Point { position :: (a,a,a)
|
||||
, velocity :: (a,a,a)
|
||||
, acceleration :: (a,a,a)
|
||||
}
|
||||
deriving (Show, Eq)
|
||||
|
||||
parseVector :: Text -> Parser (Int,Int,Int)
|
||||
parseVector id = do
|
||||
string id
|
||||
string "=<"
|
||||
x <- signed decimal
|
||||
string ","
|
||||
y <- signed decimal
|
||||
string ","
|
||||
z <- signed decimal
|
||||
string ">"
|
||||
return (x,y,z)
|
||||
|
||||
parsePoint :: Parser (Point Int)
|
||||
parsePoint = do
|
||||
pos <- parseVector "p"
|
||||
string ","
|
||||
skipSpace
|
||||
vel <- parseVector "v"
|
||||
string ","
|
||||
skipSpace
|
||||
acc <- parseVector "a"
|
||||
return $ Point pos vel acc
|
||||
|
||||
update :: Num a => Point a -> Point a
|
||||
update (Point (posx,posy,posz) (velx,vely,velz) (accx,accy,accz)) =
|
||||
Point (posx',posy',posz') (velx',vely',velz') (accx,accy,accz)
|
||||
where velx' = velx + accx
|
||||
vely' = vely + accy
|
||||
velz' = velz + accz
|
||||
posx' = posx + velx'
|
||||
posy' = posy + vely'
|
||||
posz' = posz + velz'
|
||||
|
||||
removeCollisions :: Eq a => [Point a] -> [Point a]
|
||||
removeCollisions [] = []
|
||||
removeCollisions (p:ps) = case filter (\x -> position x == position p) ps of
|
||||
[] -> p : removeCollisions ps
|
||||
xs -> removeCollisions $ ps \\ xs
|
||||
|
||||
distance :: Num a => Point a -> a
|
||||
distance (Point (x,y,z) _ _) = abs x + abs y + abs z
|
||||
|
||||
closestZero :: [Point Int] -> Integer
|
||||
closestZero = fst . minimumBy (compare `on` (distance . snd)) . zip [0..]
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
contents <- T.lines . T.pack <$> getContents
|
||||
let Right points = mapM (parseOnly parsePoint) contents
|
||||
-- mapM_ print points
|
||||
print . take 1000 . map closestZero $ iterate (map update) points
|
||||
print . take 200 . map length $ iterate (removeCollisions . map update) points
|
1000
2017/20/input.txt
Normal file
1000
2017/20/input.txt
Normal file
File diff suppressed because it is too large
Load diff
3
2017/README.org
Normal file
3
2017/README.org
Normal file
|
@ -0,0 +1,3 @@
|
|||
* Advent of Code 2017
|
||||
|
||||
My answers for [[http://adventofcode.com/2017][Advent of Code 2017]].
|
Loading…
Add table
Add a link
Reference in a new issue