1
0

aoc 2017 (day 1-6)

This commit is contained in:
Mike Schwörer 2020-01-13 12:57:50 +01:00
parent 3968a11fa6
commit 4da4c47915
28 changed files with 2164 additions and 50 deletions

View File

@ -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' ],
];

View File

@ -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.

View File

@ -0,0 +1 @@
8231753674683997878179259195565332579493378483264978184143341284379682788518559178822225126625428318115396632681141871952894291898364781898929292614792884883249356728741993224889167928232261325123447569829932951268292953928766755779761837993812528527484487298117739869189415599461746944992651752768158611996715467871381527675219481185217357632445748912726487669881876129192932995282777848496561259839781188719233951619188388532698519298142112853776942545211859134185231768952888462471642851588368445761489225786919778983848113833773768236969923939838755997989537648222217996381757542964844337285428654375499359997792679256881378967852376848812795761118139288152799921176874256377615952758268844139579622754965461884862647423491918913628848748756595463191585555385849335742224855473769411212376446591654846168189278959857681336724221434846946124915271196433144335482787432683848594487648477532498952572515118864475621828118274911298396748213136426357769991314661642612786847135485969889237193822718111269561741563479116832364485724716242176288642371849569664594194674763319687735723517614962575592111286177553435651952853878775431234327919595595658641534765455489561934548474291254387229751472883423413196845162752716925199866591883313638846474321161569892518574346226751366315311145777448781862222126923449311838564685882695889397531413937666673233451216968414288135984394249684886554812761191289485457945866524228415191549168557957633386991931186773843869999284468773866221976873998168818944399661463963658784821796272987155278195355579386768156718813624559264574836134419725187881514665834441359644955768658663278765363789664721736533517774292478192143934318399418188298753351815388561359528533778996296279366394386455544446922653976725113889842749182361253582433319351193862788433113852782596161148992233558144692913791714859516653421917841295749163469751479835492713392861519993791967927773114713888458982796514977717987598165486967786989991998142488631168697963816156374216224386193941566358543266646516247854435356941566492841213424915682394928959116411457967897614457497279472661229548612777155998358618945222326558176486944695689777438164612198225816646583996426313832539918

View File

@ -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)

View File

@ -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)

View File

@ -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?

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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?

View File

@ -0,0 +1 @@
289326

View File

@ -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))

View File

@ -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

View File

@ -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?

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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?

File diff suppressed because it is too large Load Diff

View File

@ -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()

View File

@ -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()

View File

@ -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?

View File

@ -0,0 +1 @@
14 0 15 12 11 11 3 5 1 6 8 4 9 1 8 4

View File

@ -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

View File

@ -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

View File

@ -2,6 +2,15 @@
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'] ],

View File

@ -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'] ],
];

View File

@ -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...)