diff --git a/www/internals/adventofcode.php b/www/internals/adventofcode.php index a083848..8fccc9e 100644 --- a/www/internals/adventofcode.php +++ b/www/internals/adventofcode.php @@ -4,6 +4,7 @@ class AdventOfCode { const YEARS = [ + '2017' => [ 'url-aoc'=>'https://adventofcode.com/2017/day/', 'blog-id' => 25, 'github' => 'https://github.com/Mikescher/AdventOfCode2017' ], '2018' => [ 'url-aoc'=>'https://adventofcode.com/2018/day/', 'blog-id' => 23, 'github' => 'https://github.com/Mikescher/AdventOfCode2018' ], '2019' => [ 'url-aoc'=>'https://adventofcode.com/2019/day/', 'blog-id' => 24, 'github' => 'https://github.com/Mikescher/AdventOfCode2019' ], ]; diff --git a/www/statics/aoc/2017/01_challenge.txt b/www/statics/aoc/2017/01_challenge.txt new file mode 100644 index 0000000..d5aa332 --- /dev/null +++ b/www/statics/aoc/2017/01_challenge.txt @@ -0,0 +1,36 @@ +--- Day 1: Inverse Captcha --- + +The night before Christmas, one of Santa's Elves calls you in a panic. "The printer's broken! We can't print the Naughty or Nice List!" By the time you make it to sub-basement 17, there are only a few minutes until midnight. "We have a big problem," she says; "there must be almost fifty bugs in this system, but nothing else can print The List. Stand in this square, quick! There's no time to explain; if you can convince them to pay you in stars, you'll be able to--" She pulls a lever and the world goes blurry. + +When your eyes can focus again, everything seems a lot more pixelated than before. She must have sent you inside the computer! You check the system clock: 25 milliseconds until midnight. With that much time, you should be able to collect all fifty stars by December 25th. + +Collect stars by solving puzzles. Two puzzles will be made available on each day millisecond in the Advent calendar; the second puzzle is unlocked when you complete the first. Each puzzle grants one star. Good luck! + +You're standing in a room with "digitization quarantine" written in LEDs along one wall. The only door is locked, but it includes a small interface. "Restricted Area - Strictly No Digitized Users Allowed." + +It goes on to explain that you may only leave by solving a captcha to prove you're not a human. Apparently, you only get one millisecond to solve the captcha: too fast for a normal human, but it feels like hours to you. + +The captcha requires you to review a sequence of digits (your puzzle input) and find the sum of all digits that match the next digit in the list. The list is circular, so the digit after the last digit is the first digit in the list. + +For example: + + 1122 produces a sum of 3 (1 + 2) because the first digit (1) matches the second digit and the third digit (2) matches the fourth digit. + 1111 produces 4 because each digit (all 1) matches the next. + 1234 produces 0 because no digit matches the next. + 91212129 produces 9 because the only digit that matches the next one is the last digit, 9. + +What is the solution to your captcha? + +--- Part Two --- + +You notice a progress bar that jumps to 50% completion. Apparently, the door isn't yet satisfied, but it did emit a star as encouragement. The instructions change: + +Now, instead of considering the next digit, it wants you to consider the digit halfway around the circular list. That is, if your list contains 10 items, only include a digit in your sum if the digit 10/2 = 5 steps forward matches it. Fortunately, your list has an even number of elements. + +For example: + + 1212 produces 6: the list contains 4 items, and all four digits match the digit 2 items ahead. + 1221 produces 0, because every comparison is between a 1 and a 2. + 123425 produces 4, because both 2s match each other, but no other digit has a match. + 123123 produces 12. + 12131415 produces 4. diff --git a/www/statics/aoc/2017/01_input.txt b/www/statics/aoc/2017/01_input.txt new file mode 100644 index 0000000..eb47f9d --- /dev/null +++ b/www/statics/aoc/2017/01_input.txt @@ -0,0 +1 @@ +8231753674683997878179259195565332579493378483264978184143341284379682788518559178822225126625428318115396632681141871952894291898364781898929292614792884883249356728741993224889167928232261325123447569829932951268292953928766755779761837993812528527484487298117739869189415599461746944992651752768158611996715467871381527675219481185217357632445748912726487669881876129192932995282777848496561259839781188719233951619188388532698519298142112853776942545211859134185231768952888462471642851588368445761489225786919778983848113833773768236969923939838755997989537648222217996381757542964844337285428654375499359997792679256881378967852376848812795761118139288152799921176874256377615952758268844139579622754965461884862647423491918913628848748756595463191585555385849335742224855473769411212376446591654846168189278959857681336724221434846946124915271196433144335482787432683848594487648477532498952572515118864475621828118274911298396748213136426357769991314661642612786847135485969889237193822718111269561741563479116832364485724716242176288642371849569664594194674763319687735723517614962575592111286177553435651952853878775431234327919595595658641534765455489561934548474291254387229751472883423413196845162752716925199866591883313638846474321161569892518574346226751366315311145777448781862222126923449311838564685882695889397531413937666673233451216968414288135984394249684886554812761191289485457945866524228415191549168557957633386991931186773843869999284468773866221976873998168818944399661463963658784821796272987155278195355579386768156718813624559264574836134419725187881514665834441359644955768658663278765363789664721736533517774292478192143934318399418188298753351815388561359528533778996296279366394386455544446922653976725113889842749182361253582433319351193862788433113852782596161148992233558144692913791714859516653421917841295749163469751479835492713392861519993791967927773114713888458982796514977717987598165486967786989991998142488631168697963816156374216224386193941566358543266646516247854435356941566492841213424915682394928959116411457967897614457497279472661229548612777155998358618945222326558176486944695689777438164612198225816646583996426313832539918 \ No newline at end of file diff --git a/www/statics/aoc/2017/01_solution-1.py b/www/statics/aoc/2017/01_solution-1.py new file mode 100644 index 0000000..fc2415e --- /dev/null +++ b/www/statics/aoc/2017/01_solution-1.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python3 + +import aoc + + +rawinput = aoc.read_input(1) + +rawinput = rawinput + rawinput[0] + +digitsum = 0 +for idx in range(1, len(rawinput)): + if rawinput[idx-1] == rawinput[idx]: + digitsum = digitsum + int(rawinput[idx]) + +print(digitsum) diff --git a/www/statics/aoc/2017/01_solution-2.py b/www/statics/aoc/2017/01_solution-2.py new file mode 100644 index 0000000..8f195e6 --- /dev/null +++ b/www/statics/aoc/2017/01_solution-2.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 + +import aoc + + +rawinput = aoc.read_input(1) + +inlen = len(rawinput) +digitsum = 0 +for idx in range(0, inlen): + if rawinput[idx] == rawinput[(idx + inlen//2) % inlen]: + digitsum = digitsum + int(rawinput[idx]) + +print(digitsum) diff --git a/www/statics/aoc/2017/02_challenge.txt b/www/statics/aoc/2017/02_challenge.txt new file mode 100644 index 0000000..a7c01fa --- /dev/null +++ b/www/statics/aoc/2017/02_challenge.txt @@ -0,0 +1,41 @@ +--- Day 2: Corruption Checksum --- + +As you walk through the door, a glowing humanoid shape yells in your direction. "You there! Your state appears to be idle. Come help us repair the corruption in this spreadsheet - if we take another millisecond, we'll have to display an hourglass cursor!" + +The spreadsheet consists of rows of apparently-random numbers. To make sure the recovery process is on the right track, they need you to calculate the spreadsheet's checksum. For each row, determine the difference between the largest value and the smallest value; the checksum is the sum of all of these differences. + +For example, given the following spreadsheet: + +5 1 9 5 +7 5 3 +2 4 6 8 + + The first row's largest and smallest values are 9 and 1, and their difference is 8. + The second row's largest and smallest values are 7 and 3, and their difference is 4. + The third row's difference is 6. + +In this example, the spreadsheet's checksum would be 8 + 4 + 6 = 18. + +What is the checksum for the spreadsheet in your puzzle input? + +--- Part Two --- + +"Great work; looks like we're on the right track after all. Here's a star for your effort." However, the program seems a little worried. Can programs be worried? + +"Based on what we're seeing, it looks like all the User wanted is some information about the evenly divisible values in the spreadsheet. Unfortunately, none of us are equipped for that kind of calculation - most of us specialize in bitwise operations." + +It sounds like the goal is to find the only two numbers in each row where one evenly divides the other - that is, where the result of the division operation is a whole number. They would like you to find those numbers on each line, divide them, and add up each line's result. + +For example, given the following spreadsheet: + +5 9 2 8 +9 4 7 3 +3 8 6 5 + + In the first row, the only two numbers that evenly divide are 8 and 2; the result of this division is 4. + In the second row, the two numbers are 9 and 3; the result is 3. + In the third row, the result is 2. + +In this example, the sum of the results would be 4 + 3 + 2 = 9. + +What is the sum of each row's result in your puzzle input? diff --git a/www/statics/aoc/2017/02_input.txt b/www/statics/aoc/2017/02_input.txt new file mode 100644 index 0000000..f24f24b --- /dev/null +++ b/www/statics/aoc/2017/02_input.txt @@ -0,0 +1,16 @@ +116 1470 2610 179 2161 2690 831 1824 2361 1050 2201 118 145 2275 2625 2333 +976 220 1129 553 422 950 332 204 1247 1092 1091 159 174 182 984 713 +84 78 773 62 808 83 1125 1110 1184 145 1277 982 338 1182 75 679 +3413 3809 3525 2176 141 1045 2342 2183 157 3960 3084 2643 119 108 3366 2131 +1312 205 343 616 300 1098 870 1008 1140 1178 90 146 980 202 190 774 +4368 3905 3175 4532 3806 1579 4080 259 2542 221 4395 4464 208 3734 234 4225 +741 993 1184 285 1062 372 111 118 63 843 325 132 854 105 956 961 +85 79 84 2483 858 2209 2268 90 2233 1230 2533 322 338 68 2085 1267 +2688 2022 112 130 1185 103 1847 3059 911 107 2066 1788 2687 2633 415 1353 +76 169 141 58 161 66 65 225 60 152 62 64 156 199 80 56 +220 884 1890 597 3312 593 4259 222 113 2244 3798 4757 216 1127 4400 178 +653 369 216 132 276 102 265 889 987 236 239 807 1076 932 84 864 +799 739 75 1537 82 228 69 1397 1396 1203 1587 63 313 1718 1375 469 +1176 112 1407 136 1482 1534 1384 1202 604 851 190 284 1226 113 114 687 +73 1620 81 1137 812 75 1326 1355 1545 1666 1356 1681 1732 85 128 902 +571 547 160 237 256 30 496 592 385 576 183 692 192 387 647 233 \ No newline at end of file diff --git a/www/statics/aoc/2017/02_solution-1.py b/www/statics/aoc/2017/02_solution-1.py new file mode 100644 index 0000000..8df5c86 --- /dev/null +++ b/www/statics/aoc/2017/02_solution-1.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 + +import aoc + + +rawinput = aoc.read_input(2) + +result = 0 +for line in rawinput.splitlines(): + values = list(map(lambda d: int(d), line.split('\t'))) + result = result + (max(values) - min(values)) + +print(result) diff --git a/www/statics/aoc/2017/02_solution-2.py b/www/statics/aoc/2017/02_solution-2.py new file mode 100644 index 0000000..4cd00f9 --- /dev/null +++ b/www/statics/aoc/2017/02_solution-2.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 + +import aoc + + +rawinput = aoc.read_input(2) + +result = 0 +for line in rawinput.splitlines(): + values = list(map(lambda d: int(d), line.split('\t'))) + for v1 in values: + for v2 in values: + if v1 == v2: + continue + if v1 % v2 == 0: + result = result + v1//v2 + +print(result) diff --git a/www/statics/aoc/2017/03_challenge.txt b/www/statics/aoc/2017/03_challenge.txt new file mode 100644 index 0000000..37ed443 --- /dev/null +++ b/www/statics/aoc/2017/03_challenge.txt @@ -0,0 +1,44 @@ +--- Day 3: Spiral Memory --- + +You come across an experimental new kind of memory stored on an infinite two-dimensional grid. + +Each square on the grid is allocated in a spiral pattern starting at a location marked 1 and then counting up while spiraling outward. For example, the first few squares are allocated like this: + +17 16 15 14 13 +18 5 4 3 12 +19 6 1 2 11 +20 7 8 9 10 +21 22 23---> ... + +While this is very space-efficient (no squares are skipped), requested data must be carried back to square 1 (the location of the only access port for this memory system) by programs that can only move up, down, left, or right. They always take the shortest path: the Manhattan Distance between the location of the data and square 1. + +For example: + + Data from square 1 is carried 0 steps, since it's at the access port. + Data from square 12 is carried 3 steps, such as: down, left, left. + Data from square 23 is carried only 2 steps: up twice. + Data from square 1024 must be carried 31 steps. + +How many steps are required to carry the data from the square identified in your puzzle input all the way to the access port? + +--- Part Two --- + +As a stress test on the system, the programs here clear the grid and then store the value 1 in square 1. Then, in the same allocation order as shown above, they store the sum of the values in all adjacent squares, including diagonals. + +So, the first few squares' values are chosen as follows: + + Square 1 starts with the value 1. + Square 2 has only one adjacent filled square (with value 1), so it also stores 1. + Square 3 has both of the above squares as neighbors and stores the sum of their values, 2. + Square 4 has all three of the aforementioned squares as neighbors and stores the sum of their values, 4. + Square 5 only has the first and fourth squares as neighbors, so it gets the value 5. + +Once a square is written, its value does not change. Therefore, the first few squares would receive the following values: + +147 142 133 122 59 +304 5 4 2 57 +330 10 1 1 54 +351 11 23 25 26 +362 747 806---> ... + +What is the first value written that is larger than your puzzle input? diff --git a/www/statics/aoc/2017/03_input.txt b/www/statics/aoc/2017/03_input.txt new file mode 100644 index 0000000..1ba5dc1 --- /dev/null +++ b/www/statics/aoc/2017/03_input.txt @@ -0,0 +1 @@ +289326 \ No newline at end of file diff --git a/www/statics/aoc/2017/03_solution-1.py b/www/statics/aoc/2017/03_solution-1.py new file mode 100644 index 0000000..0c7eccd --- /dev/null +++ b/www/statics/aoc/2017/03_solution-1.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 + +import aoc +import math + + +# https://stackoverflow.com/questions/10094745 +def spiralpos(n): + k = math.ceil((math.sqrt(n) - 1) / 2) + t = 2 * k + 1 + m = t ** 2 + + t -= 1 + + if n >= m - t: + return k - (m - n), -k + + m -= t + + if n >= m - t: + return -k, -k + (m - n) + + m -= t + + if n >= m - t: + return -k + (m - n), k + + return k, k - (m - n - t) + + +rawinput = aoc.read_input(3) +intinput = int(rawinput) + +x, y = spiralpos(intinput) + +print(abs(x) + abs(y)) diff --git a/www/statics/aoc/2017/03_solution-2.py b/www/statics/aoc/2017/03_solution-2.py new file mode 100644 index 0000000..488c365 --- /dev/null +++ b/www/statics/aoc/2017/03_solution-2.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 + +import aoc +import math +import itertools + + +# https://stackoverflow.com/questions/10094745 +def spiralpos(n): + k = math.ceil((math.sqrt(n) - 1) / 2) + t = 2 * k + 1 + m = t ** 2 + + t -= 1 + + if n >= m - t: + return k - (m - n), -k + + m -= t + + if n >= m - t: + return -k, -k + (m - n) + + m -= t + + if n >= m - t: + return -k + (m - n), k + + return k, k - (m - n - t) + + +rawinput = aoc.read_input(3) +intinput = int(rawinput) + +dirs = [ + (-1, -1), (00, -1), (+1, -1), + (-1, 00), (+1, 00), + (-1, +1), (00, +1), (+1, +1), +] + +grid = dict() +grid[(0, 0)] = 1 + +for i in itertools.count(2): + x, y = spiralpos(i) + v = 0 + for dx, dy in dirs: + if (x + dx, y + dy) in grid: + v += grid[(x + dx, y + dy)] + if v > intinput: + print(v) + exit() + grid[(x, y)] = v diff --git a/www/statics/aoc/2017/04_challenge.txt b/www/statics/aoc/2017/04_challenge.txt new file mode 100644 index 0000000..c459ba0 --- /dev/null +++ b/www/statics/aoc/2017/04_challenge.txt @@ -0,0 +1,27 @@ +--- Day 4: High-Entropy Passphrases --- + +A new system policy has been put in place that requires all accounts to use a passphrase instead of simply a password. A passphrase consists of a series of words (lowercase letters) separated by spaces. + +To ensure security, a valid passphrase must contain no duplicate words. + +For example: + + aa bb cc dd ee is valid. + aa bb cc dd aa is not valid - the word aa appears more than once. + aa bb cc dd aaa is valid - aa and aaa count as different words. + +The system's full passphrase list is available as your puzzle input. How many passphrases are valid? + +--- Part Two --- + +For added security, yet another system policy has been put in place. Now, a valid passphrase must contain no two words that are anagrams of each other - that is, a passphrase is invalid if any word's letters can be rearranged to form any other word in the passphrase. + +For example: + + abcde fghij is a valid passphrase. + abcde xyz ecdab is not valid - the letters from the third word can be rearranged to form the first word. + a ab abc abd abf abj is a valid passphrase, because all letters need to be used when forming another word. + iiii oiii ooii oooi oooo is valid. + oiii ioii iioi iiio is not valid - any of these words can be rearranged to form any other word. + +Under this new system policy, how many passphrases are valid? diff --git a/www/statics/aoc/2017/04_input.txt b/www/statics/aoc/2017/04_input.txt new file mode 100644 index 0000000..628a384 --- /dev/null +++ b/www/statics/aoc/2017/04_input.txt @@ -0,0 +1,512 @@ +una bokpr ftz ryw nau yknf fguaczl anu +tvay wvco bcoblpt fwzg sfsys zvuqll mcbhwz ovcw fgdy +ynsocz vid rfmsy essqt fpbjvvq sldje qfpvjvb +yvh nxc kla vhy vkbq cxfzgr +kljv ymobo jlvk ebst cse cmlub tavputz omoby psif +ebfuvvu paqgzri uvvubef hglk jvn gzeln bdl ziqgpra bzcfa +tclq ytw tclq tezcqys +qae eofr yzwcwqf wqm ytcdnc pxnmkw +krryi irykr ycp lbeed ykrir lhq rdd tyujwd +hms pii lxoa dchsvz bepjwst bllxkqg hsm yrdj myzvju msh lwnnc +yxqh hqxy xkn ljjsqjh jjljshq +mhgsehj urbvnvf gbz ykxsd hsmgehj wtoc ujpfaos eir vifog tsy kdo +wfruf wwijme pxbbsvf asmgs ccbn vwtc mkhah oxxfh +lxqy jzvcvd cfgg uahxrwr dqmaqr bwzm wruxhra lrb lmk +jspgxo yuhgni njzqtn zglkzz ybc itj orqr zgqwuoo mjagh erll srqrk +cbrtnbx ukblei ienmdm sinzq lytyliz mma lizylty zeumwgu +aeggz eljcry buqdeog dvjzn ilvw arz vep kxdzm mvh szkf +imn sfty ugg flqq nydky mni bkqzlok wye lehwlmp xeyfmj +beyv oamrpkc tebdkwv zlq jes mqvif sej qpsnmjz edvtbkw +hylmacl wwlra xntnvg ppvb bzof cymllha +qktxomf ngfpuz qqz malc zxuqz szg zis vzro rfpgk +phru sxlg qzqlw uej vmd omzga jue +drzgojf ttqdqar weikik wvrjtxi gbj jramqh nlwoj drzgojf bgabmn xqlaeun +aiuohu pca apkmv cpa kmvpa nmdn +gelymv eto itcnuhn ote teo +oxiz xzio kqu wwgow +picoyb coibpy acsw ehlirq deyz gymqvz opicyb vuet lrl +zerg rezg miwtjgw gezr cui +mlh qlu ktil tnlgnrk bfqbk pgg qxeyd noadmjo nonlsh eqxdy +yqqaq yqqqa xod oss +mkotw bznvs xowoofq sebp wsgpsmn fytcpc vvmzr vmzrv xwtxz zrvvm +dvs twhz teqmlow oqg sjetxd aku cwl qfvrkex mndsio hfg +itdl qwdagkk wli tdil vlgur dyl xvfm +wlmyd dwmlx zhmqd zqmhd edzsvmz yclg umpq +petva gazw byrca pvaet epkoqh nlp vqfl vatpe +rykn ckr dijkme kmiedj ozlh deikmj +kuecjh sfqv pojfzf fjopzf fjpfzo amxtc +hri gglmial lrwbyc memgszu hir cfwlg ylcrwb +rxrfbtv pwpra fngt auh rapwp zrruuq uah +cevc utfd ysrfcw nnlg fnqtx aua htteunu mrjhhj +tvnxznj mvpagt nqmxvnl mutn ntmu eybh vkqeaj frayclp +ygktzxo lzwwy qsipu nwb jdmw pahao paow mwjd uivqbnj woap nyyogcc +log zihz rsmx ixfr xwvd osg zxc gol ufnbig +dogve cnb osa xbafl vefr nxlw yjgquui +ucyl aaoae ktjvi fyps xvjhpbh iiur tuc +pqt jasxg ehhs lzjzzzl sqmmj vwyva eklbtv hksanb fuesnd oyw fuesdn +uankv wesi frhpau qiucu lim uzbdapf ciwjd tifbqxh tfbtsdi +vgjd izpofu fqjpcct phuz +cfg cfg rgahl frm emn pbfsmgy frm jemwqgn sfpm azunntj igl +daps hpe fqg err sapd dci vbzlqx gsigq eyp rre +iuqyqdy djprdj mgtkdxr pwmkzv wmkvzp hppisd pidphs +rlr rrl vhevh cucprc xki urte lrr zfc xrqydzk ipjkyxj kytul +jwbkaee rgyjl rjljbwe ppq plp pfts ijd ckpvmw mbdrqh zolt lzmr +alw law awl wknavtb esklsbj wvssyai +aqy ldf qdht soxkg qtfipe nsdm aqe rtlc fbqrk ius gybbhxr +xteov wgqoqim nlz szlj oxevt xwb +tmgdst fyn oul tsohzbq ltmxji fgops gatssx zxdzfc talb +zkvjpu jnhtc nxs jqv pyoqz zsj ckwd xot ykai +fxfarre yjbxvj lqfaglo mbxuv bmuxv bxumv +yrhi uosldj hryi fwres ycygw ycvxze zevxyc iyk +yphev xisbai xdb hzrbg ayxbhdx qnvbus pwc +wytqraw yvurj erqckl rvrvda xsh gsd bxtm acxle gpndk +kpvjtu vacggk oabcuoq qusf zitqpgn pbyq ocabouq ntpgizq gaiiry dke +frz ceozajo ljltawq tjepzp iflv +zntejm dkfgc ysno noys sony muy +qdnyvvw oykq bnmldt zjgauw pviurd cbcnl tnkhq ebsey bccln arvwe +iqazt xidjgom wcrdz itht lfh ifzwkj rwqxhy ervcgmt vojg lzntz ezg +tlcxioh qvvkan wpi ody +mhsy dwm hyms yegvvc +hbkvi wvemc uwxgqf pwrgu wcy wxqfgu qkzppc vxcwdwd rcgp ivjd wmevc +upc ucp cpu unmr pyod +bqfew ebwfq paccwh phgc fchhr jrnio +abh bjalls bdtac zzvt totdlc yptqmgu rpcin bch cqklqly +bsnss qcsgi tegyz lqoqkpf qvatlyu ibza mzfotsk lye oqqf mnor +lzrxca stkbn axhr wckbip bsntk ahrx +oricdw cnpte dbz nqx xloxc bdz fdsl uyvgi nvoy ezbi +nlcqye ofta jcvqvtg yxduyh btawc tjgvqvc tcvqjvg +nji znctdfm kkmp pmt ikhl jjoubc xnp zdctnmf covvmsh ydh ircplcm +yafkuk yasqsyt ytqayss nusgb ukfyka +yogcf emg jlkd blupemf axg wihhrb ysernt yznhz +gmc yyqtgp use lohoit +lclwa ojjkm rxr rrx +punyfv iphw ddbc jghx lrssszc bepexv sicpy syicp lszrscs vrqjb +rjanra juh hljdmad scu usc baifu ijs suc bgdbbv +ogs hehi lgiwowc wwezznc ogs lorcl naunpll wlmal ajcbj ciujw +slenm xxod vhf amhts +mrrduda mrrduda lwecwjv lwecwjv vvzmjla cjipv +ixnv invx inmzz aoxghpv +ulyvfrf zsup zfryjy xoo agdsd giw papa ljtu rzbjiq wrex +bzpv svpuyov mklrct uzox +fxs iypd uaqch kxazj ksjyv +uxaommf xtq uubbfk bmlq kdhgjzg oxwpag itfij irmkjx ggod sddcyo bopn +lch plmvfni qbjr dnu zjcod qlwax gejmyj gxjqm mfzkb gejmyj +yoa thrfbto wposvrm amulogu mcqzfax fjquli oay +kywj kqqhney ozuljxz wqwfte ubo mjj anhhg aphy ocfnef yhin ywnx +vxuledm wllj obqtsrr jwll uvmelxd xvj gbwte +hevc bitwu ydw ywd btiwu iuether gfe +dzn ssmfpel wbbdeyt xge hrfi +zebz ifhq euto ppfnrwc winkkj +utuly wtdt iahpe ihtxwmh zxun bqluj hsaxgcs ytluu jlfnnuv drxlctr myhp +kwxgy hreul rsnh wdmsx kkajywb +bond djq kccazc zvzcie hndm myx cmhyhkc ove ord dqj +zcong tekgn pbzs ywqgqgu eizrx ypydeku yqyjdjp dwsu zxire zcgon iggnvf +tkioh hflkm fsjz gisjbi otikh +ccdqqm fdabbne fyd lbyqm cyzgtd puitvjz nluf hirrpxd tgxrg vvl +hjnygbz fnu twwbp xqw pfdlt uoalyme rsd muayeol ezcq +kubeooi bxgwoun paogjs twvwlji opsajg higbdfi aazo evmj +sfipxe mqbkmrn plwqd zvq nmvom fyfbs nbs qkrbmmn eym kqnrmbm +ruhsp hurps mqws umm sphru +ksjs pgpxh qozg enplxbn oqzg rvjnaje sjsk +rbwbvog mhgtgg uld twrqz rbf kpop +lwho lohw ylhd dej lydh vsfffsm +icljgu gluijc vthqx orynv xhvqt +biav elxkct mtaw nlafk snyr cbqdwim blim rtrqmc wze cxktel +fgpeia ebkhga azlfsr bsj pipvwsd nry bayrjzl ftth ynr mfhd +ymlowur nighqgk yjv pyxf nan xamb ohm jvy owrxbg icbz +iyyt linaqu httt zyfeo udap mllq pdxo lpl djhqaou zkit llp +dxspk yge kcqjqpz ulb hoe mfx nwayo +rdnmmh gyqd qhxrzj dgizu lyittbv txngpdg fiu mwd ndp oks vxnxybi +eul ztpe evnz yxx iuwon rkbbsw liy mqhxt +qahp zwn ualtk txbt cbthj xchqy pirucp povdwq +mqwu mwww muiafa miaafu hzripx wmww +auw hyyi ylewfi ihva jknbrry voxzooq xaos xymv qzzjw hjc +enpb jqa ajciy cbeopfs tqrlqj ecudb gso cyjai gxoet +yohkjj yohjjk xapawgo rtgnjj +lnlxxn nxllnx vhjrev uoew zts smkd kynlrg +bkblpr vgafcy alju aiyqe eebtsyu buve hdesodl pspbohw +aacmw qpndwo tcwsfqy qecnms wondpq sto +wdsyxe edsxyw jnzruiw pfqdrhi +pfgxekl vswgxhb qyn mykn jimiatq zkcz jimiatq kaexgxm mykn +xegwn upudt dew uqjrcl abyof hbtiko wxgne sorgno etm +xzojs zxsjo szjox gumjtwi +gttngkk bwdgce bhuw fgo rcbf byw +ngtzwqx ptx xodmy ctmtf oioahmm qajlhje jzilpk cvypp ijaefz +arlx slcugvm hyuo zoptsh emyr tndx rroecp tdnx xea rtkpd +sfckdx ktyrjju ruwjtp zhqznj vncun +oqqh xpc itrdg gtrid hoqq tuo yijh ncp suvck jic +brrlqu twdt urblrq twtd +brfuh arwtkpu mzlj wdyqk +pmag dtwnva nect azld axqrwy apgm xbv gdq ienubsy andvwt +hqb qbh gxdl mwjn cmfsmik +yiwma utlor qxjfjsn aomlvu gxp ryj rfkdsw kuguhyi qxxpg +ifq wcvcgly jdalgzx lgcycwv rajmnqw +latakk yxxbw evy vey +odkvw ojgveb jhg qwhkyoh btvu qbfot nouv owgtsi pdwbmfn pmvcv dnqbo +tmka qqnty knz swi fyvmt ikcdu jfjzsfu dshgi cosacuj szjjuff +eanet uua fbztk bzkft +jepi hyo jgzplr jyqk zzcs iepj hfamvu bfgbz sjsnf lprgzj +mlca ywko mtg vkfv ojka zbelq qkaujs simt kafq qtycfzo +sqh omv llvra ecvxmtx dpnafv llvszx xzlsvl quj ufnhvod faraf fivmnl +pvxlls fzeoav ahgv uhq nodcr cohy vqisgaj jsfcyur dbohh +ztccbwk okv vok kov ywel +xyu cmaikc jgqu ozccdzk ybn yoeq fky aetrkj eyoyvla laiu cermo +sssnb kxly mgvaz jpffkq bysbwwu rfnkm eycp ipyd hyi wjew +obdfqmh flkm semednj iafewg lvh uwa ciepe +zmldp ykffe gtehz qlmvule edrtzg prund oagwto qia bvyxur +kjok neno qbxh wqgkkt ympclso poyclsm cajgnnn +paqili kur sfit jbqchzx bhjqzxc +fhghm ubtaana qbn autnaab aaaunbt vmz +exlrl hfnpq zgdwx smix nyg ogccrhj iimhhwc uhcldo oydwxp kqc jxxpycv +wtdqjfh ialoqr zeej ipoh qtjdwhf wdhqftj +jcgug cmtvmu ynhnilj txlv uemowyu cvrool oolcvr njr cxqntdh +uhtwtp tgnc jmmjl utiu jfxtsoz cxwqcz +qntxl lyownp tsp tps mixyge rqfqumc bxjiry zmaj azjm +abt bat tftvm nyjs jyns +hzsdh pwthfvm cedg hzsdh rsxtehn owh cedg +hcoiny aqbeme eeuigt pocpvox tiugee rwb tvgmyc ojg hgdaf +mzlwcfc uoobo bouoo tvgvmiu evsfkm popgm evmfsk ehxvits vebxbmd qhmz jzj +mypgg jbpx vgeb ahvjl zbm ancdzfy wytkcq +bivscw zmzmjxu jzm fwb ujefxp jzsiskp cgx atcj sszikjp cxg nqvxga +vvurbxp iry zlz gfnlpuy npyugfl +fpmee mhj iul lui liu +xjoesn ggsdc vnisnmw kyxmmv xphfq +zcsml ngzlpy udaoab eotbv ylca bfmums izx +pdi bpyoep cofsy qazl oaovek fvfbe sotc lfdmaea smvs +zajm bskaqhj qxyiptb bdyeuqr dqjrekn iywj +hzhky hukvpve iqcbwju nyiwb rvutxlb hyuah urnhxg savicaw hexr ptedk +qndji wrr sin ljogf ncrb zvt tvz +kvfke tjpzhrl zvd doq kxyw fdgr oqd egkybdh rqpfxks nja +escstpv ccc ryzdv gxkjuyt gkhw jxnfda awpzg csestpv +cpcd onxeae nimbrpt zyji qnuo ktxgwbj vtjfglz skcozd zgii zgii nimbrpt +lwq iue hfbv hgbg aeqc +vzgbod yjkoc ckt bpiaz +eyco ecoy uzousjp faxj utu yoec +fhqdi myd tvex bzizkcx pifcfhz fczhpif eofzv bqzd knbhbgj dok ffcizhp +qlqlgmz hofmnc cwtk ahgnpne acn prwdh hwdrp rfofhl atavrf afkcbk +sgl apyfr pwxzptv osuwy vmqqh soyuw lqilked oinhh +eglqdox gcxfxql ejtnwu wvho can eyu uetwnj elgdxqo atvpkk eailsnn cwosyn +mylxhuj kbc apnllw qbmtj sqy hxtnvoe ins iyudo aagezrq nsi ikvn +lpmzo tkdeg zilkm vdkmtf yulbdd dkfmtv +fzrv grq zfvr ychga gqr +vdjxx wew pdxgp cjywsc meoffrj pgpdx chxmw eizgz ruea +iaklyhx btqqik tbiqqk ynmq laxykhi qatrnsh lnmtm plz +sfogup jtdsx tsxjd wwzkyy wzywky vgdsgr +paupqb kyy bccklmr vopviup lctcxza yyk yky +gduuia doek hqcr upvb szeewnu rrrdz +lhnsaf lut kzf allu dvj tyngx zkf aqsgz rtkzzdz +xxqj msg xxqj ezmm tmyji msg cco tain ctpel +pvcfzv rhn hlhxyu bghzzpx dlhvr hrvdl lhuxhy +npzhkp voghdv rvezqff hvgvdo jndf gpa wevrwpu +faixq aecax hxdouer yqlngzd grf wid iwd cce xnmmr +ifqwiah dib ibd dtvkwqj mpn dtwjkqv kyntq xwlv +rwoiz dja cvv lvza kfdblq bgtwgh ongdub wggthb lvaz +xajf eyasx rupsyqx wubjwx bsrqi ripghci sbzxp sbz dhooax +ydnv tvhwgp uvrh yryhl yxdlwa ladwxy awi mkwyn ghvpwt +qrl vwdvwic ocbhpi bcmz dor lrq hokg gokh +adz echnlju ebnmw twjl cfw loq fqklyyq clgqq jtgpsu wltj +vwlgisb murtsw ldkacqv wxfcke vcqkald ldhh gsl kpzn +itnvo lyddd saewfse spnri vtmst iblx +qsgv qni wvqiih mneg lkpb quhbkyi +efwaaa huu fslzwpc uuh szflwpc +sgmj ajh vcwpcua enltaks aquooh bwoda txbuve +vbe astgezx xqbxkdj evb bev yuuesdc fvohzq +gpn oqxfz pbwibjw gljdbf gbldfj sis dpk iss +pha ebybvye ntxhs wcuce +odnnywv qpcjll aslxqjm injfs vkbturz atxi +zzncfj kbhk jzzvnwf kqipx qkxpi rzb czfnzj +ygu vqpnxkw trdtv rrte +hrutley ljxuuq yonbpmk hmpc etyrhlu +odxp fpvizzx dxop jjbr skhxq mpzawhe zptdxuu erxk adbbuk zfzipvx +qjovasi yutjpg rcp bykpctm fqmmg pckbymt hqj +ssqc cype tkowxb fbh rsluu zjk scrukwv pkuexk qlgjtdq oulrke +bkcd nnf hdj sdlweyr uyf kmvzq +sgeg moy png blv bblree ufe uqknuqd lnjwbh +snpex hrbcfok pffv cwrvhcs fpk uprhn gbpy zkxyi esug ccnnj +bmwue dugcrdu uifiy clid rdmodec jodp hti xptj tpopl vuwhdyi hnoq +cwlkg qsz nnp lfyk pwn dpe oeuzp jusxxkq qlnchc +tsmkvge pxauyc cxypua boi hybq rzf iioyi rtedkc gjmk iob mqb +cvip wgbjhe ulwg jckkwd gdu bmaoisp +drpl xbliszf rpld ngnvgxl xnrd xsmd oetrcmn xvfohp mtocren +habmf dmfxq qitw xxtybla cxvb colcvpj sowoeuh bhmfa plccvjo naftjgw +cix soo icx ahx cdrjyxe htcnp +acoksaf cgahlg tdj euchwnj bdn lunouq aewrk uktre kklwqy lnouuq +ibsel hwjbah vxuk bjxa dvzbpq tffqvo bjax qfoftv +iynms tzv jakuuw cmz cjnyr ddibtd gcb +tmgerk pvwizc lxoma ergmtk xmg loaxm +ajazon yjwt viyemnk wobzwwm jcucn nopymyq znaajo qcjtmlq ccjun ywvt oqczod +kdhgnv kdnvgh rpyrxx xpyrxr +qftmshx hrbr kcggxw jwtuk qxbzkn +ddi fjekwxs xxua cmmkrso +ptrsv favvfh innnnx nninnx +kzsnd pnf evtazgw wmjk gvxp bslajo +nphqtka umlxu ymw whqiab whqiab vwigkz pevtps +vhje cnu uzfzum rwucy mxr wyrdqfi gnkuwz dkrwc otfc vbfc +ubtzio vlijsst anruj qyntadb fnic klz ywqq fnic vlijsst +rprj ybyqawb tgeieih nzcr rjpr bjfpozh tpevsx flvjdq +kvqqzvm cfdm wzjmkq sbcfx vzmkvqq +zqtt elpg eglp uoe glep +lqv madhtch xevl fal ijmx chcpra lzl afl cndbvnq +yjx jyx xjy otwklfj +cur egsdzaz ocbx wvky coxb pgiysbh lclhvy gfu oxbc vqyjvhh +gtd pytdaz kecsku nkiud ytt bmgobx tyt pfleji ebqlifv lqp ytzadp +bopfdvy eovszvw krgu jhuhyqi kaczafr krgu zlfxtl +yixprs zqai oprgw vcsjoc pgorw ypx ijo urjcjqv +estg oqnhw xgwajp mpbsag ibzi +zggbt jmmtkru sye ybd ztggb +tzryuqb blyxnnu sjpmf yxe zimf uyzqtbr qbyrtzu +rzivz rxn invxqd nazw efzun bwnw ywx rfuda jhnoww mketav +zxfw zcaqi qaciz ktefiwk xwzf +ntougl fvyaxfr obml obml bjkm lgsqj yfcggdu rqcpgt ntougl nveto +rma dakifg pvfc ticvff iffctv difkga +wpnt eclov vmmoqh qvw mljlvnj hxrx +ijnpo uhgxrfe xxopw xuzwyd powlpo ctduj eepw gubnepv +rxcmve myxckxk ecid nxe xevrmc juzaonr ilkx zpb pbz mvgos yzr +yfecm wqkh defqqa mnzgx nwe ixxg rjdhe new +awztgx vqgnfd iwcakr ajaiwn jiwnaa uqfrim wrgbjon ufqrmi vdu yjwy gwkdc +vrqf yzmvnr jkjji ghya pdlye ygha qlcm twmkex frqv +hjb xgypw vtr mgj asa owcuks fnllp ommrhng senv iix +usw iyuatv ondiwh neac ttge tzw bvjkfe neac usw +qwehwhj idrwo vex zopkjd lrcc sfqyz smte qrfh lccr qwjhewh vlb +efnlhsj ltm xirn nctwio cin +zocc cpfo czoc oiz tftk +rlzvqe inivone kptyumn eatw urjxc aetw +qavvqa jvvc yux cvvj +bfr fcpc xpkphcf irak bfr nuhsooj nniugf bfr gllq ipo +ekd dydxs rnmgb dek yowk +ipdll wdgx gjiigd uleiwg buvv vdhuzg gigidj gkyigmx lpdli lzyode fqdpvms +ycna rhyz bsipz lit rmc mrofb cyan mrc wujk +tjrk cwdsvf srkdjy lsyvryj nko syjvlry fgqq srdykj pgb koh dyle +sflcxt wmgdgej akllaoa bbsvve nsxnt nsxnt kgm akllaoa btqbez +bzmoci agemx mdtiol pyohvf zwtx aqblx oibmcz ypcmz lfg ckssn ozx +cuojke joekcu eusr dxqk xxwob klpsm +byspz lyunt eojrx ubh rjxoe ypzsb +ibok bkrtut wzcdk ppm qekhvy aupaic vswwul lmlxrv ainigy sasurbx +jeigcyc cycgjie resio ncz +xvxr lmlaje ebmtn cvms xrvx vsmc +cfjbffj xvo hpsbu nfm jhlsk mnf fmn +xncxo iwuon voj aebv jks nynzl hwjwo womejo ugzmr tdfaep olpdiaf +jlnusc hgpprf nulcjs kwiwypu kitjjbj snlcju +buqzm kpuoxel ajlqke qqdur jecuibn leajqk qudrq usi +ahbnjf uuzecdv yfyrsxv eoqey oonue vyyrxfs jixmvao +wjdi cfgurdl usdnlk jmao qnus cicxnux vtdxxkx nusq +mlvfz twu unj mar qpiz fhjczpz ytl npwjys ppq koa +ippdky pvwthzj qlkhl pvwthzj +kfm lcedomr xgdkrzo hfxyoe rafcby uwe pzjyuja weu nso erdwc fjvc +peep oufzlb fsgn kxj uge xvufb zsnrxss lere gfsn gvwajkj fmh +mexvi kgkktz kgkktz auyln ghvqc mexvi +wit qxtewrk qdaz oljeb wowb suergyt hxq pfnfbei rdu qrxkwte fyw +qjjzkd oxedeu uoxbehs zder vvjnn ocxkiz wkblzy eyzksc waiiqo fut raak +dhojys qkusuxs kzicui dcsxo +hsnexb yoz inza gqxtbc rya jqfe ufzlqva +scpquf gbloz ceol eclo qpvzavo rwfnxa +jyg edqf vdpsihl edqf +mbyjg yjgbm mgybj mhgi grw +ler oxssrel jhw jwh sfa hdhlo gng auzoan +hmkuis iaxf muhisk ikshum +eodbpo prajasi zsu hyb npr tbcntup uzs bxchne +zpyr kxmvz frlzwnb tzqrw vdh ndbwqmu cadwsv adq bzfnrwl qfgf +dybnn dmarc mknr fovokgj ukrp cuwag +khweq eljs rllijp pizevm lwws kehqw mkjcu otqodz +fvsrb kzbjbcc kzbjbcc mee dhyedb kzbjbcc +cnlmjd dvnd vhlvsa rsrtc scrrt tqhx vke jqmxpd udkjqc qxriw pfqpk +tyureg urteyg rutyge rmoihs +pccxeak tkmyane qqggpr tbdmpi ieb +wjucbi wjm hais pcxjd kkzh qns hmf mhf mnsv ifigsc +lqeyr pnopcig cpgoinp pncpigo mjfkjus cko zedvvyq +ofsnspv goj wqm ynolb qczly brl lrupzg buof zladwte +xzn zxn yaseulw qwhxb easyluw vvlmh +aiybip ydfczwh wkl rjsu xreokl qov mko pna fkfu +zjlwozs nxke ozwlzjs jybx jpsxp qtkll idsrad savpoe +xph lpvkmvy afq uqhg qqjgm smg tmhem mxdyqx bvhot lpvmkyv +jxkkzil pkjheow fewr ggbfy fuol cuzud wnx fxujfwh srjsmic +lzbjx vfx sncis xuv unoa nlgs stdhf oibxsgk uhogsb +hfqzkms bzyfnz npcd yhfdo myqukug pjq adle sqkfhmz +czhainb iazcnhb hhaqr cyrwj zzow luuvt zdyhnh uppysr +fyw dulbxa drewqsr tldlaac kyaw datclal ylplup hdzbj +kiiv tly gua lfg +gphbvwc lqdd jqja ffpkz hafal eiapksw wsikpea vphgbcw lkcpm zjxcx +viapp rxt vdgbm ezphp pcqr bll mklgx epzhp +favz bwmczgg zoyns pens wpgi mrwxel +ozwjjn kbzaozc cuaa igbfyq swi uypx bczaozk pyux odvawqx +npnpw nwppn egnpj fkzh wppnn +asu mlqmwa npewa cjluw qmalmw newpa fznx dzypi yiy +hleh usw bgmgscg cqc fijfuw idtyh cgmsbgg zjhr wus hymbju +tmre fvm cgowgb eduyfla ttez vdzp vtmtaog ezxsfi gyxgzi pvzd +acvarlu hkmfzdg jsnil hpv wjj rljpk pygl wjhhohk rkplj spvgx psgvx +wyz rvuobq kbmhaf bec bec +zosyz psuo lgihdo mjtftk fjkttm ddmcd +pqm qpswpb opviwxg ppqsbw waco jpx +yzgumgq kqv hqjghnl jixhoyg ufer kvq lzi rojm gbhvsd urd tuy +sxc jndqc ozpex wkchpu tmwv utcxzd piecpma cmppeia +ifjc lttj tltj rxmgxqa jcif lzhxkg zqb mdq kbjavv +isyxn zjbj uiw avziqxf zpezazx iuw +rjaudu amtpuk gufogys xiqs +gau sndrkv cmiolti cdxm ikkcisu xusnfbp jxffy ffcizj psye sgd +mvx onzmy oynzm mwfgvs +mrdg roanty dljs jlil gzcj dqitnfb gxb vzzqf ooweeh pgs oyntra +yna xgok fvbdl xgko udqp sorfo hmhl yan +kycl ule blupejp kycl fhpkoe pqkptw cfzpv nkncl +snugkyw zfdbsfs aehb olq kkoi xpsvy jqcspf lajjyu jtm +hifhfa mii clukcbc fhhifa wcts tgai vvqsyr kclcbcu +ordjftj dokk hdhytwc fjodrtj ojrjfdt san ajxrwy ked jfrqc +eylx cohd biswq xgiibz gzcptbf eylx icunv bfg jqanbv rntp sbfkiey +kub gdpbdms qnnto bit visqop +tywk clicj daics cbuewkx yyjjjka vxzk afsdyqg +bmxzll wqjnyr mxlzbl yutkaa qmpz hiqkf lqqqle jagj qlqelq +jgdeatg qubj jsu bhgbm swmgy lwgnuh qjbu dqwiikp mgwys +ryisldg asrrhz vxvrnk ibjr kebyx dwbx qdrpa tgakt +dfvgzk hifan dpjdnqc ncnvf xmqjjao npjq vobt evtaety kvufds pcugx oyjo +ezionjg ioznegj cykxy igeojzn ezm +dkv dkv vfqyl dkv dtjhrem +xfgh brsjcdw auvq fibb gcbecl +eet qdnrymr ndqmyrr tpfqxoi kbkxw +qhmaj maukf uygg hqmaj tfmtv irao wsari +ofoywus wxs leemkn wfko dwzqv txg qsiiiss aiiffe fadmdq zjtaovt +fgfms oazi sam msgff qif evxca reho +gpzhy qxh sco qeax wtabxwv sjd oev +xsmpi wskvku xspmi smipx +ghgf tbpeun qdivuvq dump umdp khxcxtx laljpv lownp egovve +vhmu eziabt hnz neko nkz hfmizn +vqhb lax zzyf lxa lik jrqynr rgcos +zjgbfzv ieufyz kjxad qxeuewx +ufl drkaac hoyic pqutop wqzdk eewabsr mqspcr ewarbse dzqkw +bgatanj xmddwv mwlmw scgzboo myignm lkfl fsqr +xkrx otjzfk wek dpbwk cromg fclmhg pkvw wsln +yyqjs lifg gifl cfv lfig fycza +dfup fkfeiqq rcmuv dly iforzi lngkjc rzifio oiifrz mlhor puwm qrthoa +nzfaeto punt rtmlg dwdk hyig +mds ueoyclh lxb axgea wqt wwqqglf tqw yvzji ryr dst bojf +ayoj yzj lyctgnc woxz gqltw lkzkwte wysb mjyeu hrwso +gymmvtt lhskza lsb nhlijnt men zphurrw oftksy zxs ykerwue hnijltn iknqyz +xuaxkc lgzeef fwb nlzzhjj lsieg qdr ews rue rdq +xnf lljcmod kyuercp kvlvd lkvh ncn afaq +bjytofa ltz mkyy bwt uxca somiz rhgdg keaqu ybr +aipljn qpq nilajp udgkchc dirvxg rrbmi mxfxkk kmfxkx +sfzjemk hjsvnmb hfd hprfmvg pbhkc +cvxi srj ucy yuc euswuns jpox +tajlnn ivuecv fdfce rakjq bfuxirh eibde tajnln nlajtn +ndvm mlnhy bfqlzn nmdv ohto +jysyvwy xbcyt lbbm osoye swwtwa emfznci qnzc qsgk +xcm jbqsuo xmc mtrk bojuqs +ukshrrh xhfl ooxgq vadlcrg ydva hugplg mnqbd wkyouq +mnmqys bhws megar krgoke modxe krgoke clovh dlo +ejl qzc agxph jcn zcq zqc +jgh yhh hjg jhg +tarm jboyg gbyjo pgalg xugzt bph mart +yur wrrahr fnnfqu rwhrar cdq +mukod gueg guge epalg xjkctt +hub hbu hbzul buh sqfl +xyrly lvpitr xfzn jjcl uvcnz dnpdyzq ifaiwe zlvzcx +wxzsf tgd khvwp cmd mzv bsvjvjm wvhpk ublnqyz mvbjvjs peishcb +zunmk hxpney nphxey znmku +bfxlgur wftcw xfkf fsik xkff ffxk +sxyjzr ugcscx uiovqx ldzhord xgxbfph ldzhord prdhg rhdhzd ugcscx +udg drb apyjq dgyevo fuxjhg +qshbe aigfdp wyvz xfcos wve dgfrufw dwimmb jfh wfrjbzk nwgrigr sbrpbb +ahpn xnzeof wxbv chxpcu jmso age ojsm bqonfki hqhrkw +mfupm vvig ndqbbm jlw +ejqh ebcrytj zpiqtpp ogznd +wkwkae odq rsrnqk nslczz hiyyhur kuw mjbuwll vduvod ryhuhiy swo tsos +znkufyx jejrdno knr wkx ikrlly tnxtj +iizdiw iizdiw hukep rwj eaq ptm klta rwj onaz +znb egqy qqnc igqr ikza ojgzkr xaen kurb pyckxvt wqx +pbohpw bphowp dajwdpp kotevs +hmuvxu zdnguk jhcmj gccyxiu cxgiycu uyxcgic akxi demeff +zjr lupzwcy puva rzj +cdn wee iqkbhl jwxo nhl cqd mqgqf ltdfg +phwco ggcj cggj ergpqmc kcz +aryjl wqwmkc aklktpz kptnroc mckqww +jadydt atjdyd tajdyd owswsgm +dshqt kacoge sdqth ylobih +kdnik knkdi dinkk xwvqa gvii +cifbkpt zye xhwnrhm fctibpk sbn pdqry emkye kzyjpa plzkc btkfcip gcchi +kekfr fufp dfy eqebgko obbn nuh +zixfbus skuf bea gimbqq caubhto eba uvkovz xisfzub peukmyn +okihcgh gazrc slee vlnwyg geviex eesl nmnvk rcbv ycupyw +tcvlgqs wxe lusvwzy unr yzluwvs wsylvzu zkwth qdykv +hyenkj ugao vlwgb putcepr lyeccs fqdotx burf aqew fje rfbu +uhmnc zgnkarz gylqawm abl zimcz qbs zzmic +pxkbpn zuxlwtt rlbhegv zlxuwtt ooxpr pgjx +leg wavgps fcplfpc xvxih ueskmi dvu wbiq nvtia pwjojw usiemk ojwwjp +zmrpknx xrfpq avque tvoyqp +lyposyj mckyoub sqbl olpsjyy hjafzi wmojb nvezofd +yflxrg egi aij qvc yflxrg typbs yflxrg kliexy eqnj jqrr +gggt sht kdajvz sht gkqwaot sht vout +ahl aucpih feig man umtchcv ceqabr tfptb +ftlywun voaorf kde ilwt hlpoe pksqxyh vpg cxo xgq fdkkl sgxhnq +zzekhfi akb lupta sgtd qapznzf lgidsx lidsgx akgmq ettuwjq xyumf +dxhpku lwoxpim gwb lhjmoh gxqapd ntmvc rvwwszg pvin lwoxpim coubc +qia bxmremo rjf vaeio eqexwz wuoz sguf bsbusof xqeewz +iczzz krf hbq tsgrih mzjabrt sfnwrm djignf zwac cwaz dgc nsrfmw +yvarsva zzpbp yai und kkbinr zlyj nyxxof ggrgu vyk eib +nepzm yrrgr vrlhbv hykmiog natrqx jvpq nbyhe zuo grx nwl +cfboeev hcn yfobyx cqvlo obctww xxaux ofybxy wouguq avuztl xmgqq xyofby +tikv uvzp oxopqy reh uzvp wefka vli kied gngks vbz thfsxyt +exxvknp pucbdyl dboto tzat qze xyinygz mhzl ubahr ekxbtk +jcz ufszbi pknsfgb ivok ijau okxolj etecn aurun zsa gbxs uryx +ypnb ousd osg mvset ipffzdn dfinfpz ltescx +taeoct aoetct aocett ttda fcdqnxv +bimtlk ssax bmrifkr vfxdmq hglp rgzr zpvk zhxtq rndwy mmr arkr +bwvdb axxbhzk nwfmbbu kzuc sahv cvas wdac acsv +xavkwou yvx ouwkxva otbe uzr mmw atq yiy ghavd qta pqlhv +omzht vsdsc zhtmo hmotz +eqt wtveez syift shtfnc hmckjxa apwbvn yme okdl hbihdtv hxahns eetvwz +rokdg ndjw hprxjc viys mbcctod dbvd +lhzb fyxf xaslmi sjd vqp grxhmfe snetfv mgivd uaknj givkdi +gxkxl kqcdnl rna jhcuepd npiedg djcpheu huce njryw bjluhq bvedvl kqxu +sogh uym atpzuwx vjgbe xgrvkg thgbyn mptcebt rkro +tnpxw uxrqxd lajmsmr tnnlt vrvbf deret hkmvrs eubvkn kks hjq +rcdoa zfja vod supip dvo +zbxdo xglqv how mgoq jqrdou pwrminc lidi nfs xglqv lidi +ldmnp dnqn ahhr tha mvsbsfh rpm rgus faf tjash +ewrdol jqhfpf rckj mrxlwj redjg bmxprx grla +rhr jksebwa vtu skwaejb vut +wrx iqvrjh atrt xrw vtqo tkcasd xedjh zkqrh vvhj +owc qlzygar uajwwe obzl inxawur +crbtrf phvy nzipo rctbfr trrcbf +vwuun wcfhhzo vxxjdt fbf bqtmmhs bffqcna +wkxfxmv zmrkyh sggw whwcw zukynw +lsdiy lnbn kblxi qfyib irfl mymrr zqbl +gwdkeu ghn afry zxoz fary uzntlnk kee xtnop ptnox zngoran +lgs lsg sgeseiz gsl +erpoqpi svtnv vsogl uym amzxbs +jtmodqx yjcsfcl zosugm jrekfdw xxbdqnx fcha +vio tlfxokx xaoq pydeiq glxsuzm honifvf maiuzsy uizsyam eco +ophcui saka qyt ltti syw +qff qff sde ryv +eiii jazx nlehtx tnhvxl rzvsjo qkupif feypppe tefxr wdjmlc +pdrr mwuy wccd rxla drpr enbbap +pclml ubwdbz hfudj gdpujfm ovabv +uink ffebi wdvhqzs qiympf lqxihty vnsp wdvhqzs hutxkcs lxfuos hutxkcs +fycoaw palkpz yrkg kappzl ncjym mergg kryg +eqy npvgh ghafkro piqnogb polacs qye hnvpg +dxyy udhmz jij tqsuic qxz erctv +urum nmbr cgek eetmhj gxr oxgukf wzdmvi oibzt fxkoug rcrywcr rglx +jkp ofej waibl opqhmww ifnczcg jdtkbc lil isc ill mylvuv +vqbcosk yhhsy gasmj bspx peakt cjtekw hvzo ywe qcvbosk ohzv qddt +edq llbvsx vedyvlm gou wkecank rkgf ziyrr belgo tbz +wbome vhzf ztk zaxiu ywjb supuf beq sxq spuuf pufus +femu ymkdoew kjynct aia +yjymr orovqj aremii licw bdtnc +uyade fbx duaye ujtvpn +yzvp pvzgjp yofcvya gvkkoh cafyvoy mhsm okhkvg +xuh qkaf dmi imd tzmlce mqkxj qilrc dim cadotvy +azpqgb kyc aflgyaf laagffy kesmk jzyzaer taf bpkbzdg +ogd dbdlh dqt zaaloh +exal vgnfx omu omepvwf szcwq snz bptite bzqyxl khmblyc sse emg +yqcbwsn aihhf tqck tcqk wqwqy cfez xahpn +qqbuf lil ies tqu pyxhqp mnfuk azj +vwma rzdtgl mxbasw nwgjav mwav +itpjfq rrgyt hralwm fqrig btwcod +ydjd kmk fvwr wrfv yvhw mkk +xbsxub yhsj xzbuf ace xubbsx fzuxb vxk +ttsist vubpf mhwkmtx vlj hdsva kmmhtwx ukxr upfvb tbma fxsrnxl hzwufho +wckjvz unmtev egxts ihw topvw ptowv rnihhmq +gpdtl kcric nwg ssbs qah aarp ydsdty ngw +lzhxbbq oktvcw xbasqe owtmwgp koa gumjie sodwrp hqsw aqh dtgsbb +xjbyy mxfxa ogvk nqiy qyni ldqwryj niyq jjixc +uhbul daccgva xtiz dim uhbul yjmakv yjmakv +huo esajup ouj oju ujo +eeeu hwvsk jfkmds okhi pogskfm itdlbll +lpyubo dylpfb iehwug decj ntidy cuygyg lalkb iutu oxgm imn \ No newline at end of file diff --git a/www/statics/aoc/2017/04_solution-1.py b/www/statics/aoc/2017/04_solution-1.py new file mode 100644 index 0000000..b1c8485 --- /dev/null +++ b/www/statics/aoc/2017/04_solution-1.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 + +import aoc + + +rawinput = aoc.read_input(4) + +rcount = 0 +for line in rawinput.splitlines(): + if len(set(line.split(' '))) == len(line.split(' ')): + rcount += 1 +print(rcount) + diff --git a/www/statics/aoc/2017/04_solution-2.py b/www/statics/aoc/2017/04_solution-2.py new file mode 100644 index 0000000..80985dd --- /dev/null +++ b/www/statics/aoc/2017/04_solution-2.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 + +import aoc + + +rawinput = aoc.read_input(4) + +rcount = 0 +for line in rawinput.splitlines(): + words = list(map(lambda x: "".join(sorted(list(x))), line.split(' '))) + if len(set(words)) == len(words): + rcount += 1 +print(rcount) + diff --git a/www/statics/aoc/2017/05_challenge.txt b/www/statics/aoc/2017/05_challenge.txt new file mode 100644 index 0000000..83f5710 --- /dev/null +++ b/www/statics/aoc/2017/05_challenge.txt @@ -0,0 +1,36 @@ +--- Day 5: A Maze of Twisty Trampolines, All Alike --- + +An urgent interrupt arrives from the CPU: it's trapped in a maze of jump instructions, and it would like assistance from any programs with spare cycles to help find the exit. + +The message includes a list of the offsets for each jump. Jumps are relative: -1 moves to the previous instruction, and 2 skips the next one. Start at the first instruction in the list. The goal is to follow the jumps until one leads outside the list. + +In addition, these instructions are a little strange; after each jump, the offset of that instruction increases by 1. So, if you come across an offset of 3, you would move three instructions forward, but change it to a 4 for the next time it is encountered. + +For example, consider the following list of jump offsets: + +0 +3 +0 +1 +-3 + +Positive jumps ("forward") move downward; negative jumps move upward. For legibility in this example, these offset values will be written all on one line, with the current instruction marked in parentheses. The following steps would be taken before an exit is found: + + (0) 3 0 1 -3 - before we have taken any steps. + (1) 3 0 1 -3 - jump with offset 0 (that is, don't jump at all). Fortunately, the instruction is then incremented to 1. + 2 (3) 0 1 -3 - step forward because of the instruction we just modified. The first instruction is incremented again, now to 2. + 2 4 0 1 (-3) - jump all the way to the end; leave a 4 behind. + 2 (4) 0 1 -2 - go back to where we just were; increment -3 to -2. + 2 5 0 1 -2 - jump 4 steps forward, escaping the maze. + +In this example, the exit is reached in 5 steps. + +How many steps does it take to reach the exit? + +--- Part Two --- + +Now, the jumps are even stranger: after each jump, if the offset was three or more, instead decrease it by 1. Otherwise, increase it by 1 as before. + +Using this rule with the above example, the process now takes 10 steps, and the offset values after finding the exit are left as 2 3 2 3 -1. + +How many steps does it now take to reach the exit? diff --git a/www/statics/aoc/2017/05_input.txt b/www/statics/aoc/2017/05_input.txt new file mode 100644 index 0000000..cbaa31c --- /dev/null +++ b/www/statics/aoc/2017/05_input.txt @@ -0,0 +1,1090 @@ +2 +1 +2 +-2 +-2 +1 +1 +2 +-2 +0 +-3 +-9 +0 +0 +2 +-12 +-1 +-12 +0 +-16 +-14 +-14 +-3 +-9 +-11 +0 +-23 +-21 +2 +-4 +-28 +-27 +-4 +-19 +-9 +-8 +-25 +-27 +-1 +-29 +-13 +0 +-29 +-29 +-35 +2 +-3 +2 +-2 +-46 +-18 +1 +-47 +-6 +-27 +-47 +-43 +-40 +-25 +-37 +-4 +-31 +1 +-6 +-2 +-38 +-1 +-66 +-33 +-48 +-47 +-9 +-58 +-7 +-57 +-35 +-61 +-11 +0 +-76 +0 +-80 +-77 +-72 +-5 +-47 +-38 +-16 +-28 +-47 +-19 +-42 +-15 +-88 +-34 +-50 +-12 +-54 +-63 +-95 +-1 +-66 +-48 +-14 +-34 +-72 +-63 +-101 +-102 +-107 +-37 +-75 +-28 +-23 +-14 +-61 +-108 +-71 +-113 +-96 +-26 +-28 +-92 +-64 +-47 +-74 +-9 +-113 +-126 +-61 +-36 +-40 +-26 +-73 +-7 +-99 +-3 +-15 +-127 +-104 +-89 +-67 +-81 +-8 +-63 +-109 +-57 +-81 +-101 +-57 +-94 +-78 +-82 +-9 +-118 +-34 +-93 +-147 +-41 +0 +-44 +-57 +-11 +-22 +-86 +-6 +-55 +-47 +-49 +-124 +-139 +-144 +-7 +-23 +-128 +-97 +-27 +-151 +-104 +-94 +-177 +-165 +-136 +-167 +-53 +-15 +-8 +-72 +2 +-4 +-44 +-15 +-177 +-188 +-142 +-71 +-161 +-81 +-169 +-150 +-144 +-193 +-143 +-185 +-33 +-21 +-198 +-97 +-55 +-50 +-183 +-94 +-77 +-138 +-195 +-146 +-4 +-193 +-132 +-88 +-93 +-67 +-100 +-162 +-107 +-17 +-108 +-213 +-123 +-49 +-191 +-180 +-73 +-182 +-125 +-176 +-65 +-189 +-131 +-18 +-145 +-197 +-136 +-53 +-60 +-209 +-67 +-244 +-163 +-246 +-153 +-16 +-231 +-68 +-165 +-42 +-3 +-9 +-178 +-250 +-37 +-128 +-99 +-145 +-234 +-167 +-123 +-222 +-101 +-46 +-52 +-129 +-155 +-85 +-122 +-228 +-150 +-237 +-173 +-29 +-24 +-175 +-229 +-106 +-236 +-234 +-246 +-90 +-105 +-274 +-211 +-94 +-285 +-201 +-92 +-204 +-215 +-115 +-213 +-218 +-2 +-122 +-176 +-2 +-35 +-143 +2 +-190 +-216 +-38 +-247 +-309 +-18 +-119 +-198 +-275 +-91 +-151 +-195 +-299 +-192 +-25 +-162 +-37 +-70 +-30 +-42 +-249 +-156 +-319 +-317 +-264 +-19 +-47 +-38 +-235 +-184 +-25 +-43 +-127 +-168 +-138 +-35 +-24 +-257 +-30 +-259 +-22 +-69 +-80 +0 +-212 +-41 +-20 +-90 +-196 +-169 +-47 +-238 +-320 +-132 +-348 +-301 +-242 +-353 +-63 +-51 +-33 +-270 +-196 +-334 +-160 +-63 +-177 +-42 +-30 +-216 +-219 +-155 +-146 +-192 +-113 +-368 +-349 +-330 +-33 +-4 +-302 +-119 +-387 +-336 +2 +-201 +-344 +1 +-6 +-339 +-311 +-79 +-55 +-67 +-118 +-257 +-215 +-141 +-40 +-117 +-28 +-345 +-312 +-60 +-57 +-43 +-193 +-134 +-144 +-28 +-11 +-138 +-48 +-167 +-76 +-99 +-51 +-283 +-174 +-159 +-72 +-55 +-155 +-343 +-226 +-195 +-364 +-39 +-368 +-117 +-256 +-42 +-172 +-236 +-231 +-133 +-36 +-442 +-178 +-101 +-213 +-142 +-266 +-305 +-95 +-341 +-227 +-217 +-162 +-1 +-168 +-384 +-424 +2 +-394 +-96 +-458 +-258 +-232 +0 +-283 +-393 +-211 +0 +-466 +-431 +-455 +-430 +-459 +0 +-235 +-96 +-371 +-479 +-117 +-39 +-291 +-220 +-403 +-325 +-433 +-189 +-275 +-58 +-109 +-191 +-175 +-416 +-61 +-269 +-411 +-330 +-497 +-487 +-393 +-417 +-275 +-157 +-208 +-196 +-330 +-427 +-361 +-304 +-385 +-16 +-175 +-250 +-101 +-256 +-186 +-369 +-328 +-322 +-190 +-135 +-71 +-455 +-303 +-287 +-95 +-55 +-446 +-489 +-329 +-410 +-372 +-36 +-7 +-407 +-455 +-347 +-160 +-376 +-515 +-414 +-433 +-107 +-508 +-156 +-111 +-81 +-382 +-203 +-3 +-109 +-163 +-61 +-313 +-516 +-277 +-306 +-166 +-286 +-437 +-100 +-117 +-556 +-248 +-326 +-550 +-424 +-21 +-524 +-27 +-69 +-244 +-303 +-124 +-299 +-434 +-364 +-543 +-233 +-189 +-279 +-159 +-49 +-112 +-291 +-173 +-143 +-482 +-202 +-446 +-226 +-439 +-496 +-568 +-171 +-376 +-80 +-189 +-495 +-67 +-22 +-470 +-330 +-329 +-259 +-30 +-201 +-591 +-543 +-33 +-591 +-3 +-493 +-614 +-579 +-283 +-251 +-518 +-230 +-408 +-87 +-438 +-551 +-521 +-424 +0 +-552 +-87 +-311 +-570 +-250 +-552 +-316 +-239 +-628 +-508 +-142 +-56 +-288 +-38 +-567 +-477 +-195 +-337 +-23 +-78 +-237 +-569 +-533 +-345 +-220 +-16 +-223 +-565 +-488 +-152 +-517 +-448 +-563 +-73 +-153 +-275 +-186 +-308 +-576 +-64 +-293 +-118 +-138 +-422 +-645 +-302 +-193 +-171 +-190 +-218 +-330 +-96 +-454 +-343 +-399 +-327 +-484 +-379 +-362 +-484 +-477 +-490 +-243 +-551 +-649 +-418 +-54 +-137 +-355 +-624 +-18 +-294 +-333 +-425 +-540 +-322 +-77 +-201 +-550 +-318 +-571 +-396 +-616 +-626 +-404 +-105 +-661 +-538 +-398 +-690 +-353 +-445 +-523 +-72 +-1 +-502 +-711 +-274 +-81 +-272 +-644 +-598 +-593 +-716 +-355 +-620 +-550 +-427 +-647 +-723 +-275 +-500 +-49 +-4 +-575 +-268 +-336 +-674 +-742 +-285 +-672 +-622 +-591 +-421 +-574 +-167 +-38 +-314 +-597 +-255 +-277 +-651 +-571 +-153 +-292 +-5 +-101 +-348 +-48 +-119 +-448 +-685 +-389 +-471 +-646 +-285 +-239 +-249 +-465 +-198 +-43 +-522 +-19 +-82 +-240 +-521 +-136 +-586 +-195 +-446 +-587 +-58 +-263 +-550 +-449 +-220 +-39 +-691 +-386 +-199 +-96 +-144 +-151 +-593 +-237 +-414 +-238 +-377 +-280 +-638 +-729 +-235 +-603 +-214 +-245 +-714 +-323 +-297 +-558 +-416 +-388 +-271 +-622 +-62 +-726 +-242 +-550 +-277 +-709 +-62 +-266 +-632 +-411 +-327 +-574 +-183 +-467 +-332 +-804 +-693 +-809 +-240 +-496 +-380 +-749 +-466 +-738 +-761 +-832 +-398 +-105 +-675 +-772 +-136 +-4 +-46 +-58 +-836 +-688 +-722 +-466 +-346 +-117 +-183 +-330 +-794 +-101 +-253 +-2 +-519 +-113 +-115 +-439 +-118 +-398 +-326 +-409 +-723 +-719 +-354 +-200 +-647 +-520 +-29 +-130 +-564 +-880 +-823 +-309 +-352 +-822 +-326 +-302 +-452 +-281 +-467 +-316 +-115 +-623 +-625 +-142 +-262 +-382 +-85 +-743 +-340 +-50 +-270 +-118 +-683 +-218 +-595 +-217 +-371 +-397 +-443 +-755 +-909 +-378 +-843 +-644 +-303 +-642 +-798 +-90 +-562 +2 +-733 +-792 +-235 +-536 +-132 +-481 +-386 +-795 +-167 +-145 +-725 +-403 +-533 +-761 +-599 +-732 +-719 +-250 +-239 +-626 +-318 +-135 +-756 +-308 +-287 +-130 +-277 +-265 +-709 +-252 +-679 +-126 +-794 +-6 +-194 +-715 +-703 +-373 +-481 +-928 +-710 +-155 +-431 +-780 +-658 +-897 +-947 +-55 +-271 +-927 +-554 +-165 +-763 +-895 +-329 +-132 +-293 +-134 +-524 +-824 +-277 +-187 +-849 +-193 +-167 +-175 +-125 +-489 +-36 +-960 +-931 +-533 +-9 +-599 +-589 +-795 +-418 +-679 +-793 +-592 +-24 +-100 +-664 +-382 +-524 +-549 +-124 +-899 +-583 +-470 +-897 +-309 +-886 +-291 +-971 +-123 +-122 +-841 +-218 +-62 +-434 +-113 +-138 +-358 +-569 +-182 +-839 +-621 +-596 +-977 +-297 +-590 +-738 +-503 +-334 +-756 +-245 +-505 +-107 +-376 +-958 +-937 +-986 +-942 +-589 +-541 +-612 +-932 +-314 +-114 +-213 +-922 +-31 +-380 +-152 +-512 +-521 +-34 +-613 +-759 +-781 +-256 +-297 +-155 +-853 +-169 +-842 +-567 +-533 +-709 +-19 +-517 +-542 +-376 +-149 +-934 +-496 +-782 +-469 +-320 +-219 +-902 +-155 +-971 +-1074 \ No newline at end of file diff --git a/www/statics/aoc/2017/05_solution-1.py b/www/statics/aoc/2017/05_solution-1.py new file mode 100644 index 0000000..5de380e --- /dev/null +++ b/www/statics/aoc/2017/05_solution-1.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 + +import aoc +import itertools + + +rawinput = aoc.read_input(5) + +instructions = list(map(lambda x: int(x), rawinput.splitlines())) + +ilen = len(instructions) +pos = 0 + +for i in itertools.count(1): + v = instructions[pos] + instructions[pos] += 1 + pos += v + if pos < 0 or pos >= ilen: + print(i) + exit() diff --git a/www/statics/aoc/2017/05_solution-2.py b/www/statics/aoc/2017/05_solution-2.py new file mode 100644 index 0000000..f2428de --- /dev/null +++ b/www/statics/aoc/2017/05_solution-2.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python3 + +import aoc +import itertools + + +rawinput = aoc.read_input(5) + +instructions = list(map(lambda x: int(x), rawinput.splitlines())) + +ilen = len(instructions) +pos = 0 + +for i in itertools.count(1): + v = instructions[pos] + instructions[pos] += -1 if v >= 3 else 1 + pos += v + if pos < 0 or pos >= ilen: + print(i) + exit() diff --git a/www/statics/aoc/2017/06_challenge.txt b/www/statics/aoc/2017/06_challenge.txt new file mode 100644 index 0000000..a5c558a --- /dev/null +++ b/www/statics/aoc/2017/06_challenge.txt @@ -0,0 +1,30 @@ +--- Day 6: Memory Reallocation --- + +A debugger program here is having an issue: it is trying to repair a memory reallocation routine, but it keeps getting stuck in an infinite loop. + +In this area, there are sixteen memory banks; each memory bank can hold any number of blocks. The goal of the reallocation routine is to balance the blocks between the memory banks. + +The reallocation routine operates in cycles. In each cycle, it finds the memory bank with the most blocks (ties won by the lowest-numbered memory bank) and redistributes those blocks among the banks. To do this, it removes all of the blocks from the selected bank, then moves to the next (by index) memory bank and inserts one of the blocks. It continues doing this until it runs out of blocks; if it reaches the last memory bank, it wraps around to the first one. + +The debugger would like to know how many redistributions can be done before a blocks-in-banks configuration is produced that has been seen before. + +For example, imagine a scenario with only four memory banks: + + The banks start with 0, 2, 7, and 0 blocks. The third bank has the most blocks, so it is chosen for redistribution. + Starting with the next bank (the fourth bank) and then continuing to the first bank, the second bank, and so on, the 7 blocks are spread out over the memory banks. The fourth, first, and second banks get two blocks each, and the third bank gets one back. The final result looks like this: 2 4 1 2. + Next, the second bank is chosen because it contains the most blocks (four). Because there are four memory banks, each gets one block. The result is: 3 1 2 3. + Now, there is a tie between the first and fourth memory banks, both of which have three blocks. The first bank wins the tie, and its three blocks are distributed evenly over the other three banks, leaving it with none: 0 2 3 4. + The fourth bank is chosen, and its four blocks are distributed such that each of the four banks receives one: 1 3 4 1. + The third bank is chosen, and the same thing happens: 2 4 1 2. + +At this point, we've reached a state we've seen before: 2 4 1 2 was already seen. The infinite loop is detected after the fifth block redistribution cycle, and so the answer in this example is 5. + +Given the initial block counts in your puzzle input, how many redistribution cycles must be completed before a configuration is produced that has been seen before? + +--- Part Two --- + +Out of curiosity, the debugger would also like to know the size of the loop: starting from a state that has already been seen, how many block redistribution cycles must be performed before that same state is seen again? + +In the example above, 2 4 1 2 is seen again after four cycles, and so the answer in that example would be 4. + +How many cycles are in the infinite loop that arises from the configuration in your puzzle input? diff --git a/www/statics/aoc/2017/06_input.txt b/www/statics/aoc/2017/06_input.txt new file mode 100644 index 0000000..bb545e3 --- /dev/null +++ b/www/statics/aoc/2017/06_input.txt @@ -0,0 +1 @@ +14 0 15 12 11 11 3 5 1 6 8 4 9 1 8 4 \ No newline at end of file diff --git a/www/statics/aoc/2017/06_solution-1.py b/www/statics/aoc/2017/06_solution-1.py new file mode 100644 index 0000000..9f3f10d --- /dev/null +++ b/www/statics/aoc/2017/06_solution-1.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +import aoc + + +rawinput = aoc.read_input(6) + +mem = list(map(lambda x: int(x), rawinput.split('\t'))) + +visited = set() + +while True: + key = ";".join(map(lambda x: str(x), mem)) + # print(mem) + if key in visited: + print(len(visited)) + exit(0) + visited.add(key) + + idx = mem.index(max(mem)) + val = mem[idx] + mem[idx] = 0 + for i in range(val): + mem[(idx+i+1) % len(mem)] += 1 diff --git a/www/statics/aoc/2017/06_solution-2.py b/www/statics/aoc/2017/06_solution-2.py new file mode 100644 index 0000000..3c535fa --- /dev/null +++ b/www/statics/aoc/2017/06_solution-2.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python3 + +import aoc + + +rawinput = aoc.read_input(6) + +mem = list(map(lambda x: int(x), rawinput.split('\t'))) + +visited = dict() + +while True: + key = ";".join(map(lambda x: str(x), mem)) + # print(mem) + if key in visited: + print(len(visited) - visited[key]) + exit(0) + visited[key] = len(visited) + + idx = mem.index(max(mem)) + val = mem[idx] + mem[idx] = 0 + for i in range(val): + mem[(idx+i+1) % len(mem)] += 1 diff --git a/www/statics/aoc/__all.php b/www/statics/aoc/__all.php index 40a4621..9bda93e 100644 --- a/www/statics/aoc/__all.php +++ b/www/statics/aoc/__all.php @@ -2,60 +2,69 @@ return [ + '2017' => + [ + ['day' => 1, 'parts' => 2, 'title' => 'Inverse Captcha', 'language' => 'pyth', 'solutions' => ['1390', '1232'] ], + ['day' => 2, 'parts' => 2, 'title' => 'Corruption Checksum', 'language' => 'pyth', 'solutions' => ['32020', '236'] ], + ['day' => 3, 'parts' => 2, 'title' => 'Spiral Memory', 'language' => 'pyth', 'solutions' => ['419', '295229'] ], + ['day' => 4, 'parts' => 2, 'title' => 'High-Entropy Passphrases', 'language' => 'pyth', 'solutions' => ['477', '167'] ], + ['day' => 5, 'parts' => 2, 'title' => 'A Maze of Twisty Trampolines, All Alike', 'language' => 'pyth', 'solutions' => ['388611', '27763113'] ], + ['day' => 6, 'parts' => 2, 'title' => 'Memory Reallocation', 'language' => 'pyth', 'solutions' => ['11137', '1037'] ], + ], '2018' => [ - ['day' => 1, 'parts' => 2, 'title' => 'Chronal Calibration', 'language' => 'cs', 'solutions' => ['490', '70357'] ], - ['day' => 2, 'parts' => 2, 'title' => 'Inventory Management System', 'language' => 'cs', 'solutions' => ['5434', 'agimdjvlhedpsyoqfzuknpjwt'] ], - ['day' => 3, 'parts' => 2, 'title' => 'No Matter How You Slice It', 'language' => 'cs', 'solutions' => ['116489', '1260'] ], - ['day' => 4, 'parts' => 2, 'title' => 'Repose Record', 'language' => 'cs', 'solutions' => ['143415', '49944'] ], - ['day' => 5, 'parts' => 2, 'title' => 'Alchemical Reduction', 'language' => 'cs', 'solutions' => ['10368', '4122'] ], - ['day' => 6, 'parts' => 2, 'title' => 'Chronal Coordinates', 'language' => 'cs', 'solutions' => ['2917', '44202'] ], - ['day' => 7, 'parts' => 2, 'title' => 'The Sum of Its Parts', 'language' => 'cs', 'solutions' => ['GKPTSLUXBIJMNCADFOVHEWYQRZ', '920'] ], - ['day' => 8, 'parts' => 2, 'title' => 'Memory Maneuver', 'language' => 'cs', 'solutions' => ['45194', '22989'] ], - ['day' => 9, 'parts' => 2, 'title' => 'Marble Mania', 'language' => 'cs', 'solutions' => ['398242', '3273842452'] ], - ['day' => 10, 'parts' => 2, 'title' => 'The Stars Align', 'language' => 'cs', 'solutions' => ['KFLBHXGK', '10659'] ], - ['day' => 11, 'parts' => 2, 'title' => 'Chronal Charge', 'language' => 'cs', 'solutions' => ['34,13', '280,218,11'] ], - ['day' => 12, 'parts' => 2, 'title' => 'Subterranean Sustainability', 'language' => 'cs', 'solutions' => ['3738', '3900000002467'] ], - ['day' => 13, 'parts' => 2, 'title' => 'Mine Cart Madness', 'language' => 'cs', 'solutions' => ['124,90', '145,88'] ], - ['day' => 14, 'parts' => 2, 'title' => 'Chocolate Charts', 'language' => 'cs', 'solutions' => ['9276422810', '20319117'] ], - ['day' => 15, 'parts' => 2, 'title' => 'Beverage Bandits', 'language' => 'cs', 'solutions' => ['201123', '54188'] ], - ['day' => 16, 'parts' => 2, 'title' => 'Chronal Classification', 'language' => 'cs', 'solutions' => ['592', '557'] ], - ['day' => 17, 'parts' => 2, 'title' => 'Reservoir Research', 'language' => 'cs', 'solutions' => ['33004', '23294'] ], - ['day' => 18, 'parts' => 2, 'title' => 'Settlers of The North Pole', 'language' => 'cs', 'solutions' => ['536370', '190512'] ], - ['day' => 19, 'parts' => 2, 'title' => 'Go With The Flow', 'language' => 'cs', 'solutions' => ['1440', '15827040'] ], - ['day' => 20, 'parts' => 2, 'title' => 'A Regular Map', 'language' => 'cs', 'solutions' => ['3675', '7953'] ], - ['day' => 21, 'parts' => 2, 'title' => 'Chronal Conversion', 'language' => 'cs', 'solutions' => ['103548', '14256686'] ], - ['day' => 22, 'parts' => 2, 'title' => 'Mode Maze', 'language' => 'cs', 'solutions' => ['11972', '1092'] ], - ['day' => 23, 'parts' => 2, 'title' => 'Experimental Emergency Teleportation', 'language' => 'cs', 'solutions' => ['417', '112997634'] ], - ['day' => 24, 'parts' => 2, 'title' => 'Immune System Simulator 20XX', 'language' => 'cs', 'solutions' => ['21070', '7500'] ], - ['day' => 25, 'parts' => 1, 'title' => 'Four-Dimensional Adventure', 'language' => 'cs', 'solutions' => ['407'] ], + ['day' => 1, 'parts' => 2, 'title' => 'Chronal Calibration', 'language' => 'cs', 'solutions' => ['490', '70357'] ], + ['day' => 2, 'parts' => 2, 'title' => 'Inventory Management System', 'language' => 'cs', 'solutions' => ['5434', 'agimdjvlhedpsyoqfzuknpjwt'] ], + ['day' => 3, 'parts' => 2, 'title' => 'No Matter How You Slice It', 'language' => 'cs', 'solutions' => ['116489', '1260'] ], + ['day' => 4, 'parts' => 2, 'title' => 'Repose Record', 'language' => 'cs', 'solutions' => ['143415', '49944'] ], + ['day' => 5, 'parts' => 2, 'title' => 'Alchemical Reduction', 'language' => 'cs', 'solutions' => ['10368', '4122'] ], + ['day' => 6, 'parts' => 2, 'title' => 'Chronal Coordinates', 'language' => 'cs', 'solutions' => ['2917', '44202'] ], + ['day' => 7, 'parts' => 2, 'title' => 'The Sum of Its Parts', 'language' => 'cs', 'solutions' => ['GKPTSLUXBIJMNCADFOVHEWYQRZ', '920'] ], + ['day' => 8, 'parts' => 2, 'title' => 'Memory Maneuver', 'language' => 'cs', 'solutions' => ['45194', '22989'] ], + ['day' => 9, 'parts' => 2, 'title' => 'Marble Mania', 'language' => 'cs', 'solutions' => ['398242', '3273842452'] ], + ['day' => 10, 'parts' => 2, 'title' => 'The Stars Align', 'language' => 'cs', 'solutions' => ['KFLBHXGK', '10659'] ], + ['day' => 11, 'parts' => 2, 'title' => 'Chronal Charge', 'language' => 'cs', 'solutions' => ['34,13', '280,218,11'] ], + ['day' => 12, 'parts' => 2, 'title' => 'Subterranean Sustainability', 'language' => 'cs', 'solutions' => ['3738', '3900000002467'] ], + ['day' => 13, 'parts' => 2, 'title' => 'Mine Cart Madness', 'language' => 'cs', 'solutions' => ['124,90', '145,88'] ], + ['day' => 14, 'parts' => 2, 'title' => 'Chocolate Charts', 'language' => 'cs', 'solutions' => ['9276422810', '20319117'] ], + ['day' => 15, 'parts' => 2, 'title' => 'Beverage Bandits', 'language' => 'cs', 'solutions' => ['201123', '54188'] ], + ['day' => 16, 'parts' => 2, 'title' => 'Chronal Classification', 'language' => 'cs', 'solutions' => ['592', '557'] ], + ['day' => 17, 'parts' => 2, 'title' => 'Reservoir Research', 'language' => 'cs', 'solutions' => ['33004', '23294'] ], + ['day' => 18, 'parts' => 2, 'title' => 'Settlers of The North Pole', 'language' => 'cs', 'solutions' => ['536370', '190512'] ], + ['day' => 19, 'parts' => 2, 'title' => 'Go With The Flow', 'language' => 'cs', 'solutions' => ['1440', '15827040'] ], + ['day' => 20, 'parts' => 2, 'title' => 'A Regular Map', 'language' => 'cs', 'solutions' => ['3675', '7953'] ], + ['day' => 21, 'parts' => 2, 'title' => 'Chronal Conversion', 'language' => 'cs', 'solutions' => ['103548', '14256686'] ], + ['day' => 22, 'parts' => 2, 'title' => 'Mode Maze', 'language' => 'cs', 'solutions' => ['11972', '1092'] ], + ['day' => 23, 'parts' => 2, 'title' => 'Experimental Emergency Teleportation', 'language' => 'cs', 'solutions' => ['417', '112997634'] ], + ['day' => 24, 'parts' => 2, 'title' => 'Immune System Simulator 20XX', 'language' => 'cs', 'solutions' => ['21070', '7500'] ], + ['day' => 25, 'parts' => 1, 'title' => 'Four-Dimensional Adventure', 'language' => 'cs', 'solutions' => ['407'] ], ], '2019' => [ - ['day' => 1, 'parts' => 2, 'title' => 'The Tyranny of the Rocket Equation', 'language' => 'ts', 'solutions' => ['3464458', '5193796'] ], - ['day' => 2, 'parts' => 2, 'title' => '1202 Program Alarm', 'language' => 'ts', 'solutions' => ['3267740', '7870'] ], - ['day' => 3, 'parts' => 2, 'title' => 'Crossed Wires', 'language' => 'ts', 'solutions' => ['399', '15678'] ], - ['day' => 4, 'parts' => 2, 'title' => 'Secure Container', 'language' => 'ts', 'solutions' => ['979', '635'] ], - ['day' => 5, 'parts' => 2, 'title' => 'Sunny with a Chance of Asteroids', 'language' => 'ts', 'solutions' => ['8332629', '8805067'] ], - ['day' => 6, 'parts' => 2, 'title' => 'Universal Orbit Map', 'language' => 'ts', 'solutions' => ['333679', '370'] ], - ['day' => 7, 'parts' => 2, 'title' => 'Amplification Circuit', 'language' => 'ts', 'solutions' => ['844468', '4215746'] ], - ['day' => 8, 'parts' => 2, 'title' => 'Space Image Format', 'language' => 'ts', 'solutions' => ['2286', 'CJZLP'] ], - ['day' => 9, 'parts' => 2, 'title' => 'Sensor Boost', 'language' => 'ts', 'solutions' => ['2738720997', '50894'] ], - ['day' => 10, 'parts' => 2, 'title' => 'Monitoring Station', 'language' => 'ts', 'solutions' => ['344', '2732'] ], - ['day' => 11, 'parts' => 2, 'title' => 'Space Police', 'language' => 'ts', 'solutions' => ['2021', 'LBJHEKLH'] ], - ['day' => 12, 'parts' => 2, 'title' => 'The N-Body Problem', 'language' => 'ts', 'solutions' => ['9999', '282399002133976'] ], - ['day' => 13, 'parts' => 2, 'title' => 'Care Package', 'language' => 'ts', 'solutions' => ['326', '15988'] ], - ['day' => 14, 'parts' => 2, 'title' => 'Space Stoichiometry', 'language' => 'ts', 'solutions' => ['168046', '6972986'] ], - ['day' => 15, 'parts' => 2, 'title' => 'Oxygen System', 'language' => 'ts', 'solutions' => ['244', '278'] ], - ['day' => 16, 'parts' => 2, 'title' => 'Flawed Frequency Transmission', 'language' => 'ts', 'solutions' => ['69549155', '83253465'] ], - ['day' => 17, 'parts' => 2, 'title' => 'Set and Forget', 'language' => 'ts', 'solutions' => ['3448', '762405'] ], - ['day' => 18, 'parts' => 2, 'title' => 'Many-Worlds Interpretation', 'language' => 'ts', 'solutions' => ['7430', '1864'] ], - ['day' => 19, 'parts' => 2, 'title' => 'Tractor Beam', 'language' => 'ts', 'solutions' => ['181', '4240964'] ], - ['day' => 20, 'parts' => 2, 'title' => 'Donut Maze', 'language' => 'ts', 'solutions' => ['602', '6986'] ], - ['day' => 21, 'parts' => 2, 'title' => 'Springdroid Adventure', 'language' => 'ts', 'solutions' => ['19361023', '1141457530'] ], - ['day' => 22, 'parts' => 2, 'title' => 'Slam Shuffle', 'language' => 'ts', 'solutions' => ['1252', '46116012647793'] ], - ['day' => 23, 'parts' => 2, 'title' => 'Category Six', 'language' => 'ts', 'solutions' => ['27061', '19406'] ], - ['day' => 24, 'parts' => 2, 'title' => 'Planet of Discord', 'language' => 'ts', 'solutions' => ['25719471', '1916'] ], - ['day' => 25, 'parts' => 1, 'title' => 'Cryostasis', 'language' => 'ts', 'solutions' => ['2236672'] ], + ['day' => 1, 'parts' => 2, 'title' => 'The Tyranny of the Rocket Equation', 'language' => 'ts', 'solutions' => ['3464458', '5193796'] ], + ['day' => 2, 'parts' => 2, 'title' => '1202 Program Alarm', 'language' => 'ts', 'solutions' => ['3267740', '7870'] ], + ['day' => 3, 'parts' => 2, 'title' => 'Crossed Wires', 'language' => 'ts', 'solutions' => ['399', '15678'] ], + ['day' => 4, 'parts' => 2, 'title' => 'Secure Container', 'language' => 'ts', 'solutions' => ['979', '635'] ], + ['day' => 5, 'parts' => 2, 'title' => 'Sunny with a Chance of Asteroids', 'language' => 'ts', 'solutions' => ['8332629', '8805067'] ], + ['day' => 6, 'parts' => 2, 'title' => 'Universal Orbit Map', 'language' => 'ts', 'solutions' => ['333679', '370'] ], + ['day' => 7, 'parts' => 2, 'title' => 'Amplification Circuit', 'language' => 'ts', 'solutions' => ['844468', '4215746'] ], + ['day' => 8, 'parts' => 2, 'title' => 'Space Image Format', 'language' => 'ts', 'solutions' => ['2286', 'CJZLP'] ], + ['day' => 9, 'parts' => 2, 'title' => 'Sensor Boost', 'language' => 'ts', 'solutions' => ['2738720997', '50894'] ], + ['day' => 10, 'parts' => 2, 'title' => 'Monitoring Station', 'language' => 'ts', 'solutions' => ['344', '2732'] ], + ['day' => 11, 'parts' => 2, 'title' => 'Space Police', 'language' => 'ts', 'solutions' => ['2021', 'LBJHEKLH'] ], + ['day' => 12, 'parts' => 2, 'title' => 'The N-Body Problem', 'language' => 'ts', 'solutions' => ['9999', '282399002133976'] ], + ['day' => 13, 'parts' => 2, 'title' => 'Care Package', 'language' => 'ts', 'solutions' => ['326', '15988'] ], + ['day' => 14, 'parts' => 2, 'title' => 'Space Stoichiometry', 'language' => 'ts', 'solutions' => ['168046', '6972986'] ], + ['day' => 15, 'parts' => 2, 'title' => 'Oxygen System', 'language' => 'ts', 'solutions' => ['244', '278'] ], + ['day' => 16, 'parts' => 2, 'title' => 'Flawed Frequency Transmission', 'language' => 'ts', 'solutions' => ['69549155', '83253465'] ], + ['day' => 17, 'parts' => 2, 'title' => 'Set and Forget', 'language' => 'ts', 'solutions' => ['3448', '762405'] ], + ['day' => 18, 'parts' => 2, 'title' => 'Many-Worlds Interpretation', 'language' => 'ts', 'solutions' => ['7430', '1864'] ], + ['day' => 19, 'parts' => 2, 'title' => 'Tractor Beam', 'language' => 'ts', 'solutions' => ['181', '4240964'] ], + ['day' => 20, 'parts' => 2, 'title' => 'Donut Maze', 'language' => 'ts', 'solutions' => ['602', '6986'] ], + ['day' => 21, 'parts' => 2, 'title' => 'Springdroid Adventure', 'language' => 'ts', 'solutions' => ['19361023', '1141457530'] ], + ['day' => 22, 'parts' => 2, 'title' => 'Slam Shuffle', 'language' => 'ts', 'solutions' => ['1252', '46116012647793'] ], + ['day' => 23, 'parts' => 2, 'title' => 'Category Six', 'language' => 'ts', 'solutions' => ['27061', '19406'] ], + ['day' => 24, 'parts' => 2, 'title' => 'Planet of Discord', 'language' => 'ts', 'solutions' => ['25719471', '1916'] ], + ['day' => 25, 'parts' => 1, 'title' => 'Cryostasis', 'language' => 'ts', 'solutions' => ['2236672'] ], ], ]; \ No newline at end of file diff --git a/www/statics/blog/__all.php b/www/statics/blog/__all.php index 3af8716..49639a4 100644 --- a/www/statics/blog/__all.php +++ b/www/statics/blog/__all.php @@ -26,4 +26,5 @@ return [ 'id' => 22, 'date' => '2018-02-06', 'visible' => true, 'title' => 'Homepage iteration 5', 'fragment' => 'v5.md', 'type' => 'markdown', 'cat' => 'log' ], [ 'id' => 23, 'date' => '2018-12-01', 'visible' => true, 'title' => 'Advent of Code 2018', 'fragment' => 'aoc2018.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2018'] ], [ 'id' => 24, 'date' => '2019-12-01', 'visible' => true, 'title' => 'Advent of Code 2019', 'fragment' => 'aoc2019.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2019'] ], + [ 'id' => 25, 'date' => '2020-01-09', 'visible' => true, 'title' => 'Advent of Code 2017', 'fragment' => 'aoc2017.md', 'type' => 'aoc', 'cat' => 'blog', 'extras' => ['aoc:year' => '2017'] ], ]; \ No newline at end of file diff --git a/www/statics/blog/aoc2017.md b/www/statics/blog/aoc2017.md new file mode 100644 index 0000000..d68cac0 --- /dev/null +++ b/www/statics/blog/aoc2017.md @@ -0,0 +1,4 @@ +Advent of Code 2019 is over, but just for fun I will try my hand at the 2017 problems. +I'm mostly interested how python - a more common language for these kind of scripting problems - will perform. + +I'm not really in a hurry so this could take some time until I'm finished (definitely more than 25 day...) \ No newline at end of file