This commit is contained in:
Ryan 2025-12-07 22:19:45 -05:00
commit d0ff801e7d
8 changed files with 7084 additions and 0 deletions

4802
day01/run.pl Executable file

File diff suppressed because it is too large Load Diff

50
day02/run.pl Executable file
View File

@ -0,0 +1,50 @@
#!/usr/bin/perl
use strict;
my $input = <DATA>;
chomp($input);
my @ranges = split(/,/,$input);
my $sum = 0;
my $sum2 = 0;
foreach my $range (@ranges) {
my($first,$last)=split(/-/, $range);
for(my $i=$first; $i<=$last; $i++) {
my $l = length "$i";
if($l % 2 == 0) {
if(substr($i, 0, $l/2) eq substr($i, $l/2, $l/2)) {
print "Invalid: $i\n";
$sum += $i;
$sum2 += $i;
next;
}
}
for(my $len = 1; $len <= (length "$i")/2; $len++) {
my $str = substr($i, 0, $len);
my $working = $str . $str;
while(length $working < length $i) {
$working .= $str;
}
if($working == $i) {
print "Invalid2: $i\n";
$sum2 += $i;
}
}
}
}
print "Sum is $sum\n";
print "Sum2 is $sum2\n";
__DATA__
10327-17387,74025-113072,79725385-79874177,964628-1052240,148-297,3-16,126979-227778,1601-2998,784-1207,831289-917268,55603410-55624466,317-692,602197-750430,17-32,38-58,362012-455626,3622441-3647505,883848601-883920224,62-105,766880-804855,9184965756-9185005415,490073-570277,2929273115-2929318135,23251-48475,9696863768-9697013088,229453-357173,29283366-29304416,4526-8370,3095-4389,4400617-4493438
11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124

230
day03/run.pl Executable file
View File

@ -0,0 +1,230 @@
#!/usr/bin/perl
use strict;
my $sum = 0;
while(my $line = <DATA>) {
chomp($line);
my @digits=split(//, $line);
my $largest = 0;
for(my $i = 0; $i < @digits-1; $i++) {
for(my $j = $i+1; $j < @digits; $j++) {
my $jolts = "$digits[$i]$digits[$j]";
$jolts -= 0;
if($jolts > $largest) {
$largest = $jolts;
}
}
}
print "Bank largest is $largest\n";
$sum += $largest;
}
print "Sum is $sum\n";
__DATA__
6483266694748235893324353634344523834567333718239477213324541343624714732212276727733744455653544463
2543337317334342631273222374427553353272735227457653731534224733335623431363332212323533535333423775
1171775673654754637242647675223455221523371731424421454256532546527447416736647162614542361475612389
7567565743232354274324358254636933332327665424362432136332633378463931143733733333654177443634254225
3667833563742535642357424443583444433164255464664643343695632444543476364514454626548444625765354499
2729241222329123457422528225142242286297497441472728464675615243626217526319294335298622221564523151
2325333232221221424422233712312233332414242223244343332373222423342332223232222224323113324424134121
3544334476455533445454545534445436354424551344431543444135385564453544474354339443944434454242338755
6923523553724555826545455454545465563455525532385543558554555555235643434455534555456645559345424222
3713331131214132232632357628271236732756335334225557312633533322223433322332227173323322633433254922
5542244352122346423342223444284353436224323233344224255121322454331242716436354234143274135135334244
7162743447536295246796527676468385557236589519624462613223526836654621342279883474452325226263273139
4471332775232839457784856429322785267271415576235256224744379223362354163425322422353251335223748294
4346211424422222426522412332342223124232433521222212522622224522222322922122242321289322241212612248
3933333344435332633335343333326333324324321343333324332323334233633323232443433333433133293233343433
6585685274872474256868558658651539948458889788546584884556944395687334789354443387445242654964945955
3444423533535542244342273333734333465764442334363243233342554334835822354446554325635232363334544548
2563356752365526724855523276722277363574179457365743447387745757634578562526634617646444554863768526
2242522423343223422432453234862232223322221132313423324224232226324222322292214127211224412315341423
2225142225732522238462261322432443222172541743212222131225232222324223225172352623222125222226242212
2323363432242323342311333232252133323413248233531234343423351422344524534342435211444332343233439442
3124262532255282347432332294321135222362424972252223112182152324318322321252222112253222225322411222
2245334552331524253681344534348345442133513353454238459543534745465382334735454123343442423442443934
3322422222222223122222222222224221222112222232222222223522323121222213122222121223422232122222131232
7236535664653565535465635366422265436332242234453634547553232665533563443734353355633544265445562333
3362228222422133327322222772233322323532313242322212322242351322234225224213233542333144332333732232
5342533334512341534142525424221433122414422241514334245311143541342335344222332112111535425322226789
2222243214211225332122232722325213322322423225222332422243224322212131234322342411431242521333111132
2431332622213122222213323233222342233233313224232242324234213522233121413222432153323432413214232234
2632254426445554463233675543663354252364264273442465369374465344265346322555224345426232653752624455
2224252122263212222122242313222322625222114243221342222222324122326121222213253142212212212332122364
5674534466565636646662676545665534646635666365564665664467564666456654668593362444446744666554554766
2454222496229621242121264211225262657254244599227752543642596753262384425725522523262558272113785222
4333432323883373233343244735353323242136522336393337312342133733333737585447336353334312334233239323
3332433332632332242243333552322345444322433333345334432744333233323424132333334222323463833284523413
3225241811225112222441225224646162357422421132224244342443617633253321224223252264222625752131322232
4142322221482422527722132262152123222226422234241226221372232422324226232222221444222443222222442221
2122112112142212212211232121221222211222212222312234222222211232222222223222222322212322121221222122
2222222124223222212223224331223222222326242213312222222222212213224221233221321222322222212132351222
2215272212212212522332314222232521222232222521242222212531222352522312512221122423322312132252251622
5436526445378684424444568445542446553648689488566256934745476233465425455768458459649634966485652754
1422422222243422422522234212312441122422233132242233322231331227221441425221242224221242222412312228
8231222334221221741123232222232152322232315112422323221722322421322352323271121232312214124212232323
3325242234162322342135122233155454333332422322233455243222233323823223332142212313335332223241223333
4355434445222544414334245223344754544163753444544243558755432234535445443344142335537441342345446474
1336312223124525222322223222222213232342243323253221361234446112263212426251322332225112221253222233
5367888866834536575377596677847443874839579585537663878498345777388579874847657388547557778388818978
2222213321112122221111232422112222122223221312311222222131322332212322122322131232232132131222232123
3319333223232123222212223528122362522252273222226227732322322223232422222422522322431371432222222232
4355789657548436447545456596283356475869755625945566544654679445655355546846875533957745363857553589
5235225434349223431221222424313242712267423544361221222222432412229272243123723224342524222212632342
2232231222122221223724222422222125252223122321222232251223222222222224322222453212121222223341222221
5335333343343333323223232734333333233333332333333333311333333333443133231163334332323332333334323463
4255625361645633666646124144326161525216345554523444653556146322361311515343261335365113243661233789
7638667436624684272673416624275555636244728456452876428697425422424259567247763874791543766747372775
3141123121222122233433211221222322221415211223222232222112221323222222214312412312222222224222232225
3263325433434645353436644264134498453455335834345444242346367354926234874355635644547423347374434443
1332323273353313234322223334314333332133731353332373323223327333323323333626322347333682322332333333
6463656765552554543425465563446455656563555455545563554535554853535655545655553548556745535538457455
3342333133334332433231323232223333333232392232332442322331233333322132423632422282238312383323333223
2239121232221122222221642224222152222112223221122212232325422521124212442231223242222313522422121283
2222162222222172222222221221112262132323112222323212421222222132226231222222212223222222244222123222
3187737233433234335276133212333147245233337362234333126333243134333353227422213242224252522627332123
4532432376547655675765547764667466877716765473677694554655366743365573554745575736644564576556965855
5336333374522244425439832113542436353233123232543534342335224132212125323322653232232223233343633562
3632763655342634236354433162354345234437531354343564134386374437451476636364473437247454232643345433
2231322422125242242122214222222172122214222122312252221222122224422124322222221124232222222223323411
4343242244223252454116323222222111124322221422152322522621242252333283221223253422441354223225232353
4733234344423243544433655552447441554644654354445433232534534522144534453434484123596594534564235243
2242324335312322343323333334222223513523322413323133534352324433233334433334523233232323522432213223
5664154336445666586466665822868667436646448646574566655654531564345646667566564366565356566454565463
2243624221242162522322171325223532451332126472211123222274224334222223233422226221632322231422123222
2121232232222332233332222222232212222222112242252122322422123222231132122222112341222122231211212221
2222222223222113222232322222312221142322223333121222322232313322424222322123223422112223222233222313
3351253554553235543435435432424433436649153196594374552542143345255545443494452444446455436234367546
3241224772334661376724457242123523612145222752236442126633762256448232425611684252244225134252684324
2569464654525636566535646646266655647666486763585683566656464486544667656654644644156667676243666586
2382324222332222244447232233322572322223243222221422219222231322231222825162123922527332212224313325
4633421245214332232234444426324243423431225513232342433322223132534212323224133342293321242423313354
3323223252712538235234333613421472592337232341221333327923237322346131321733378124233222143331214389
3441456554443634514434423348343244343334414934354346374444442443564645424565443953442444433244236443
2226222221322152342212272622211121325743254222221223332232112221342243132232216242223232624232232422
3232342241212243222423423313121222234241243233523322353433163322325322332323213232233223322232321413
3221652432352232564241242242231524222224261231215352244222532554255152242567243221427245211124252222
2221222142213111212222222424162222132252224222122225222284322224321162524312222211122221122142222221
5335313543133432353344723323322346313732352334545142262332335133633433644233333634335235333543323354
5434564663455635666754354454454453465541545545544555553554533454535435555364353343555566354544455145
5252551148532423644724269592229555342433225273533524123134724325552532324348213234824252373335427325
5856686513557539652366563544665675566443674579553566479656787777665534667354446457256657667864556465
1251222232221231222223222222233222213331222222322211322222212221223222322322222212122222233322212422
8458546645558756745657566656465566564565865555466745554556556676565786666556555665553658656585655556
3432323239345643435333333333332353333337432343243633334253752353233342224334553333233313333393533553
3421422362212422252232633328842222332323633222322233112336322321234523223222522222222424222233334231
2123625336322625334512112243442224543555521424235253452532153223126465623551122254443224432523453525
4122221543722232275516326144842223112823224222231222221122124222222262152221411322244125746222356778
2322422222224122243424226322344835262425252111121223451222223234432162221226222212242213222633127233
8434432236341443628422391263414236223173333438544421383847216542247624123365692613327333754535435243
2652624354532763656244344355474341443223256424648253744256344172555215334857439454543663333134287743
7357546615466634433443573336674233554454227313242344244643244344333737543646731174537524373356531242
3882559275526542566532556564565255286724325665653727346734533476221733134455246561852322323591516576
3324342323323336353363233333732313323231313334372252133122122234113412132333334313332222532323223225
5648657452244467531938536766623967836658674751368875384543688794429466647543224146436626426786644693
2411225564532222522462422431622243322531264124234153152144352424234215122353341233123232124224322412
4222244444245423522434212441442345545135432342122442441444525244242542243333244443342525244434443233
5465435555966664455444553336236556663724633434394665343662439454644352635444663948624664445224246545
1432453433446393425346434245514432413453343353335242445434336552234231531543533443435374425324412252
4336572233323134323444342354334334547453436543544333344444244423543543446437732361245333334265334454
2676766556687553276876274579178576652387264737666476787497543476721452354347415279755657774467276664
3344333322223432324242213231632223223333213221422323132323234522231323442233323232652233323314343254
5563746886467958543795793558734554479385547744827467647476986636777562776695684678649689788685475659
4422233522213432344333343133223123212233443434622344344322413411423122322312245323212232213242242334
3344622322422423222243244224214432442336424334262521443223343322633135324463233412322314233512534242
3232321712232121212212223232262552223244112235142362365223332222223233326336552241222145222222346264
3644565538765869435533562635188694756636566645546767565399364946666665237666774651366664976963675667
3945556445535346464334234433543343373464435445544534644436433274645292244533433356524354433344444545
7645578859533418887755944347764436445126484186538387754736853734354838367544543436534748684774783975
3786228343532223264261123222243523734242633532221216324264146232126342128444245322552455433862432252
3251222222232911232222524222252222712222233112242222616232212123322221232313232223322352121221323322
2322412234122243452551332442313522545253525222141114353732322522222362422214234542222221526225248214
7565676654727668574665556666175766566653667465455626664555633676543465675755666645565566654645555666
4745721722122215757215622524727444256942348717545353274725745555453234444732572254326652534437222662
2434234123332521432433543122343412453334142442174323244323362343446443234344334334354343424444332232
3232225263124251225251532224272298324231133226834123663224252253227733325232824571222312832152243222
4443433336334445343343443432444434233334443432343675433321474334363243423234444421427442373432424444
2528622135624531665357334382325366524622274846326245252623632442931344344686553345516652263563563344
2233212123232112331212212222223222322132233322232222333122212232232213252322223342152221232232153323
3133337557443333234243434633433322467325333343756334453343333343334453353334535324423334573349344364
8497925152935233732523223852696633133816242673326874262931173827238284722131232527573292228932314729
3242443243122343443133222435222312213214254283123234336231616434325123223631342644222542343253421533
6443257368735277857353954743366633958737346734243626663752259329635337635643425367875165555749634736
3433332441231132312432441432211144132311432432231312123131111112123341214231141341112433433331156789
2622332343221232241335222222343332212234322252243322233242346312122233223332323222522223321422422322
3972265296526213223133522588332357758222292253177621632572233246643332363736661578228493422762563226
3494543445353433344448833521556833234423324452636533255257543455344342646458333443532535343444535334
4676538343538565343353455455553967756631663666538333674336345766835335653396563345373429866382636544
1222122232121223223233122132331222283232113222252242322332231112122222233223213322222122233232223222
3134225414344236633244332422122644572337356413663633373234446446364474243446624549545245762435276634
4222142222214222251664242724292122312222212123222222225421642233224112222741229323222124224111122122
2373328274625382475124241922213111252123435232222322722252219331232224234142526234272123515129242232
5544543358645255454724445444345446544442344445352244347365654443463433245543454444353535644445224224
4446655724343346755425544416598555246352254245425544865646452382644844876664355544234743251446442933
2112222232125222222222321222222125222221332222221122211221222122222223422211322222222222122542221222
3222323622235231222312323333133223323222322422321333122322213732212322322123221122222212222223232213
1122224322322232223221622226223121122452222542523122322252222432123323412223212242132353212222222222
4333425336554443454458124553525366364236624352255426246366354563663525636534335863554452324546366625
2146233244324244314449343222474432322242443224532323142483226244332354232334122548734374243933442774
1332324245522322224234221212322221322283263213352122222222223521262222512212512222243231281223322222
1223143223364224122222353333332422222225222432243232332343223239233333211222333322223223324321124224
3464487424246534432675344132562554213223266443252443444444574323726424344834421627245244334534456235
2223221222123311232222721212232421222222242241226222232312215222231223124321332442545132213222223222
2232342333222225413224224234232122232222332332233823312322233222233423321322333232321622333132226212
4233234343136422333221334434324433422433423224244234622242332313427433524233223522242345255442443343
5887315931336232922652422972482265594294593395515537627975525242715825417429226928725375224464921127
6656885665436489796564766657452646775784788585557613664375576543655367345676363664456676364565656665
2322423242232241161422432223231221222221621422252222222322338333221232122213331212249343212133328423
7543345463444634356562266635446632182453232355315333571457578355735657643433234412544433664576626623
3234222143232332434132232223223222432233233224332212442243323242222433423323322332227222624354421352
2132422513522232316232332233232532324232635222425433224522251242225332211222621455223212442432451421
5326232325252326521226524346423521176572132222254322754222123162226227224426253652326256245561222565
3442424243423144141423336561332225163336641334145422622623522532559424623252225433152324126546235233
3422321224221314732123313232523126612213222122324334223423342252222433232133212323322223142322221242
8264442752223446994865726277726727756343878473857483728256427474473632713865355533668957575367786675
2354836226222532428425542623362343536646226212222532351332434562123232223452424227655641632221762233
5664534552344446442444537443454546344244645454436456146563415422332464433456443445643424314646346634
6463565542544255264485555545353644246556635644484654644555446454435673446655443555732565945656567236
6355655665527692545684584653566652554819768774545765878425567322656664568624656574587564574572366385
3234635425722737232252335242266522272537232322282236835677286645635172541234473773221373163223424634
2242354522559228525413357172723135198226136232442322256572434325143963523321922328233243342344645272
1222322222223222132223222153211223323222212133524121121132122221225322222223345222222325225212222522
1233232223244415224123423222313272242282263533254422322211232222221522232222232231321222432222132322
4554634644453466369563686376545543644474635669644434556646363654657434543464664436534656334934456564
2759365842345327331433223323933692623533364924333372274833594632288683535939326332224122731332325133
2236245252222212216122226252225422322222929211213522328122221622222332223222211312251262422221363711
2322219151212838742722222831242221612121221442128322212621262222224222272222212241214121228225222235
8654666752657568667665843686673568558727666766668546662365484318268665555864884585768766545657476766
4323662222424553233338223355533524329375214455362223863532553356156646364581336234636322666463164321
2251222221132121212222222222323221122212227212222112232522512212211125221121232222222222121512222222
8335363283543566442636253665533444335323131413453535433332353253126334234443246535465333443767534445
4351244143435244333421443343412434324224347231545244278455457334255232446544244442334345864522323554
6423477564644426547555464455945555345254457454754445593334544343756445554584764334355754436735534375
3326244234233341332632432332423551339222222343325373415334342321533123222323332331523632331924343233
2322222212222425432122222232222221624312222223233121124222221222122333222222334233224222124122222242
8251448334422852181781163234764634754342482156661134615731214484221431832655823545764714858131321319
6665545676626665656565454566656674652665656532943465954566556559666556665444696669565976665645666566
1421443224322321222223232132222322523422273223221226324223622234313152242214232212214122122122223122
5723366361747394534563454393673232443632544354432566235442477666343636365464734433344454232365277632
4326724434644345272343434636222544564528544653524234333435432725367686233125243347543233538354734535
6413258266442636453636253232443235232151532243562512524323414232335225232525322536245321442222433234
3344315434434335222444645333534323252552525223654424445134123324235475533333754254334434412464433436
2322363422225726126633232313332242431333635246316294232723332253223524432225353672642232346223452424
3324142234845637532347244733333464724844532372247332342332534454443223343733332451453641733332337247
7337536327433333523313232233333335663462235342527341215333333312353133231533355312234437581223433313
6864534546668468595746496547766759676656466556436588644845499637688686773646793563465569745692643655
3355252311225229253132526372333323468222222462232352123343323153225532334523432412324422225412324253
4741456744554566558585637656545845844939484345384344956545565448427473734546453346746455365647546644
4322411232232333223322333242422422422349221123222244332252135132232321363391342331221133233242112322
9474349344693856956976575499438338936763458744948576959895532598674748534597986884674856393374467595
1523633734318365434557152166343555421587416555334154526346464574453744545413624314233574254324333338
7434822223365329743422655982332652199724488556213687413364776632715225357925244447743972634262467445
3311715122232222222352222253152252223212121622212222224127222252241242312142212272222325636223122112

243
day03/run2.pl Executable file
View File

@ -0,0 +1,243 @@
#!/usr/bin/perl
use strict;
my $sum = 0;
while(my $line = <DATA>) {
chomp($line);
my @digits=split(//, $line);
my @p;
my $largest = nextpartR([], \@digits);
print "Bank largest is $largest\n";
$sum += $largest;
}
print "Sum is $sum\n";
sub nextpartR {
my($ref, $remain)=@_;
if(@$ref == 12) {
my $num=join('',@$ref);
return $num-0;
} elsif(@$ref + @$remain < 12) {
return undef;
}
for(my $largest = 9; $largest > 0; $largest--) {
my @cp = @$remain;
my $result = 0;
while(@cp) {
my $num = shift(@cp);
next unless($num == $largest);
my $r = nextpartR([@$ref,$largest], [@cp]);
if($r > $result) {
$result = $r;
}
}
return $result if($result>0);
}
}
__DATA__
6483266694748235893324353634344523834567333718239477213324541343624714732212276727733744455653544463
2543337317334342631273222374427553353272735227457653731534224733335623431363332212323533535333423775
1171775673654754637242647675223455221523371731424421454256532546527447416736647162614542361475612389
7567565743232354274324358254636933332327665424362432136332633378463931143733733333654177443634254225
3667833563742535642357424443583444433164255464664643343695632444543476364514454626548444625765354499
2729241222329123457422528225142242286297497441472728464675615243626217526319294335298622221564523151
2325333232221221424422233712312233332414242223244343332373222423342332223232222224323113324424134121
3544334476455533445454545534445436354424551344431543444135385564453544474354339443944434454242338755
6923523553724555826545455454545465563455525532385543558554555555235643434455534555456645559345424222
3713331131214132232632357628271236732756335334225557312633533322223433322332227173323322633433254922
5542244352122346423342223444284353436224323233344224255121322454331242716436354234143274135135334244
7162743447536295246796527676468385557236589519624462613223526836654621342279883474452325226263273139
4471332775232839457784856429322785267271415576235256224744379223362354163425322422353251335223748294
4346211424422222426522412332342223124232433521222212522622224522222322922122242321289322241212612248
3933333344435332633335343333326333324324321343333324332323334233633323232443433333433133293233343433
6585685274872474256868558658651539948458889788546584884556944395687334789354443387445242654964945955
3444423533535542244342273333734333465764442334363243233342554334835822354446554325635232363334544548
2563356752365526724855523276722277363574179457365743447387745757634578562526634617646444554863768526
2242522423343223422432453234862232223322221132313423324224232226324222322292214127211224412315341423
2225142225732522238462261322432443222172541743212222131225232222324223225172352623222125222226242212
2323363432242323342311333232252133323413248233531234343423351422344524534342435211444332343233439442
3124262532255282347432332294321135222362424972252223112182152324318322321252222112253222225322411222
2245334552331524253681344534348345442133513353454238459543534745465382334735454123343442423442443934
3322422222222223122222222222224221222112222232222222223522323121222213122222121223422232122222131232
7236535664653565535465635366422265436332242234453634547553232665533563443734353355633544265445562333
3362228222422133327322222772233322323532313242322212322242351322234225224213233542333144332333732232
5342533334512341534142525424221433122414422241514334245311143541342335344222332112111535425322226789
2222243214211225332122232722325213322322423225222332422243224322212131234322342411431242521333111132
2431332622213122222213323233222342233233313224232242324234213522233121413222432153323432413214232234
2632254426445554463233675543663354252364264273442465369374465344265346322555224345426232653752624455
2224252122263212222122242313222322625222114243221342222222324122326121222213253142212212212332122364
5674534466565636646662676545665534646635666365564665664467564666456654668593362444446744666554554766
2454222496229621242121264211225262657254244599227752543642596753262384425725522523262558272113785222
4333432323883373233343244735353323242136522336393337312342133733333737585447336353334312334233239323
3332433332632332242243333552322345444322433333345334432744333233323424132333334222323463833284523413
3225241811225112222441225224646162357422421132224244342443617633253321224223252264222625752131322232
4142322221482422527722132262152123222226422234241226221372232422324226232222221444222443222222442221
2122112112142212212211232121221222211222212222312234222222211232222222223222222322212322121221222122
2222222124223222212223224331223222222326242213312222222222212213224221233221321222322222212132351222
2215272212212212522332314222232521222232222521242222212531222352522312512221122423322312132252251622
5436526445378684424444568445542446553648689488566256934745476233465425455768458459649634966485652754
1422422222243422422522234212312441122422233132242233322231331227221441425221242224221242222412312228
8231222334221221741123232222232152322232315112422323221722322421322352323271121232312214124212232323
3325242234162322342135122233155454333332422322233455243222233323823223332142212313335332223241223333
4355434445222544414334245223344754544163753444544243558755432234535445443344142335537441342345446474
1336312223124525222322223222222213232342243323253221361234446112263212426251322332225112221253222233
5367888866834536575377596677847443874839579585537663878498345777388579874847657388547557778388818978
2222213321112122221111232422112222122223221312311222222131322332212322122322131232232132131222232123
3319333223232123222212223528122362522252273222226227732322322223232422222422522322431371432222222232
4355789657548436447545456596283356475869755625945566544654679445655355546846875533957745363857553589
5235225434349223431221222424313242712267423544361221222222432412229272243123723224342524222212632342
2232231222122221223724222422222125252223122321222232251223222222222224322222453212121222223341222221
5335333343343333323223232734333333233333332333333333311333333333443133231163334332323332333334323463
4255625361645633666646124144326161525216345554523444653556146322361311515343261335365113243661233789
7638667436624684272673416624275555636244728456452876428697425422424259567247763874791543766747372775
3141123121222122233433211221222322221415211223222232222112221323222222214312412312222222224222232225
3263325433434645353436644264134498453455335834345444242346367354926234874355635644547423347374434443
1332323273353313234322223334314333332133731353332373323223327333323323333626322347333682322332333333
6463656765552554543425465563446455656563555455545563554535554853535655545655553548556745535538457455
3342333133334332433231323232223333333232392232332442322331233333322132423632422282238312383323333223
2239121232221122222221642224222152222112223221122212232325422521124212442231223242222313522422121283
2222162222222172222222221221112262132323112222323212421222222132226231222222212223222222244222123222
3187737233433234335276133212333147245233337362234333126333243134333353227422213242224252522627332123
4532432376547655675765547764667466877716765473677694554655366743365573554745575736644564576556965855
5336333374522244425439832113542436353233123232543534342335224132212125323322653232232223233343633562
3632763655342634236354433162354345234437531354343564134386374437451476636364473437247454232643345433
2231322422125242242122214222222172122214222122312252221222122224422124322222221124232222222223323411
4343242244223252454116323222222111124322221422152322522621242252333283221223253422441354223225232353
4733234344423243544433655552447441554644654354445433232534534522144534453434484123596594534564235243
2242324335312322343323333334222223513523322413323133534352324433233334433334523233232323522432213223
5664154336445666586466665822868667436646448646574566655654531564345646667566564366565356566454565463
2243624221242162522322171325223532451332126472211123222274224334222223233422226221632322231422123222
2121232232222332233332222222232212222222112242252122322422123222231132122222112341222122231211212221
2222222223222113222232322222312221142322223333121222322232313322424222322123223422112223222233222313
3351253554553235543435435432424433436649153196594374552542143345255545443494452444446455436234367546
3241224772334661376724457242123523612145222752236442126633762256448232425611684252244225134252684324
2569464654525636566535646646266655647666486763585683566656464486544667656654644644156667676243666586
2382324222332222244447232233322572322223243222221422219222231322231222825162123922527332212224313325
4633421245214332232234444426324243423431225513232342433322223132534212323224133342293321242423313354
3323223252712538235234333613421472592337232341221333327923237322346131321733378124233222143331214389
3441456554443634514434423348343244343334414934354346374444442443564645424565443953442444433244236443
2226222221322152342212272622211121325743254222221223332232112221342243132232216242223232624232232422
3232342241212243222423423313121222234241243233523322353433163322325322332323213232233223322232321413
3221652432352232564241242242231524222224261231215352244222532554255152242567243221427245211124252222
2221222142213111212222222424162222132252224222122225222284322224321162524312222211122221122142222221
5335313543133432353344723323322346313732352334545142262332335133633433644233333634335235333543323354
5434564663455635666754354454454453465541545545544555553554533454535435555364353343555566354544455145
5252551148532423644724269592229555342433225273533524123134724325552532324348213234824252373335427325
5856686513557539652366563544665675566443674579553566479656787777665534667354446457256657667864556465
1251222232221231222223222222233222213331222222322211322222212221223222322322222212122222233322212422
8458546645558756745657566656465566564565865555466745554556556676565786666556555665553658656585655556
3432323239345643435333333333332353333337432343243633334253752353233342224334553333233313333393533553
3421422362212422252232633328842222332323633222322233112336322321234523223222522222222424222233334231
2123625336322625334512112243442224543555521424235253452532153223126465623551122254443224432523453525
4122221543722232275516326144842223112823224222231222221122124222222262152221411322244125746222356778
2322422222224122243424226322344835262425252111121223451222223234432162221226222212242213222633127233
8434432236341443628422391263414236223173333438544421383847216542247624123365692613327333754535435243
2652624354532763656244344355474341443223256424648253744256344172555215334857439454543663333134287743
7357546615466634433443573336674233554454227313242344244643244344333737543646731174537524373356531242
3882559275526542566532556564565255286724325665653727346734533476221733134455246561852322323591516576
3324342323323336353363233333732313323231313334372252133122122234113412132333334313332222532323223225
5648657452244467531938536766623967836658674751368875384543688794429466647543224146436626426786644693
2411225564532222522462422431622243322531264124234153152144352424234215122353341233123232124224322412
4222244444245423522434212441442345545135432342122442441444525244242542243333244443342525244434443233
5465435555966664455444553336236556663724633434394665343662439454644352635444663948624664445224246545
1432453433446393425346434245514432413453343353335242445434336552234231531543533443435374425324412252
4336572233323134323444342354334334547453436543544333344444244423543543446437732361245333334265334454
2676766556687553276876274579178576652387264737666476787497543476721452354347415279755657774467276664
3344333322223432324242213231632223223333213221422323132323234522231323442233323232652233323314343254
5563746886467958543795793558734554479385547744827467647476986636777562776695684678649689788685475659
4422233522213432344333343133223123212233443434622344344322413411423122322312245323212232213242242334
3344622322422423222243244224214432442336424334262521443223343322633135324463233412322314233512534242
3232321712232121212212223232262552223244112235142362365223332222223233326336552241222145222222346264
3644565538765869435533562635188694756636566645546767565399364946666665237666774651366664976963675667
3945556445535346464334234433543343373464435445544534644436433274645292244533433356524354433344444545
7645578859533418887755944347764436445126484186538387754736853734354838367544543436534748684774783975
3786228343532223264261123222243523734242633532221216324264146232126342128444245322552455433862432252
3251222222232911232222524222252222712222233112242222616232212123322221232313232223322352121221323322
2322412234122243452551332442313522545253525222141114353732322522222362422214234542222221526225248214
7565676654727668574665556666175766566653667465455626664555633676543465675755666645565566654645555666
4745721722122215757215622524727444256942348717545353274725745555453234444732572254326652534437222662
2434234123332521432433543122343412453334142442174323244323362343446443234344334334354343424444332232
3232225263124251225251532224272298324231133226834123663224252253227733325232824571222312832152243222
4443433336334445343343443432444434233334443432343675433321474334363243423234444421427442373432424444
2528622135624531665357334382325366524622274846326245252623632442931344344686553345516652263563563344
2233212123232112331212212222223222322132233322232222333122212232232213252322223342152221232232153323
3133337557443333234243434633433322467325333343756334453343333343334453353334535324423334573349344364
8497925152935233732523223852696633133816242673326874262931173827238284722131232527573292228932314729
3242443243122343443133222435222312213214254283123234336231616434325123223631342644222542343253421533
6443257368735277857353954743366633958737346734243626663752259329635337635643425367875165555749634736
3433332441231132312432441432211144132311432432231312123131111112123341214231141341112433433331156789
2622332343221232241335222222343332212234322252243322233242346312122233223332323222522223321422422322
3972265296526213223133522588332357758222292253177621632572233246643332363736661578228493422762563226
3494543445353433344448833521556833234423324452636533255257543455344342646458333443532535343444535334
4676538343538565343353455455553967756631663666538333674336345766835335653396563345373429866382636544
1222122232121223223233122132331222283232113222252242322332231112122222233223213322222122233232223222
3134225414344236633244332422122644572337356413663633373234446446364474243446624549545245762435276634
4222142222214222251664242724292122312222212123222222225421642233224112222741229323222124224111122122
2373328274625382475124241922213111252123435232222322722252219331232224234142526234272123515129242232
5544543358645255454724445444345446544442344445352244347365654443463433245543454444353535644445224224
4446655724343346755425544416598555246352254245425544865646452382644844876664355544234743251446442933
2112222232125222222222321222222125222221332222221122211221222122222223422211322222222222122542221222
3222323622235231222312323333133223323222322422321333122322213732212322322123221122222212222223232213
1122224322322232223221622226223121122452222542523122322252222432123323412223212242132353212222222222
4333425336554443454458124553525366364236624352255426246366354563663525636534335863554452324546366625
2146233244324244314449343222474432322242443224532323142483226244332354232334122548734374243933442774
1332324245522322224234221212322221322283263213352122222222223521262222512212512222243231281223322222
1223143223364224122222353333332422222225222432243232332343223239233333211222333322223223324321124224
3464487424246534432675344132562554213223266443252443444444574323726424344834421627245244334534456235
2223221222123311232222721212232421222222242241226222232312215222231223124321332442545132213222223222
2232342333222225413224224234232122232222332332233823312322233222233423321322333232321622333132226212
4233234343136422333221334434324433422433423224244234622242332313427433524233223522242345255442443343
5887315931336232922652422972482265594294593395515537627975525242715825417429226928725375224464921127
6656885665436489796564766657452646775784788585557613664375576543655367345676363664456676364565656665
2322423242232241161422432223231221222221621422252222222322338333221232122213331212249343212133328423
7543345463444634356562266635446632182453232355315333571457578355735657643433234412544433664576626623
3234222143232332434132232223223222432233233224332212442243323242222433423323322332227222624354421352
2132422513522232316232332233232532324232635222425433224522251242225332211222621455223212442432451421
5326232325252326521226524346423521176572132222254322754222123162226227224426253652326256245561222565
3442424243423144141423336561332225163336641334145422622623522532559424623252225433152324126546235233
3422321224221314732123313232523126612213222122324334223423342252222433232133212323322223142322221242
8264442752223446994865726277726727756343878473857483728256427474473632713865355533668957575367786675
2354836226222532428425542623362343536646226212222532351332434562123232223452424227655641632221762233
5664534552344446442444537443454546344244645454436456146563415422332464433456443445643424314646346634
6463565542544255264485555545353644246556635644484654644555446454435673446655443555732565945656567236
6355655665527692545684584653566652554819768774545765878425567322656664568624656574587564574572366385
3234635425722737232252335242266522272537232322282236835677286645635172541234473773221373163223424634
2242354522559228525413357172723135198226136232442322256572434325143963523321922328233243342344645272
1222322222223222132223222153211223323222212133524121121132122221225322222223345222222325225212222522
1233232223244415224123423222313272242282263533254422322211232222221522232222232231321222432222132322
4554634644453466369563686376545543644474635669644434556646363654657434543464664436534656334934456564
2759365842345327331433223323933692623533364924333372274833594632288683535939326332224122731332325133
2236245252222212216122226252225422322222929211213522328122221622222332223222211312251262422221363711
2322219151212838742722222831242221612121221442128322212621262222224222272222212241214121228225222235
8654666752657568667665843686673568558727666766668546662365484318268665555864884585768766545657476766
4323662222424553233338223355533524329375214455362223863532553356156646364581336234636322666463164321
2251222221132121212222222222323221122212227212222112232522512212211125221121232222222222121512222222
8335363283543566442636253665533444335323131413453535433332353253126334234443246535465333443767534445
4351244143435244333421443343412434324224347231545244278455457334255232446544244442334345864522323554
6423477564644426547555464455945555345254457454754445593334544343756445554584764334355754436735534375
3326244234233341332632432332423551339222222343325373415334342321533123222323332331523632331924343233
2322222212222425432122222232222221624312222223233121124222221222122333222222334233224222124122222242
8251448334422852181781163234764634754342482156661134615731214484221431832655823545764714858131321319
6665545676626665656565454566656674652665656532943465954566556559666556665444696669565976665645666566
1421443224322321222223232132222322523422273223221226324223622234313152242214232212214122122122223122
5723366361747394534563454393673232443632544354432566235442477666343636365464734433344454232365277632
4326724434644345272343434636222544564528544653524234333435432725367686233125243347543233538354734535
6413258266442636453636253232443235232151532243562512524323414232335225232525322536245321442222433234
3344315434434335222444645333534323252552525223654424445134123324235475533333754254334434412464433436
2322363422225726126633232313332242431333635246316294232723332253223524432225353672642232346223452424
3324142234845637532347244733333464724844532372247332342332534454443223343733332451453641733332337247
7337536327433333523313232233333335663462235342527341215333333312353133231533355312234437581223433313
6864534546668468595746496547766759676656466556436588644845499637688686773646793563465569745692643655
3355252311225229253132526372333323468222222462232352123343323153225532334523432412324422225412324253
4741456744554566558585637656545845844939484345384344956545565448427473734546453346746455365647546644
4322411232232333223322333242422422422349221123222244332252135132232321363391342331221133233242112322
9474349344693856956976575499438338936763458744948576959895532598674748534597986884674856393374467595
1523633734318365434557152166343555421587416555334154526346464574453744545413624314233574254324333338
7434822223365329743422655982332652199724488556213687413364776632715225357925244447743972634262467445
3311715122232222222352222253152252223212121622212222224127222252241242312142212272222325636223122112

189
day04/run.pl Executable file
View File

@ -0,0 +1,189 @@
#!/usr/bin/perl
use strict;
my $totalsum = 0;
my @rows;
while(my $line=<DATA>) {
chomp $line;
my @row = split(//,$line);
push @row, '.';
unshift @row, '.';
push @rows, \@row;
}
my $tr = $rows[0];
push @rows, [ map { '.' } @$tr ];
unshift @rows, [ map { '.' } @$tr ];
for(;;) {
my @remove;
my $sum = 0;
for(my $y=1; $y<@rows-1; $y++) {
my $uprow = $rows[$y-1];
my $row = $rows[$y];
my $downrow = $rows[$y+1];
for(my $x=1; $x<@{$rows[0]}-1; $x++) {
next if($row->[$x] ne '@');
my @n = (@{$uprow}[$x-1,$x,$x+1], @{$row}[$x-1,$x+1], @{$downrow}[$x-1,$x,$x+1]);
my $count = grep { $_ eq '@' } @n;
if($count < 4) {
$sum++;
push @remove, [$y, $x];
}
}
}
$totalsum += $sum;
if($sum == 0) {
last;
}
foreach my $ref (@remove) {
my($y,$x)=@$ref;
$rows[$y][$x]='.';
}
print "Found $sum\n";
}
print "Got a total of $totalsum\n";
__DATA__
@@@@@.@@@@@@@.@.@@@.@@@..@@@@@@...@...@@...@@@@@@@@.@@@@@@@@@@@@@@@@@...@@@..@@@.....@..@@@@@.@@@@...@@@@@@@@@@@@.@@@@@@.@..@@@@@..@.@@..
...@@@.@@@..@@@@..@.@..@@....@@.@@@.@...@.@@@...@@.@@@..@@@.@@@..@.@@.@.@.@@..@@@@@..@@@@.@@@@.@@.@@@@..@@.@@.@@.@@@@.@@.@@@@@@@@.@.@..@@
@@.@@@@@@..@@..@@@@@@.@@@@@.@..@@@@@@@.@.@@.@..@..@@@@.@@.@@@..@@.@@.@@.@.@@@.@@@.@@@@@@@@.@.@@@@..@@@..@@@.@.@.@@@@.@@@@@@@@@@..@...@@.@
.@@@@.@@.@@@.@@@@@@@@@..@.@@@.@@@.@@@@@@.@@@@.@...@@@..@@....@@@@.@.@.@@...@.@@@..@@@.@@@@@@@@@@@......@.@@@@.@@@@@@.@..@@@@.@.@.@.@@@@@.
@@@@@@@.@@..@@@@@@.@@@@@.@@@..@.@@@@.@@@@@..@@@@@@@@@@@@.@@@.@@@.@@@.@@@.@.@.@@.@..@@..@@@@..@.@@.@.@@......@@@.@.@.@@...@@@@@.@@@@@@@.@.
.@...@..@@@..@@@@@@@@.@.@.@.@.@@.@.@.@@.@.@@...@..@.@.@@@.@@@..@@@@@@.@@@@..@@.@.@@.@..@.@@@@@.@@.@..@@@@..@@@@@.@@@@@.@.@@.@@@..@...@@.@
.@.@@.@..@.@.@.@@@@@.@.@@@@.@.@@@@..@@..@..@.@@@.@@@.@@@.@.@@@.@..@@@@@@@@@.@@@@@@.@@@@@@..@.@@@@...@.@@@@@@.@.@@@@@@@@@@@@@@@.@@..@@@@@.
@@@...@.@@@.@@@@@@.@@@@..@@..@@.@.@@.@..@@.@...@@@.@@@.@@@.@.@@@@..@@@@.@@.@@@.@@@.@.@..@@.@@..@@@@@@@....@@@@@@@@@@@.@..@@.@.@@@@@.@@@..
@@@.@@.@@...@@@@@@@@@@@.@...@.@...@@@@...@@@@@@@.@@....@.@@.@..@@.@.@.@.@...@@.@....@@..@..@.@@@@@..@@@@.@@@@@@..@@.@@.@..@@@@@@@@@.@@.@@
@@...@@@@@@.@.....@@@.@@@@@@..@.@.@.@@@.@..@@@@@@.@@@@@@@@.@@@@@.@@.@.@..@...@....@@@.@@@..@@@@@@@@...@..@@@@@@.@@@@@@.@@@..@@@@@@..@.@@.
@@...@@..@@@@@...@@@@@.@..@.@..@@.@.@...@.@@@@@@@@@@.@...@@..@@@.@@@@..@@..@...@@@...@...@.@.@.@@..@@@.@@.@@@@@@@@.@@@@@@@@...@.@.@@.@@@@
.@@...@@.@.@@.@@@.@.@@@..@@@@@@.@.@@..@@...@@.@..@@..@.@@@.@@@@@@@@.@@.@@.@@@@@@@..@@@.@@..@@@@.@.@.@.@@@@.@@.@.@@@@@@@@..@@@@.@@@@..@.@@
@.@.@@@@@.@..@@.@@....@.@@.@@@@@@@@@@.@.@@@.......@@@@.@@..@@.@@.@@@.@@@@@@@@.@.@.@.@@@.@@@@..@....@.@@@@....@...@.@@.@@@@..@......@@..@.
@....@@@@@@@@@@@@@@@@@@.@...@@.@@.@@@@@@@@.@.@@@@@@@.@@@@@@.@@@@@@..@..@@..@....@..@@@@..@@@..@@@@.@.@@@.@.@....@@.@@...@@.@.@.@@@@.@@@.@
@.@@@@@.@@@@..@@..@@@@...@@.@@@@@..@@.@@@@@@@@@@.@@@@@@@.@..@.@@.@@..@@@@.@@@@.@@@.@.@..@@@.@..@@@.@.@@@.@@.@@.@@..@@@@@.@..@@@@@@@@@@@@.
@@@@.@@@@@.@@.@@@@@.@@@.@@@.@@..@@@@.@@@..@.@.@@@@...@@.@@@.@@.@.@@@@@@.@.@@@@@@@..@@@@@@..@@@.....@.@.@@@@@....@.@@..@.@@..@@@@@@.@@@@..
@.@@.@@@@.@@@@@.@@.@@@@@.@...@@@.@@@@.@.@.@@@@@.@.@@.@@@@...@...@..@.@.@@@.@@@@@.@@@@.@.@@@.@@@@@@.@@@.@.@@@.@@@@..@@@.@@.@@@@@@@.@@@@@@@
...@.@@.@@@@.@@.@@@.@@@.@..@..@@..@@@.@@@.@.@.@.@@@..@.@@@@.@@.@@@@@@@@@..@@.@@@@@..@@@@..@@..@.@@.@@.@@.@@@..@.@@@@.@@@@@..@@.@@.@@@@.@@
.@@@....@...@@@@.@.@.@.@@@..@..@@@@@.@@@..@.@@.@@@@@@.@@@@@@@@@@@..@.@@...@@.@..@....@.@@.@@@..@..@@@@@.@.@.@.@.....@@.@@.@@@@.@.@@@@@@@.
.@@.@.@..@@.@..@..@@@.@@@@@@.@@@@@@.@.@.@@.@@@.@..@..@@..@@.....@@@....@@@@@..@@@@@@....@@@...@@.@...@@@.@@@@.@.@@@@.@@@@@.@.@@..@.@@@.@.
.@@@@.@@.@.@......@@@@@@@.@@.@@..@@@@.@@.@@@@@@..@@@.@@@..@@..@.@@@@@..@......@..@.@.@..@@.@@@.@.@@@.@@@.@@@..@@@@@@..@@@@@@...@@@@@@@.@@
..@@.@@..@@@..@...@@.@@@@...@@@.@@@@.@@@..@@@.@@@.@@@@.@.@...@@@@@.@@...@@.@@@.@@@@.@@@@@..@.@@@@@@@@@@@..@@@@@@..@@@.@@.@.@.@@@@..@..@@@
.@@@@.@..@.@@@..@@.@..@.@@@.@@.@@.@.@..@@.@..@@.@.@@..@@@@...@.@@@..@.@.@.@@@.@@.@@.@@@..@@@@@@@@@@@@.@@.@@@@.@@.@@@@@.@@.@..@@....@@@@..
@..@@.@@@@@.@@@@.@.@@@@@...@@@@..@@@@@.@.@@@..@@@@....@@@@.@@..@@@.@.@@.@@@@@@@@@.@..@..@@.@@@.@@@.@@..@.@@.@@..@@..@@@@@.@..@@.@@@@@@.@.
@@@@@@@@....@.@.@@@.@....@@@..@.@....@@@...@@.@.@@...@@...@.@.@@@@@@....@@@@.@@..@@@@@@.@@@@..@.@@@@@@@@@.@@.@@@.@.@@@..@.@@..@@@@..@@.@@
@...@@@@@@@@.@@@@@@@..@.@.@@@@@...@@.@..@.@@@@...@@@...@@@@@@@@@@@.@@@@.@@@@@@.@@.@@@@@@@.@@@.@.@@.@@.@@@@@@.@..@@@.@.@.@...@@@........@.
@@@.@@.@.@.@@.@@@@..@@.@@.@@@..@@@...@@@@..@.@@@@.@.@.@.@@@.@@@@.@@...@@@@@.@.@@.@.@@@.@.@@.@@@.@@@.@@.@@@@.@...@..@@@.....@@@.@@@.@@.@.@
@.@.@@..@@.@@@@@@.@@@@@@@@.@..@@@@..@@.@@..@@@@@@..@...@@.@@.@.@.@.@@@@..@..@..@@@.@..@..@@@@@.@.@.@@@@@.@@@@@.@.@@..@@@@@.@@@..@@@@@.@.@
@@..@@@.@..@..@@..@@@@.@@@@.@.@@@..@.@@..@@@.@.@@..@.@@.@@@.@.@@@@.@..@@..@@@..@@@..@@@...@@.@@@@..@@@@@@@@.@@..@...@@@..@@@.@.@@.@@...@@
@...@@@.....@@@@@.@.@.@@..@@....@@@@@.@@@..@.@@@@@@@@.@@@.@@@.@@@@@.@.@.@@.@@.@.@..@..@@.@.@@@@@@@@.@@.@@@@..@@@@.@@@@...@...@@@@@..@@@@@
@@@.@.@@...@.@.@.@@@@@@@....@@@@@@@.@@@@.@@.@@.@.@...@..@@.@.@@@@@@@@@@@.@.@.@@@@@@.@....@@@.@@@@@@@@@@..@@@.@@.@@..@.@@.@.@..@.@@@@@@@@.
.@....@@@.@.@@@@@.@..@.@@@.....@.@@@.@.@.@@@.@@@.@..@...@.@.@@@@@@.@@.@.@..@.@@..@@@@.@@@.@@@@@..@..@@@@@..@@@@@.@..@@.@@@@......@@@.@@.@
@.@...@@@@@@@.@..@....@@@@..@@..@@@@.@.@@@@@@@@@.@.@.@.@@.@@@.@..@@@@@@...@@..@@@.@.@@@@.@@@@..@@.@.@...@..@..@.@@@...@@@@@@.@..@@@@@@...
@@@@@..@..@.@.@@.@@@@@.@@@..@.@@@..@@..@@.@@.@@@@.@@.@...@@@..@.@@@.@@@.@@@@@@@@@.@@.@@.@@@@..@@@@@..@@@@@..@..@@.@@@@@@@..@@.@@.@@..@.@.
@@@@@..@@@@@.@@@@@.@@@@@@@.@@@@@@@@@@@.@.@@@@@.@.@@@....@@@@.@.@..@.@@..@.@..@@.@@@..@@@@@.@@@.@.@.@@@@.@@@.@@@@...@.@@@.@.@@.@@.@.@...@@
@@@.@.@@.@@@@@.@.@.@...@@@.@@@..@@@@@@@@@.@@@@@@@@@@@@@@@@...@..@..@.@@.@..@@.@@@...@..@.@@.@@@@.@@@@@..@.@@@.@@@..@@@..@@.@@.@@@..@..@@@
.@@@.@.@@@@@@.@@.@@.@@...@.@.@@@@...@.@.@@...@@.@@..@.@.@@....@@@.@..@@.@@@.@.@..@..@@@@@.@@..@....@@@@@@.@@@@@.@@@@@@.@@..@@@@@..@@@.@@@
..@.@@@@.@@@..@@@@.@@@.@@@..@@@.@..@@@@@@.@@..@..@@.@@..@.@@.@@@@@@.@@@.@...@@@@.@..@.@@@.@@.@@.@..@@@.@..@.@@.@..@@@@@.@.@@.@@@@@@@.@@..
@@@@.@@@@@..@..@@@.@..@@@@@.@@@.@@@@..@.@@.@@@@.@@@@@.@.@.@@@@@.@@@@..@@.@@..@@@..@@..@@@@@@.@.@.@...@..@@.@.@@.@..@@@@@@.@..@@.@.@@@@@..
@@@.@@@@@.@@@.@@@@@@@@@@@@@@@@..@@..@@..@@@@@@@@..@@@.@@@@...@..@.@@@@@.@.@@...@.@..@.@@@@@@.@@@@..@...@@@.@.@..@@@@.@@@@@@@@@@.@@.@@.@@@
@.@@@@.@.....@@@@@.@@......@@@.@@...@.@@@@@.@.@@@@..@...@..@@..@@.@.@@..@..@..@.@@@.@@@@@@.@@@.@@@.@@..@.@@.@.@@....@.@..@...@@.@.@@@@@.@
@@@@.@@@@@@..@@.@.@@.@@.@....@@@...@.@@@@@.@..@@@.@@@@@@@@@@@@@@.@.@@@.@.@@@.@.@@.@@.@@@@..@@@@.@@..@@@..@...@..@@.@@@@@@@@.@@@@@.@@@@@@.
.@@...@.@....@@@@..@@.@@@@@@..@@@@@.@@@@@@@...@....@@@@@.@@.@@.@..@@@@@@.@...@@@@.@@@.@@@@..@@.@.@.@.@@@.@..@@@...@@@@@@.@@@@..@...@@..@@
.@...@@@@..@@@@@..@@@..@@@@@@@.@.@@..@..@@.@..@@@@@.@.@@.@..@@@@@..@...@@.@@@.@@.@@@@@@..@....@...@@@@@@@.@@@@@.@@@@@@.@......@@.@.@..@..
@.@@.@.@@@@@@.@.@@@.@@...@.@..@@@@@.@@@.@.@@..@.@.@@@.@@.@@@@@@.@@@@@@..@@.@..@.@...@@.@@@@@.@@@@.@@.@@@@@..@@.@@@@@@@@@..@@@@.@@.@@@@@@.
@@.@.@.@@@.@@@.@@@...@@@@@@.@.@@@@@.@@@@@.@..@@.@..@.@@.@@@.@@@@..@@@@...@..@@@..@@@@@.@@@@@@@.@...@@.@@.@@@@..@@@@....@@@.@.@.@@.@@..@@@
.@.@@@@.@.@..@@@@.@@@@..@@@@@.@@.@...@@@@.@.@.@@@@.@.@@@.@@..@@.@@.@.@.@..@..@@@@@.@.@..@@@@.@@..@.@@.@..@.@@.@@@@@@@@@@@@@@@@@@..@@@@@@.
@@@@@.@@.@@@@.@@@@@.@.@@@@.@..@@@@@.@@@.@@...@@.@@..@@@@.@@@@@.@@@.@@.@.@@@@@@.@@@.@@@@@.@@@@.@.@@@@@..@.@@@@@@@..@@...@@@.@...@@@...@..@
@@@@@....@.@..@@@.@@@.@..@..@...@.@@.@@@@@@@.@@@@.@@@.@@@@@@...@@@@.@@.@..@@@@.....@@@.@.@@@...@@@.@@.@@@.@..@..@@@@.@@..@@...@@@....@@@.
.@@@@@@@..@.@.@.@..@@@@@@@@@@.@@@@.@@@@@@@.@@@@@..@@@..@..@@..@@..@@@@@@..@@@.@@@@.@@...@..@.@.@@@@@@@@@@.@@@@.@@@@@.@@@@..@@..@@@@@@@@..
@@@.....@@.@@@@@@..@@@...@@@@.@@..@@@@@@...@@@@@@..@.@@@@.@@@@.@@.@@..@@@@..@..@.@@.@...@@@@...@..@@@.@@.....@@@@@@@@@.@@@@.@.@@@@@.@@@@.
@@@@..@@@@@@@@@..@@@@.@@@@@@@@.@@@@@@@@.@@@@@@@@@.@@.@.@@@.@@@.@@.@.@....@@@@.@...@.@@@.@.@.@.@@.@@@@.@@@@@@@@@@@@@.@.@@@.@@@@.@@@.@@@@..
.@@@.@.@@..@@.@@@@..@@@@@..@.@.....@.@....@@@@@@@@.@.@@@@.@...@..@....@@@@@.@@@@@@.@.@@@.@....@@@@@@@@@.@.@@.@@@@@@.@@.@...@..@@@@@@@..@.
@@@....@@.@@@@@@@@.@@@@.@@@@@@..@@.@@@@..@.@.@@@@@@...@@@.@@.@..@.@.@.@.@@.@.@@@@@.@@@@@...@.@.@@.@@@@@@@@.@@@..@@@.@.@@.@@@@@@@@@.@@@@@@
.@@..@@.@..@@..@@.@@@@@@....@.@@@.@@.@@@@@@@.@...@@@@@@@@.@@@@@@.@@@@@@@@@...@@...@@@@.@.@@.@.@@...@@@@@@@@@@...@@@@.@@@@@@..@@@@@.@.@@..
@.@@@..@...@@.@@@@@.@@@.@....@@@@@@..@@.@@@@@@@@@@.@@@.....@.@@@@@@@.@.@...@@@.@....@@@@@@@@@@.@@@@.@@.@@@.@.@.....@.@.@.@@@.@@@.@.@@@@@@
@@.@.@@@...@@@@@@.@@...@.@.@.@@@@@@@@@@@@@@...@@@@@@@@@@.@.@@@..@.@@.@@@@@@@@@@@@.@.@.@@.@..@@@@@@@@@@..@.@@@@@.@@.@.@.@.@.@@@..@@.@@@@@.
@@..@@.@@@.@@@@@@..@@@.@.@@.@@@.@.@@.@.@@@@@..@@@.@@@.@@.@@@.@@@@...@@@@@.@.@@@.@@@@@..@@@@.@@@@@@@@@.@@@@.@@..@@@@@.@@.@@@..@.@@@@@@@..@
@@@@@@@@@@@@@@@.@@.@@@@.@.@.@@@...@@.@@@.@...@@@@@.@.@@.@@@@.@.@@@.@@.@.@@@.@.@@@.@@..@.@@.@@@.@@..@@@@..@@.@@@.@.@.@@.....@.@..@.@@@@@.@
.@@@....@.@...@@@..@.@@@@.@.@@@@@@.@@@.@.@..@.@..@...@@.@@@@@@..@...@.@.@@@.@@.@.@.@.@@.@@@.@@@....@@@@.@@@..@..@@.@@..@..@@@@.@@.@..@@@@
@@@.@...@@@@@.@@.@@.@..@.@...@@@.@@@@@@@..@@@@@.@@@.@@..@.@@@@@.@.@..@@@@@@..@@@@@@..@@@@.@@.@@.@.@@@.@@..@.@.@..@..@@@....@@@.@@..@.@.@.
.@@@@@@@@@.@@@.@@@@....@@@@@..@@..@@@@@@@@@....@@@@@@@..@..@.@...@@@@@@@@@@@@@@.@@@@..@.@.@.@@@@@@@@@.@@@@@@...@@@@.@@.@.@..@.@.@.@.@.@@@
.@@@@@..@@@@.@@@@.@@@@@@@@@@@@@..@...@@@@..@.@@.@@@@@@.@..@@@@..@@@@@@.@.@@@@@@@@@@@@.....@@@@@@.@@@@@@@@.@@@@@@@@@@@@.@.@@@..@@@@..@...@
@.@...@@@......@@@.@@.@@.@.@@@..@@.@.@..@@@..@.@@@@@.@@@...@@...@..@.@..@@@@....@@..@.@@..@.@.@@..@@@@@.@@@@.@@@.@.@@.@.@@.....@@.@@@@@@@
@@@@.@@@....@@@@@.@@@.@@@@@.@@@...@.@@@@.@.@@@.@@@@@@@@.@@@@@.@@@@@.@....@.@@@@..@.@..@@.@.@@.@@.@@.@.@..@@@@.@.@@.@@@@@@@@@@.@.@.@@.@.@@
@@@@.@.@.@@@@...@@@.@.@@@@@@@@@@.@@.@@@@.@@@.@@@..@@@...@@@@@..@@@.@@@@@.@..@......@@..@.@@@@@@..@@.@.@@@.@@@@@@@@@@..@..@@@@@.@@.@@.@..@
@@.@@@@@.@.@@@@@@@.@..@@@@@@.@.@.@@@.@@@@@@@.@@@@.@@@@.@.@@.@@@.@@@.@@@.@@@.@@@.@@@.@@@@.@@..@.@..@@@.@.@.@@@@@@@@...@@@@@@...@.@@@@@.@@.
@@@@@..@@.@..@....@@@@@@@.@@@@@@.@@@@@@@@@.@@.@@@@.@@@@@.@..@@@@@@@@.@....@@@@.@@@@..@.@@..@@@@@@...@@.@@@@...@.@.@.@@@@@@@..@@@@@@@@@@@@
@@.@@@...@@.@@.@.@@@@@@@@.@@.@@.@...@@@@@@..@@.@@@...@@@.@@@@@@.@@@@.@@@.@@..@@@@@@@@@@@@.....@..@@...@.@@@@@@@..@..@.@.@@@@@@.@.@@.@@..@
.@@@@.@@.@@.@@@@.@@@@.@@.@.@...@.@@......@@.@@@@@@.@@@@@@@@@@@@@@..@@@@.@@@@@@.@@@@..@@.@@.@.@..@@@..@@..@@@.@@@@.@@@@.@@.@@.@....@@@..@.
@@@@.@.@.@@@@@.@...@@@@@@.@@@.@@@..@@@@.@.@@@@@@@@.@..@@...@@.@.@@@@..@@@@@@...@..@@.@@@@...@@@.@@@@@.@@@.@@.@@.@@@@.@@@@...@@@@..@@..@@.
@....@.@.@@@@@@@......@@..@.@..@@.@@...@.@.@@.@@@.@@@@..@@.@@@@@..@.@.@@@@@.@@@@@.@@@@@.@.@@@@..@...@..@.@@@@@@@@@@@.@@.@@.@@@@@@@@@.@@@.
@@@@..@@@@@.@@@@.@.@@@.@.@...@@@@@.@@.@.@..@@.@@@.@@..@@.@@@@..@@.@@@.@@@.@@@@@@.@.@@@@@@.@..@.@..@@@@.@.@@@@@.@@.@.@@@@@@..@@@@.@@..@@@@
@@@.@@@....@@.@@.@@@@@@@@@.@@@..@@@@.@.@.@@@.@.@@@@@@.@.@..@@.@@@@.@@@@@@@@@@@@.@@@.@@@@@.@@@@@@@.@.@@.....@@@@@..@...@@...@@@@@@..@@@@@.
@.@@@@@...@@.@@@@@.@@@.@.@.@.@..@@@...@..@@@@.@@@...@..@@@.@..@.@...@@@@@@.@@@@@.@@@@@..@.@@...@@@@@.@.@.@.@@@@@@@@@@.@@.@@@.@.@.@@.@.@@@
.@.@.@.@@.@@@.@@@.@@@@@.@@...@.@@.@@@@@@@@@@@@@@@@@.@@@@@@..@.@@@@@@@.@.@@@@@@@@.@@..@@@@.@.@.@@.@@.@@.@.@@@@@...@..@@@..@@@@@.@.@.@@@@@@
.@@@@@..@@@@@@.@.@.@@@@@@@.@.@@@@@@@.@.@.@.@.@@@@.@@.@@@@@@@@.@@@@@@@.@@@@@@@@.@..@@@@.@@..@@@@.@@@.@@@.@@..@@@@.@@@@.@.@.@@@@..@@@@..@.@
@@@@@@@@@@@@@.@.@@..@.....@.@@@.@.@...@....@.@@@@@@.@...@.@@@@@.@@@@@...@@@...@..@@..@@.....@@@.@@.@@@@@.@.@@.@@@.@@.@@@@@...@@.@@....@@.
.@@@..@.@@@..@.@@.@..@@@@.@..@@@@..@@.@@@@@.@@@@.@.@...@@@@.@..@@@@@@.@@@.@@@.@.@......@@@@@@@@@.@.@@.@@@@@..@@.@@.@....@@@@@..@@@@.@@@@.
@@@@@.@.@.@@..@@.@@@@@.@@@@@@.@@@@@@@@@..@@@@.@@.@@@.@.@@.@..@..@@@@.@@@@@.@@@@@@@@@@@.@@....@.@.@@@@.@@..@@@@....@.@@@..@@@.@.@@.@@.@.@@
@.@@.@.@@@.@@@@.@@..@.@@@@@.@@.@@@@@@@@.@@@.@@..@@@@@@@@@..@@.@@@.@.@.@...@@..@@@....@....@@.@@@@.@.@@@.@@..@@@..@@@@.@@.@.@@@.@@@@@@@@.@
@@@@.@@@@..@@.@.@@@..@@@@...@@@@.@@@@.@@@@..@@@@@@.@@@@@@.@@@@@@@.@@@.@.@@..@.@@@.@@@.@@.@..@@@.@..@@.@@@@@@@.@@@@@@@.@@..@@..@@@@..@@.@.
.@.@@@@@@.....@.@.@@..@.@.@@@@.@@.@@...@.@..@@@.@..@@@@.@@@@@.@@@@..@@@@.@.@@@@..@@@@@@@@@.....@.@@@..@@.@@.@.@@...@@@@.@@.@@@.@@.@@.@.@@
@@.@@.@@@...@.@.@@@@..@@@..@@.@@@..@.@@..@.@.@@@@@@@..@@@....@.@.@@@@@@@@.@.@.@@.@.@.@@@@@..@@.@@@..@@@@@...@@..@..@@@.@.@.@..@@@..@@@@@@
@..@@.@.@.@.@.@.@@@@@@@@.@@@@@@@@@@@@@@@@@@.@@@@.@@@@..@.@..@.@..@@@..@@@@@@.@@@@..@@.@@.@@@@@@@@.@@@@@..@@@@@@.@.@....@@.@@@@.@@@@.@@...
.@@@@@.....@@.@.@@.@@@@@.@.@@...@.@.@.@@@..@.@.@.@.@.@@@@@@@@.@@@@..@@@.@@@@@@@.@.@.@@@.@@..@@@@@.@@....@@@@.@@@.@.@@.@.@@..@.@.@@@.@@.@.
@.@@..@@.@@@@@.@@@..@@@@@..@@..@@@.@@@@@@@.@@.@..@@@@.@@@@@.@@@@@@..@@@@@@@...@.@@..@.@@@.@@.@@.@@..@...@@.@@..@@.@...@..@@.@@.@@@@@.@@@.
@@..@@@@.@@@@@@@@@@@@@@@.@@.@@@@@@@@@...@@@@...@@.@.@.@@@...@.@@@..@@@@.@@@@@@@@@@@@@@...@..@@.@@@@..@.@@@.@...@@@@@@.@@@@@..@..@@.@.@@@@
@.@@@@.@@@@@..@@@.@@..@@@.@@@@@..@@.@@@...@..@.@.@.@@@.@@@.@@@@@.@@@@..@@@.@@@.@.@.@@@@..@@@@@@.@@@..@.@.@@@..@.@.@.@@@.@@@@@.@@@.@@...@@
@.@@...@..@@@.@.@..@@@@@..@..@@@@@@@@.@..@.@@.@@@@.@...@.@@@@@..@.@@..@.@..@@@@@@.@.@.@@.@@@.@@@@@@@@@@@@@@@@@@@@@@@.@...@@@@@@@..@@..@@.
@@@..@@.@..@@...@@.@@@@@@@...@@.@@@@@@@..@...@.@@@@.@@@@.@@@@@.@@.@@@...@@@.@...@...@@..@.@@@@.@.@.@@@..@@@@.@@@@..@@..@...@..@@@@..@@@@@
@.@@@..@@...@@@@@@@@@@@@@.@@..@@@@...@@@@@@@...@@@@@.@..@@@@@.@@.@@.@@@@@@@@..@.@.@@@.@@@@@@@@@@@@@@@@.@.@..@@.@@.@.@@.@@.@@@.@@@.@.@.@.@
..@.@@@@@@@.@.@@..@...@@@..@@@..@@@.@@@@@@.@.@@.@@.@@@@@@@.@@.@@@@@@..@.@@@@@@@.@@.@@@@@@@@@@@@@@.@@..@@@.@.@..@..@@@..@@@@@@@@@...@@@@@@
@@@@@@@.@@@@@@.@..@..@@@@@@..@@@@.@@..@@@@.@.@.@@.@@@@@.@.@.@@@@@@@@...@@@@@.@@.@.@@@.@@@.@@.@.@@@@@@@@@@@.....@.....@.@@@@@.@@@@@@@....@
@.@@@@@@.@@.@..@@@@.@@.@@.@@@.@.@@@@@.@..@@@@.@...@@..@.@.@@@@.@...@..@.@.@..@@@@.@@@.@@@.@@@@.......@@@.@.@@@...@@.@@.....@.@...@.@@@..@
@@@@....@.@.@.@@.@@@.@@@@.@@@@@@@.@@@@@.@.@@@.@@@@.@@@@@@@.@@@@@@.@@@@.@..@@.@@@@...@@..@@.@..@.@..@.@@@@..@@.@@@..@.@@@@@@@@@.@@@@@.@@@@
@@@@@@@@@@@@@....@@@@@..@@@.@.@@@@@@@@..@.@@.@@@@@@.@@@.@@.@....@..@@@@@@.@@@@..@@@@.@@@.@...@@@.@..@@.@.@@@..@@@.@@@@@.@..@@@@@.@@.@...@
@.@@@@@..@@.@@.@@@@@.....@....@.@@@..@@.@@@@@.@@@@@@@@@@@@.@@@..@.@@.@@..@@@...@@..@.@@@@@@@@@@@..@@..@.@@...@@@@.@.@@@.@..@@..@@@.@@@@@.
@@@.@@.@@@@@@@@..@.@..@@@@@.....@.@.@@@@@@.@@@@@.@.@@.@@@@.@.@.@@@@@@..@@@@.@@@@...@@@@....@@@.@@.@@@.@.@@@.@@@@.@@@....@@@@.@@@@@.@@@..@
@.@@@...@@...@.@@@..@@@@@...@@.@@.@..@@@.@.@..@@.@@@@@@..@@...@@@@.@.@@..@..@..@@@.@.@@@@@..@.@@@.@..@.@@..@....@@@@@@@@@@@@@@.@@..@.@.@@
@@@@@@.@@@...@.@.@@@@.@@@.@..@@@@@@.@.@@@@@@@@.@.@.@.@..@@@@..@@.@@..@@@.@@@@@.@@@@.@@@@@...@@...@@@..@@@@@.@@@.@@..@.@...@.@.@@..@..@@.@
@...@@@@.@@@..@@@@.@@.@@.@....@.@...@@...@@.@@@.@.@.@@@...@..@.@@@.@@@@.@@@@..@@..@@@@.@.@@@..@@@.@..@....@@.@..@@@.@@@@@@.@@@@.@.@@@@@@.
@.@@@.@@@@@@@.@@.@@@@@@@@@@@@@.@@@@@.@@@.@@.@.@@@.@.@.@.@.@@@@.@@.@..@@@@.@@@.@.@@@@@.@@@@...@.@...@.@.@@.@@@...@...@@.@.@.@@@@@...@@@.@.
@@.@.@.@....@@..@...@@@.@@.@@@@..@@@@@@@.@@.@@...@..@..@....@@@@.@@@@@@..@.@..@@@@.@.@@@@@.@..@@@@@@@..@@.@...@@@@@.@@@@.@@..@@@.@@.@.@.@
.@@@@@@@@.....@@@.@.@@@@.@.@@.@@.@@@.@@..@.@@@@@@@@....@@@@@@@@.@@.@@@.@.@....@..@.@@@@@@.@..@.@@.@..@.@.@@@@@..@@@..@.@@.@@@.@@@@@.@...@
..@@.@@@..@@.@.@@@.@@@.@...@@@@@@.@..@@@.@..@@@@@.@@.@@@@@@@.@@@.@..@@..@@@@.@@@..@@@@..@.@@@@.@@@@@...@@....@@@@@.@@@...@@..@@@@.@@@@.@@
@@@@@@..@.@@.@..@@.@@@@@@@..@@@@..@@@@@.@@@@@@.@@@@.@@@@@.@@@.@@...@@@@.@@@...@@@@@@.@.@@@..@@.@@@@....@@@@.@@@@.@@.@..@.@@@.@@@@.@@@...@
......@@@@@@@@...@@@@@@@@...@@@@@.@@@@@.@@@@...@.@@@.@@.@...@@@.@...@.@@@@.@@@@..@...@@@......@@.@@@@@.@.@@@@.@.@@@@.@@@@.@..@@@.@@.@@..@
....@...@@@.@@@@...@..@@@.@...@@@.@.@@..@@@@@@.@..@@@@@.@@@@@.@@@@@.@@.....@@@@@@...@@.@.@@@@@@@@..@@@@@@@@@.@@@..@.@...@@.@@@@@@..@@.@.@
..@@@.@@@.@.@...@@@@.@@@@....@...@@@@@@.@@@@@@@@.@@.@@.@@@@@@@@@.@@@@@@..@@@@.@..@@.@@@.@@@.@@@@@....@...@@...@@.@..@@@@@@..@@...@@@.@.@.
@@@@.@@@...@@.@.@@.@@.@@@@@@@.@@@@@.@@@..@...@.@.@.@.@@@@.@@....@@@@@.@@@@..@@@@@@@.@...@@@.@@..@..@.@..@@..@.@@@@@..@@.@@.@@@.@@@@.@@.@@
.@.@@.@@@@@@..@@@@..@@..@@@.@..@@@@.@@@@..@@.@@@@@.@.@@.@@@@@@..@@@..@....@@@@@@@@@@@@@@.@@.@..@@@@..@@.@@@@@@.@.@.@.@@@@.@@.@....@.@@@@@
@.@@@@@@.@@.@...@@.@@.@@@@@.@.@@@@@@.@@@...@@.@@@..@@..@..@@.@@@.@@.@@@..@@@..@..@.@@@.@@@.@....@.@@@@@..@@@.@@@.@.@@@@@@...@.@@..@@@@@@.
.@@@.@@@@@@.@..@.@@@@@@.@@@@.@@@...@@@.@..@..@@.@.@...@.@@@@..@@@.@@@@...@@@.@@.@@@@@@.@@@.@@@.@.@..@..@..@...@@@@@@.@..@@..@@@@@@.@@.@@@
.@@@@@.@@@.@.@.@@@.@..@.@...@@@@@..@@.@@@@.@.@@@.@@.@@@..@@@@..@@.@@@@@@@@.@@.@@@@..@@@.@@.@.@@.@.@.@@.@.@.@@.@.@@@.@@@.@@..@@@@..@..@.@@
@@@@.@.@@.@@@..@@@@..@@@@@@@.@.@..@...@@..@.@@@.@@@@.@@..@.@@@@@...@.@..@.@.@@@.....@@.@@@@@@@.@@@@.@@.@@@@@@.@.@@..@@@@.@@..@@@.@@@.@@@.
.@@....@@..@@@@@.@@@..@..@@@@@@@@@@.@@@.@@@@.@@@@@@@@..@@.@@@@..@@....@@..@.@@@@@..@@@@.@@@@@.@.@.@..@@@@..@@..@...@.@@...@.@.@@@@.@@..@.
.@.@@@@.@@..@@@..@..@@.@@.@@@.@@.@...@..@.@.@@@@.@..@@..@.@@@..@@@...@@@@@.@@@@@@@.@@..@.@..@@@@@.@@@..@@@@@@@@@@@.@..@@@.@@..@..@@@...@@
@...@.@.@@@@@@@@@@@@.@@.@.@.@@..@@@.@.@.@@...@@@@.@@.@@.@@@@@@...@@..@@@@.@@@@@..@@@@@@@.@@@@.@@..@@@@@@@@@@@@..@@..@.@@.@.@.@@@.@.@@@@@@
@..@@@.@..@@@.@@@@@@.@@.@@.@@@..@@@..@@@.@.@@.@..@@@@@@.@...@@.@@...@@@@.@.@@@@.@@@@.@.@@@@@@@...@.@@@.@.....@.@.@@.@.@.@@@@@@@.@.@.@@@@.
@.@@@.@@@.@@@@@@@@@@@.@@@@@@@@@..@@@@.@@..@@@@@...@@@....@@@@..@@..@@@@@.@@.@@.@.@.@@.@@@@.@.@..@@....@@..@.@@.@@@@..@.....@@@..@@.@..@..
.@@...@...@.@@.@.@.@.@....@@@@@.@@..@.@..@@@..@@.@@@@@@...@.@@@.@.@@@@@@..@@.@.@...@.@@@..@@.@..@.@@.@....@@.@@.@@@...@@..@...@@@.@@.@@.@
@@.@.@@@@...@@@@@@@@.@@....@.@...@.@.@.@@@@....@.@@.@@@..@@.@@@@@@@.@@@@@.@@.@@@.@.@@@.@.@..@@@.@@.@..@@.@@@.@@.@@@@@@@.@@@@@@..@..@@.@@.
....@..@@@....@@@@.@@.@.@.@.@@@@.@.@@@.@..@@.@.@@@.@@@@..@@@.@..@...@@@..@@@@..@@@@@@..@@.@.@@@@@@@@...@@.@@..@...@.@.@@..@..@.@@.@@..@.@
@@@@.@@@@@@@@@.@@@..@@..@..@.@..@@@.@.@.@@@@@...@@@@.@...@@@@@@@@.@.@..@@.@@@@@@@......@..@@@@.@@@..@.@@.@@.@.@@@...@@@@.@.@..@.@@@.@@@..
@@.@@@@@.@@@.@@@@@..@...@@...@.@.@.@..@.@@@.@.@.@.@@.@@@@.@@@..@@@@...@@.@@.@@@@@@@.@@.@@.@@@.@@@.@@@@.@@@@@@.@.@@.@@@.@..@@.@@@@.@@@..@.
@@@..@@.@.@.@@..@..@.@...@@@.@@@.@.@..@..@@@@@@@.@@.@@..@.@.@@@@.@.@..@.@.@@@...@.@.@@.@@@@..@.@@@@@.@@@..@@.@@@@@@@..@@@.@@@@@@@.@@@@@.@
@@.@@...@@@.@@@@@@.@.@@.@@@@@@.@@@..@@.@@@.@@..@.@@.@..@@@@@@.@@@.....@.@@@@@.@@..@@..@@..@@.@.@@@@@@.@@.@.@@.@...@@@@@@.@.@@@...@@@.@@@@
@@..@@@@.@.@.@@@@@@@@.@@.@.@@@.@@@@..@..@@@@@@.@@...@@.@@..@.@@..@@.@@@@.@@.@.@@@@@@@.@@@...@..@.@@...@@@@.@@..@.@@@@@@@@@.@@.@.@.@.@@@.@
.@.@@..@@@@@....@@@.@@@.@@.@@...@.@@...@@@@@.@@@....@.@@.@@@@.@@@.@@@@@@..@@@@.@@@...@..@@@@@.@....@@@@.@.@.@.@@@@.@.@@@..@@.@@...@....@@
@.@.@@...@@.@@...@.@..@..@@@...@.@@@.@@@@@@.@@@.@@@@@@@@...@@@.@..@...@..@@.@@@.@..@.@@@..@@@...@@@..@.@@@@@.@..@@.@..@@.@@@@@@@@.@..@.@@
@@@..@.@..@.@@.@@@@@@.@@@.@@@....@@.@@@.@@@....@..@.@...@@..@@@@@@@@@@...@@.@@@.@@@.@@@@@@.@@.@...@.@@.@@@....@@.@@@.@.@@.@...@.@@@@.@@@@
.@@@@..@@@.@.@.@@@.@..@@.@@.@.@@@@@@.@@@@.@@...@@@@.@@..@.@@.@@@@@@@@@..@@@@.@@@@.@.@@@....@@.@.@@.@@@@@@...@@@@@@@.@..@..@..@@.@.@.@....
.@@@@@.@.@@.@.@@@@@@..@.@@.@@...@@.@@@@.@.@.@@@.@@@@....@.@@@@@@.@@@@.@@@@.@@.@@@@@@@@.@.@..@.@@@.@@@@@...@@.@..@.@@@.@.@@@@.....@.@.@@.@
.@@.@@@.@@@.@@.@...@@...@@@@..@@.@@@..@.@@.@@.@.@@@@.@@@@.@..@@@@.@@@@@@.@.@@.@.@@..@@@@@@@@@.@@@@@.@@@@..@@@.@@.@@.@.@@@@@.@@@@@.@....@.
@@.@@@.@@@@.....@@@.@.@@.@.@@.@@..@@@@@@..@@@@@@@@@@.@@@@@@@.@@..@@@@..@@..@@@.....@.@..@@@@.@@.@.@..@@..@@.@@..@.....@@.@@@...@.@.@.@@@@
@..@@@@.@.@@@@.@.@.@.@.@..@.@..@@@@@.@@@.@@.@...@@@@.@@.@@@@@@@@..@@@@.@@@@.@@@@..@@@..@.@@.@@@@@@@@@.@.@@.@@@.@.@@@.@@.@@..@.@@@@@@..@.@

1237
day05/run.pl Executable file

File diff suppressed because it is too large Load Diff

101
day06/run.pl Executable file
View File

@ -0,0 +1,101 @@
#!/usr/bin/perl
use strict;
use bigint;
my @problems;
my @operations;
my @solutions;
my @lines;
while(my $line=<DATA>) {
chomp($line);
push @lines, $line;
$line=~s/^\s+//;
$line=~s/\s+$//;
my @parts = split(/\s+/, $line);
#print join(',',@parts) . "\n";
if($parts[0] eq '+' || $parts[0] eq '*') {
@operations = @parts;
last;
}
if(!@problems) {
@problems = map { [$_] } @parts;
} else {
for(my $i=0; $i<@problems; $i++) {
push @{ $problems[$i] }, $parts[$i];
}
}
}
my $total;
for(my $i=0; $i<@operations; $i++) {
my $ref = $problems[$i];
my $op = $operations[$i];
my $working = shift(@$ref);
while(@$ref) {
if($op eq '+') {
$working+=shift(@$ref);
} else {
$working*=shift(@$ref);
}
}
$solutions[$i]=$working;
$total+=$working;
}
print "Total is $total\n";
my $opstr = pop(@lines);
my @nums;
my $op;
$total=0;
my $last;
for(;;) {
my $t_op = substr($opstr, 0, 1, '');
if($t_op ne ' ') {
my $res = undef;
while(my $num=shift(@nums)) {
print "Num is '$num'\n";
next unless($num=~/\d/);
$num=~s/\s//g;
if($op eq '+') {
$res += $num;
} elsif($op eq '*' && !defined $res) {
$res = $num;
} elsif($op eq '*') {
$res *= $num;
}
}
print "$res\n";
$total+=$res;
$op = $t_op;
@nums=();
last if($last);
}
my $col;
for(my $i=0; $i<@lines; $i++) {
$col .= substr($lines[$i], 0, 1, '');
}
push @nums, $col;
if(!length $opstr) {
$last=1;
}
}
print "Part 2 total is $total\n";
__DATA__
563 334 22 38 2624 77 49 73 39 49 85 2 98 977 98 581 73 7 91 84 965 78 93 5932 67 4 965 8739 21 232 272 32 19 351 9 11 58 71 416 226 149 5234 2799 334 739 136 256 857 34 35 591 778 758 587 38 6 38 688 126 96 44 8763 3 9 15 84 619 856 635 52 2 345 91 42 96 597 996 8 649 25 88 6 814 63 77 644 3 627 43 6 15 31 82 93 355 22 48 63 8513 19 255 518 35 92 244 51 5 889 66 5 241 2468 24 47 77 5 5 332 5 6276 762 68 231 369 959 16 45 3552 376 14 47 68 23 467 7 984 33 49 348 51 516 687 163 83 8718 742 58 32 484 74 8 1 95 72 65 322 4464 6294 655 76 5153 7923 4459 33 6275 5159 84 752 17 9595 69 63 858 7715 554 42 8 5 39 75 74 17 4 929 48 897 158 9 29 516 2269 21 2 4 481 451 11 455 38 33 187 59 616 765 69 88 12 15 739 462 41 39 7 15 361 4 73 96 6 13 94 97 7 72 71 92 849 59 739 52 5 3 47 86 59 2 24 6 611 882 35 576 391 2452 2 1746 32 9 252 56 955 977 7838 92 7461 434 9 98 429 71 4 12 12 26 8395 911 57 78 168 14 934 525 28 37 64 79 31 539 552 3 593 329 3958 796 75 844 6 57 7686 971 9 1 9 58 36 176 7938 7 22 295 68 8968 99 9 62 43 3 5894 61 48 216 7994 52 3 234 97 779 9 87 34 96 756 846 138 2 65 696 93 5 36 14 85 58 4 12 9 23 262 23 47 89 41 7 6953 294 614 913 4 8 2 21 469 78 3 4 51 3 18 335 43 899 359 33 19 954 841 7 3 146 318 97 357 3623 7 2 8 17 417 63 68 563 655 397 67 5 75 17 1 2 4 4822 624 859 18 17 4 7388 59 25 151 4 9343 7 3 8441 7 64 36 2 69 389 34 85 63 43 38 29 43 44 77 97 453 86 48 387 57 635 79 4 226 4 215 413 462 215 646 3 9 4652 39 49 31 5 64 788 59 5533 6 8 27 555 417 929 455 421 43 2 56 7 5 9 12 4 47 3 881 41 59 5 922 88 298 684 7 39 7177 41 16 59 7 343 2 8515 78 432 711 97 39 54 369 923 64 874 749 9 238 19 753 5437 87 15 6 3 342 21 35 38 3 26 21 599 82 697 4 565 165 58 67 429 1 46 54 64 4 96 25 9337 5 65 988 47 643 72 112 1 352 6726 915 814 8 8 41 389 81 441 2828 76 86 64 1 87 549 851 5 3 517 36 73 1 95 4 868 1633 2424 37 58 84 7698 6614 5 75 79 321 723 151 692 53 4184 151 27 2 34 9 18 77 23 7 51 432 97 984 35 18 72 8 834 816 29 14 7 83 9 769 9 126 59 66 15 24 43 3896 7 8942 6744 8 5 12 1472 73 15 71 93 592 151 23 74 49 66 873 8 72 5 286 727 217 28 514 95 376 2 8593 875 71 39 7 138 692 91 91 66 37 148 19 869 17 15 1 78 62 78 1 37 7 1 97 344 345 25 956 6 86 48 15 88 7457 82 95 4 391 521 36 67 154 4 65 6836 911 1225 34 14 412 8 15 213 84 27 84 321 141 4 6 988 7 33 47 44 8 9298 764 54 223 627 1 14 77 72 6667 8134 5341 41 314 55 812 153 48 41 8671 1 3 31 3 649 91 494 5 56 766 84 41 25 44 35 56 1449 71 42 58 21 65 6 62 1 531 869 67 64 371 53 9217 77 8 3 16 23 692 46 16 9 528 831 15 9 57 1272 8 9 43 11 782 495 3134 311 125 719 3 5619 859 7 468 1979 1 96 77 6 531 5 46 84 2 119 5 4 91 135 26 57 535 69 14 66 3187 82 45 5 641 897 2 1955 8424 586 2778 13 383 9 3849 879 347 84 93 29 22 4984 22 376 45 4 243 283 5 11 145 957 76 686 18 4 12 379 22 69 132 31 55 6 4 646 492 392 8 63 68 92 584 9652 758 1461 43 689 68 8 15 141 13 896 29 7 7167 92 231 45 2 647 7 84 4 585 823 9461 31 4695 134 112 296 15 4 2 54 8 216 3484 64 246 814 5 955 97 261 27 975 92 686 7 5 8285 3 44 69 94 741 89 19 71 97 579 42 8361 695 72 8 18 27 9453 849 5 544 62 64 99 1 26 7 293 8 23 23 537 65 4 22 92 95 92 524 42 68 835 23 79 23 83 432 16 72 686 248 39 8 7264 8 195 91 834 545 42 71 729 6 6318 81 334 535 29 31 997 8 83 7255 1 48 356 189 135 6273 1 275 658 48 65 32 8
396 6981 61 88 8878 496 22 56 189 23 58 934 89 78 74 587 87 47 52 837 792 9199 34 4329 15 5 767 2593 54 252 673 76 79 191 3 472 53 69 128 419 7978 8749 3714 276 382 476 458 183 57 216 364 77 76 774 82 69 64 42 762 67 17 1661 3 74 38 22 962 437 624 898 7 928 69 22 65 119 8764 23 637 49 59 75 387 95 27 164 6 573 5 19 2 55 99 19 899 55 36 236 1827 71 535 177 36 34 195 52 96 565 17 751 986 5514 17 62 57 46 73 158 2 7413 396 228 475 749 832 76 16 6381 446 236 4 211 788 642 9 995 28 744 423 34 429 34 814 23 6734 225 34 982 639 36 69 77 465 27 75 72 1458 4194 349 71 2653 1885 619 85 6466 7585 336 385 92 2126 28 341 593 7242 184 13 732 28 739 22 314 368 27 797 61 91 191 76 49 924 7167 738 46 85 621 715 762 767 68 94 124 69 229 348 63 61 77 93 867 658 21 43 3 28 132 7 32 64 7 281 42 498 125 37 53 61 549 61 312 19 45 9 67 65 29 372 58 3 1679 741 31 732 547 2693 137 5645 817 44 573 26 352 444 9195 75 6522 264 65 92 822 87 496 4 85 34 6916 459 18 6694 478 33 244 595 36 59 762 13 98 526 527 277 72 283 9177 794 28 696 18 283 1529 631 23 34 6 18 694 249 377 28 33 369 39 5746 67 35 69 32 771 9879 96 83 121 2225 88 73 616 96 938 51 421 86 25 748 872 388 337 74 716 563 4 99 93 53 254 4 67 67 58 848 724 84 78 3 69 111 792 537 385 7 75 82 378 565 12 94 451 57 3 26 355 85 682 867 38 478 32 972 5 63 1162 75 63 325 9775 8 65 9 7137 513 94 83 86 679 221 77 67 55 25 24 827 6 4982 356 986 2863 81 3 553 177 75 748 7 6657 4 12 1572 4 63 76 85 66 837 79 75 56 17 82 24 85 74 36 451 79 88 28 658 97 352 533 3 924 59 98 884 495 963 442 28 49 4481 38 46 77 89 83 8559 63 1787 3 34 17 845 3788 632 186 475 34 45 21 11 636 61 91 3 792 2 258 11 15 4 378 59 847 785 25 49 866 46 28 787 341 528 73 6817 51 458 778 25 45 28 1416 234 15 963 131 2 865 59 13 3167 765 38 64 93 223 37 18 6349 4 272 78 9134 132 363 793 315 11 76 57 626 76 63 871 42 32 8938 795 4197 6 12 9 74 92 256 529 26 417 3384 872 289 43 465 487 568 54 327 9195 268 33 67 35 84 178 338 52 1 268 6595 465 2 23 41 543 1385 1697 24 21 16 3917 9122 31 43 39 798 357 911 698 93 5892 344 55 44 1724 74 97 483 558 152 17 543 49 595 83 86 14 8 955 862 9169 85 5 45 127 964 58 278 11 33 439 15 14 4581 89 254 8391 8 64 75 2883 42 11 27 261 223 978 28 58 74 72 465 94 43 12 553 737 912 265 432 1 226 49 654 736 59 67 76 523 986 47 52 69 26 499 34 27 38 52 71 96 99 4 15 97 24 4 33 985 647 44 191 4 79 56 337 865 3121 71 34 9 227 496 74 965 115 3 76 8241 259 2937 54 57 984 99 69 9219 98 67 35 783 239 9 16 663 16 74 46 54 15 2827 524 12 123 53 35 91 33 232 2865 3212 3495 74 849 65 163 1387 847 93 4113 19 3 46 28 769 19 753 7 79 678 28 36 65 28 557 413 2553 79 84 37 96 839 74 43 5 234 649 38 525 92 78 1864 39 1 4 92 85 638 41 54 17 338 498 35 22 66 2886 25 9 55 562 681 216 2574 947 396 983 632 4662 739 24 48 5684 2 4 4357 5 925 4 43 14 86 24 38 21 49 96 47 77 815 62 16 9 1172 43 14 34 827 611 52 5746 2635 136 5443 11 996 4 2653 485 376 37 46 59 15 7239 353 725 55 43 155 847 76 19 658 271 84 441 38 28 14 336 88 25 871 611 4 43 73 459 998 326 79 72 628 776 323 4119 182 3675 53 68 827 49 29 287 12 5546 11 79 7423 91 233 65 1 438 45 44 49 877 41 5329 64 7984 899 928 351 58 39 7 6 62 135 134 26 823 383 16 536 11 517 684 414 39 13 32 7 787 2 23 622 71 216 93 72 76 31 843 58 859 378 75 2 52 545 4994 795 2 432 96 16 586 44 54 6 729 12 8868 86 459 51 7 6672 55 96 66 682 62 732 727 45 57 92 22 26 76 15 233 584 19 97 8584 9 237 92 971 965 81 98 927 3 9937 14 426 936 28 45 664 4 44 342 19 936 569 223 937 991 134 857 493 11 11 55 28
287 3485 83 17 3576 929 26 31 133 49 42 912 7 77 3 477 16 1449 16 145 52 1593 91 1745 34 43 76 4991 82 23 2 86 34 81 33 343 82 27 662 232 9188 593 8421 178 917 41 688 561 8 254 157 17 1 693 8 848 92 99 148 47 25 7314 28 513 37 6 946 92 185 1577 4937 37 4 93 42 159 6525 22 48 15 661 69 45 848 63 973 46 157 2 52 9 24 11 38 743 35 93 414 7349 31 45 56 457 57 878 12 47 313 21 549 852 277 72 86 55 6624 639 763 94 7174 882 756 71 447 481 11 93 6553 4573 1835 1 332 932 235 64 83 43 365 774 52 928 83 12 22 7954 36 756 5272 858 28 611 82 157 65 48 6 575 571 157 54 2812 259 323 16 6364 1376 297 868 39 18 33 1492 997 85 112 71 4165 112 584 316 183 884 153 351 23 29 163 128 673 167 5286 853 92 85 611 496 991 321 7 63 393 72 226 627 76 38 21 99 981 796 1 62 12 228 78 42 48 65 9 834 27 7625 7723 63 48 646 99 14 851 53 367 97 54 92 58 481 57 46 3649 346 69 34 969 1217 686 581 425 227 932 88 997 689 4768 61 622 751 26 375 73 81 711 3 78 6 1999 811 84 2175 669 2 53 523 65 86 571 42 21 448 31 581 4 597 9782 262 12 958 87 4263 392 377 86 826 94 46 658 798 791 31 41 764 96 9615 43 52 35 51 772 934 4695 1 295 86 816 52 481 34 92 58 583 97 31 664 984 515 279 67 18 283 24 3 28 18 2934 31 68 68 17 572 751 19 94 2 68 981 154 89 186 58 13 74 361 6794 21 68 581 73 93 77 51 323 996 844 62 985 95 212 98 826 6213 17 942 63 482 1 34 17 1553 1 599 87 16 55 477 4 53 1 93 39 218 35 822 387 74 7311 966 71 144 1637 81 688 18 9365 8 31 1951 875 36 11 25 89 767 12 41 18 82 296 86 75 67 39 498 57 66 952 352 53 31 215 21 423 44 94 744 148 268 269 52 171 5419 86 81 348 74 87 5596 36 745 84 127 47 937 9351 679 772 17 14 35 78 96 156 24 91 75 673 45 69 55 5 861 3 74 13 64 78 46 575 98 4125 245 145 618 597 5584 1 965 345 32 9 83 9814 6 446 815 561 17 55 45 63 7376 768 38 97 94 775 98 2 9176 42 395 65 7864 466 554 496 392 58 2194 25 694 21 98 763 85 33 4344 122 9679 222 15 9 25 6 317 526 51 59 636 99 821 36 696 259 62 78 167 8493 194 55 414 679 11 379 538 32 66 858 7347 541 87 33 92 694 717 359 96 42 16 517 8269 69 21 28 576 576 235 78 797 1597 728 16 87 9596 53 34 926 288 687 1 295 57 79 62 43 63 54 771 4117 8497 22 76 56 981 252 616 12 57 11 886 45 88 2221 423 516 576 71 783 14 7377 39 54 82 364 148 296 97 94 39 18 24 75 93 68 26 466 987 754 8 8 385 638 654 125 35 97 13 192 516 277 54 84 89 823 48 43 87 86 87 83 54 9 388 39 79 58 56 434 747 76 26 57 99 96 994 5289 8665 17 73 48 298 234 731 617 351 624 42 1234 92 937 7 65 578 967 187 4781 24 984 45 29 457 89 63 8 518 77 99 26 32 478 158 34 124 65 87 66 38 759 6429 277 7571 564 65 86 58 6591 872 129 753 89 8 91 81 788 28 367 82 15 55 12 67 77 13 3537 812 6434 42 92 2839 89 764 79 42 84 276 45 59 915 74 61 944 68 55 93 5 55 982 74 64 34 287 7419 16 646 78 9412 54 91 82 617 25 854 9969 682 296 688 995 344 9339 28 78 9378 28 6 6685 6 719 96 1161 681 45 63 51 84 69 14 83 1 617 1 57 8 6199 97 2467 839 788 374 92 55 94 595 345 936 6824 64 3733 143 94 133 31 98 54 3694 941 963 38 64 115 155 855 329 314 859 448 469 12 73 57 292 22 87 424 5775 6 438 57 663 457 933 37 42 7656 961 7 9384 589 589 71 68 597 99 17 266 47 3274 84 88 676 43 5 35 9 36 68 73 319 884 45 191 18 972 691 218 213 11 56 79 5 22 37 454 32 37 926 76 53 18 83 612 585 8 49 168 243 969 1 75 927 44 87 78 15 275 67 315 71 613 579 88 45 88 735 436 1 44 879 81 49 457 413 6 26 215 53 1154 34 251 843 192 7845 2762 46 21 81 416 194 155 24 49 61 26 79 58 187 546 43 76 189 467 97 991 29 5 396 94 38 648 24 4964 2 464 26 224 45 19 253 51 612 92 2164 9758 141 942 52 5588 215 691 78 43 99 155
655 4247 97 83 257 518 33 78 634 552 54 596 4 9 8 347 17 4926 84 975 2 5732 892 49 12 76 71 3211 87 9 4 6 57 4 66 247 5 92 981 268 1935 139 758 86 476 17 436 974 1 652 774 32 7 615 2 831 74 4 763 18 3 37 51 3741 2 2 323 41 644 5638 8931 66 6 33 35 231 7234 28 1 35 946 58 98 225 48 8 51 6 5 386 8 81 8 61 16 9488 65 134 2172 2 55 12 723 97 66 7 58 272 9 443 767 9 63 28 1 6675 262 187 23 211 693 518 3 3 259 9 68 223 2931 2831 4 977 128 136 68 31 89 691 491 23 75 93 71 86 522 23 813 6798 75 6 126 46 872 93 23 9 446 299 82 2 37 23 993 45 498 65 434 65 5 1 41 2858 592 15 896 54 8294 5257 956 526 235 982 925 821 71 82 19 837 869 65 927 334 53 176 382 241 172 573 7 6 83 4 272 1 14 78 62 32 26 131 4 19 9728 673 6 99 48 97 33 113 9 7892 7575 4 29 188 4 83 639 9 314 97 57 48 87 561 8 29 9553 6 27 5 73 3546 635 73 655 197 918 3 1 57 3765 61 57 6 92 471 45 83 547 5 93 7 595 393 2 2998 847 1 4 399 39 65 951 72 8 264 89 892 3 766 61 165 82 45 34 5443 155 92 89 663 96 39 728 36 7 69 75 51 35 4435 35 76 21 95 6329 97 1772 4 127 7 692 672 33 49 59 75 644 83 235 844 582 177 318 6 6 229 55 9 89 1 3785 97 31 59 24 669 395 54 52 4 47 7 88 52 447 84 38 58 433 9843 95 81 998 4 44 6 2 362 1 17 1 514 8 8765 29 112 9446 4 485 3 756 19 34 997 8317 4 651 12 1 58 62 7 26 8 3 61 551 75 98 8 4 5867 379 27 559 3553 7 124 51 913 48 64 135 892 14 25 76 49 9 88 1 93 26 226 85 22 76 44 781 9 112 831 91 5 89 919 61 489 47 5 456 173 74 134 38 416 64 93 8 341 85 79 5687 83 32 81 836 82 911 5331 82 24 38 83 83 92 34 959 363 59 51 218 48 19 46 5 655 7 9 9 33 15 7 634 616 8376 931 736 958 965 967 1 43 525 76 7 88 3866 5 634 642 95 46 4 96 9 2391 299 46 14 99 237 42 3 6281 87 1439 75 9758 131 81 762 167 8 1914 3 855 75 79 578 15 37 7134 792 325 424 9 7 66 4 227 31 551 36 38 31 444 99 5229 317 41 75 491 366 854 31 255 972 96 925 24 55 26 43 2432 611 26 23 27 48 63 65 17 39 43 93 22 41 4 68 579 957 649 7 976 5 453 23 54 3677 39 9 834 7843 167 1 242 32 11 84 92 66 53 6195 7362 8389 7 41 71 672 796 284 5 4 83 8787 76 8 4855 485 56 684 14 512 5 278 86 4 27 835 6 23 72 7 627 78 28 89 2 54 1 73 3 6339 5 5 912 984 861 79 8 24 268 925 99 397 567 52 18 63 12 97 3 39 56 9 56 5 972 2 95 86 61 461 781 1 12 38 26 38 979 6975 833 8 74 87 671 49 648 358 32 342 3 814 38 753 6 9 89 737 748 4943 96 1688 73 87 162 86 84 5 374 25 31 466 1943 83 376 653 56 9 69 37 1 743 89 53 16 882 1 67 89 8594 626 253 92 75 34 48 87 722 1 289 65 9 44 13 25 13 51 3568 271 3211 96 8 8488 34 813 26 95 83 33 4 4 336 49 73 75 88 44 159 7 86 561 45 43 89 93 4616 66 328 96 16 45 92 41 943 41 362 437 72 571 774 884 58 8381 66 45 89 27 5 1467 99 791 81 7139 5578 24 9 57 34 21 7 187 8 768 6 16 1 8551 37 1539 229 421 3 62 23 21 855 41 999 4795 13 84 13 79 165 7 72 23 2 627 39 16 215 185 44 385 216 755 24 847 51 96 12 12 24 8 1 359 7156 5 719 64 23 647 153 65 87 2848 286 7 8455 837 82 49 9 292 71 1 474 5 9336 66 29 157 6 4 21 11 14 77 6 474 289 33 94 4 83 183 95 278 9 19 77 6 79 52 78 67 99 8 39 24 32 7 775 49 5 3 531 578 511 59 23 794 22 15 84 48 363 83 5331 8 81 692 5 85 59 598 687 1 99 896 5 7 694 551 4 68 72 17 3623 59 6 491 827 2732 3721 66 93 72 676 156 6 95 11 44 46 22 4 323 74 91 8 315 34 12 3 1 8 194 34 11 1 47 5538 1 79 9 152 27 46 329 5 314 86 5955 1963 53 799 41 1292 814 91 49 46 95 429
* + * + + * * + + + + * * * * * * + * + * + * + + * * + + * + * * * + * * + * * + + + + * * * * + * * * * * * + * + * + * + * + + * * * + + + + + * + * + + * * + + * * * + + * + * + + * * + + * * + * + + * * + * + * * + * + * + + + + * * + * * * + * * * + + + * * * * + + * + + + * * + * + * * + + * * * + + + * + + * * + + + + + + * * * + + + * + * * + + * * * * * + + * * + * * + + * + * * * * * * + * + * + * * * * * + * + + * + * + + * * + + + * + * * * * * + + + + + + + + * * * * + * + + * + * * * + + + + * * * * * * + + + + * + + * + + * * + + * * * * * * + + + + + + + * + * + * * + + * * * + + + + + * + + + * * + * + * * * * * + * * * + * + * * * * + * + * + * * * * * * + + + * * * + + * + + * * * + * + * + * * + + + + * * + * * + + * * * + + + + * + * * * * * * + * + * * + + * + + * * * + * * + + + * * * + * + + * * * + + * * * * * * + * + * + * * * * * * * * + * + * * * + * + * + + + + * * + * * * * + + * + * * * * + + * * * * * * + * + + + * * + * * * * * * + * + * * * * + * + + * + * * + + + * + * + * * + + * + * * + + + * + + * + * * + * + * * + * + * * * + * * * + + + + * + + + * + * * + + * + + * + + * + * + + * * + + + + + + + * + + + * + + + * * * + * + * + * + + + + * + * * + + * + + + + + + + + + + * + + * * * + * + * * + * * + * * * + + * + * * + + + + * * + * * * * * + * * * * * * + * + + * * * * * * * + * + + + + * * * + * * * * + + * + * * * * + + * + * * * * + * * + * * + + + + * + * + * * + + + * + * * + * + + * + + * * * * * * + * * * * + * + * * + + * + + * * * + * * + + * * + + * * * * + * + * + * + * * + + * + + + * * + + + * + + + + + * * * + + * * * * * + * * * + + * + * + * * * + + + + + * + + + * * + * * + + * + * * * * * * * * + + + + * * + + + + * + * * + * + * + + * + * + + * * * * + + + + * + * * + * * * + * * + + * + * + + * * + * + * + * * + + * + * + * * + * * + * + + * * * + * * + + + * * + * + + * * * * + + * * + + * + * + + * + + * + * * + + * * + * + * + + * * + + * * * + * * + * * + * + * * + * * * + + + + * + + + * * * + + *

232
day07/run.pl Executable file
View File

@ -0,0 +1,232 @@
#!/usr/bin/perl
use strict;
use Config;
$Config{useithreads} or
die('Recompile Perl with threads to run this program.');
use threads;
use Thread::Queue;
my @lines;
{
my $splits=0;
my %positions;
my %nextpositions;
while(my $line=<DATA>) {
chomp($line);
push @lines, $line;
for(my $i=0; $i<length $line; $i++) {
my $c = substr($line, $i, 1);
if($c eq 'S') {
$nextpositions{$i}=1;
} elsif($c eq '.' && $positions{$i}) {
$nextpositions{$i}=1;
} elsif($c eq '^' && $positions{$i}) {
$splits++;
$nextpositions{$i-1}=1 unless($i == 0);
$nextpositions{$i+1}=1 unless($i == length($line)-1);
}
}
%positions=%nextpositions;
%nextpositions=();
}
print "Saw $splits splits\n";
}
my @rows;
my $startpos;
for(my $y=0; $y<@lines; $y++) {
for(my $x=0; $x<length $lines[0]; $x++) {
$rows[$x]=[] if($y==0);
$rows[$x][$y] = substr($lines[$y], $x, 1);
if($rows[$x][$y] eq 'S') {
$startpos=[$x,$y];
}
}
}
my $ends = 0;
my $numworkers = 16;
my $queue = Thread::Queue->new();
my @threads;
$queue->enqueue($startpos);
for(my $i=0; $i<$numworkers; $i++) {
push @threads, threads->create(\&process);
}
foreach my $thread (@threads) {
my $count=$thread->join();
print "Joined thread with $count ends\n";
$ends+=$count;
}
print "$ends total ends\n";
sub process {
my $ends = 0;
while(my $pos=$queue->dequeue_timed(5)) {
my($x,$y)=@$pos;
for(;;) {
$y++;
if($y == @{ $rows[$x] }) {
$ends++;
last;
} elsif($rows[$x][$y] eq '^') {
$queue->enqueue([$x-1, $y]);
$queue->enqueue([$x+1, $y]);
last;
}
}
}
return $ends;
}
__DATA__
......................................................................S......................................................................
.............................................................................................................................................
......................................................................^......................................................................
.............................................................................................................................................
.....................................................................^.^.....................................................................
.............................................................................................................................................
....................................................................^.^.^....................................................................
.............................................................................................................................................
...................................................................^...^.^...................................................................
.............................................................................................................................................
..................................................................^.^...^.^..................................................................
.............................................................................................................................................
.................................................................^...^.^.^.^.................................................................
.............................................................................................................................................
................................................................^.^.........^................................................................
.............................................................................................................................................
...............................................................^.^...^.^.^.^.^...............................................................
.............................................................................................................................................
..............................................................^.^.^.^.^.^.....^..............................................................
.............................................................................................................................................
.............................................................^.^.....^...^.^.^.^.............................................................
.............................................................................................................................................
............................................................^...^.....^.^...^.^.^............................................................
.............................................................................................................................................
...........................................................^.....^.^.^.^.^.^.^.^.^...........................................................
.............................................................................................................................................
..........................................................^...^...^.....^.^...^.^.^..........................................................
.............................................................................................................................................
.........................................................^.^.....^.^.....^.^.^.^.^.^.........................................................
.............................................................................................................................................
........................................................^...^.^.^.^...^.^.....^.....^........................................................
.............................................................................................................................................
.......................................................^.^.^.^.^.^.....^.....^.^.^.^.^.......................................................
.............................................................................................................................................
......................................................^.^.....^.^.^.....^.^...^...^.^.^......................................................
.............................................................................................................................................
.....................................................^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.....................................................
.............................................................................................................................................
....................................................^.^.^...^.^.^.^.^.^.^.^...^...^.^.^.^....................................................
.............................................................................................................................................
...................................................^.^...^.^.^.^.^.^...^.^.^.^.^...^...^.^...................................................
.............................................................................................................................................
..................................................^.^.^.^...^.^.^.^.^.^.^...^.^...^.^...^.^..................................................
.............................................................................................................................................
.................................................^.^.^.^...^.^.......^.^.^.^.....^.^.^.^.^.^.................................................
.............................................................................................................................................
................................................^...^.^.^.^.^.^.^.^.^.^.....^.^.^...^.^.^...^................................................
.............................................................................................................................................
...............................................^.....^...^.^.^.^.^...^...^.^.^.^.^.^.^.^...^.^...............................................
.............................................................................................................................................
..............................................^...^.^...^.^...^.....^.^.^.^.^.^...^.^.^.......^..............................................
.............................................................................................................................................
.............................................^.^.^.^.^...^.^.^.^.^.^...^.....^.^.....^.^.^...^.^.............................................
.............................................................................................................................................
............................................^.^.^.^.^.^.^.^.^.^.^...^.^.....^...^.^...^.^.^.^...^............................................
.............................................................................................................................................
...........................................^.^.....^.^.....^.^.^.^.^.^.^.^.^.^...^.^...^.^.^.....^...........................................
.............................................................................................................................................
..........................................^.^.^...^.....^.^.^.^.^...^.^.....^.^.^.^...^...^.^...^.^..........................................
.............................................................................................................................................
.........................................^.^...^.^.^.^.^.^.^.^.^.^.^.....^.....^.^.^.^.^.^.^.^.^.^.^.........................................
.............................................................................................................................................
........................................^.....^.^...^.^.^.^.....^.^.^.^...^...^.^.^.^.^...^.^...^.^.^........................................
.............................................................................................................................................
.......................................^.^.^.^.....^.^.^.......^.^.........^...^.^.^.^.....^.^.....^.^.......................................
.............................................................................................................................................
......................................^.^.....^.^.^...^.^...^.^.......^.^...^.^.^.^.^.^...^.....^.^...^......................................
.............................................................................................................................................
.....................................^.^.^...^.^.^.^.^.....^.^...^.....^.....^...^.^...^.......^.^.^.^.^.....................................
.............................................................................................................................................
....................................^.^.^...^...^.^.^...^.^...^.^.^.^.......^.....^.....^.^.......^.^.^.^....................................
.............................................................................................................................................
...................................^.^.^.^.^...^...^.^.^.^.^.^.^.^.^.^.......^.^...^.^...^.^.^.^.^...^.^.^...................................
.............................................................................................................................................
..................................^...^.^.^.^...^.......^.^.^...^.^.......^.^.^.....^...^...^.^.^...^.^...^..................................
.............................................................................................................................................
.................................^...^.......^.^.^.....^.^...^.^...^.^.^.^.^.^.....^.^...^...^.^.^...^...^.^.................................
.............................................................................................................................................
................................^.^.^...^.^.^.^.^.^.^...^...^.^.......^.^...^.^.^...^.^...^.^.^.^.^...^...^.^................................
.............................................................................................................................................
...............................^.^.....^.^.^...^.^.^.^...^.........^.^.^.^.........^.^.^...........^.^.^.^...^...............................
.............................................................................................................................................
..............................^.^...^.^...^...^...^...^.^.^.^.^.^...^.^.^...^.^.^...^.....^.^.^...^...^.^.^...^..............................
.............................................................................................................................................
.............................^.^.^.^.^.^.^.....^.^.^.^.^.^.....^...^.^.^.......^.^.^.^.....^.........^.^.^.....^.............................
.............................................................................................................................................
............................^...^...^.^.^...^...^.^.^.^.^.^.^.^.^.^.......^.^.......^.^.....^.^.^.^...^.^...^...^............................
.............................................................................................................................................
...........................^.^.^...^.^.^.....^.....^.^.......^.^.^.....^.^.^...^.....^...^.^.^.^.....^.^.^.^.^.^.^...........................
.............................................................................................................................................
..........................^.....^.....^.^...^.^.^.^.^.^...^.^.^.^.^.^...^.^...^.^.^...^.^.^.....^.^.^...^.^...^...^..........................
.............................................................................................................................................
.........................^.^...^.^.^.^...^.^...^.^.........^.......^.^.^.^.^.^...^.^.^.^.^.^.^...^.^.^...^.^.^.^...^.........................
.............................................................................................................................................
........................^...^.^.^.^...^.^...^...^.^...^.^.^...^.^.^.^.^.^...^.^.^...^.......^.^.^.^.^...^.....^...^.^........................
.............................................................................................................................................
.......................^.^.^...^.^.^.....^.^...^.^.^...^...^.^.^...^.^.^...^.^.....^.^.^.^.^...^.^.........^.^.^.^.^.^.......................
.............................................................................................................................................
......................^.^.^.^...^.^.^.^.^.....^.^.^.....^.^.^.^.^...^.^.^.....^.^.....^...^.^.^.^.....^...........^.^.^......................
.............................................................................................................................................
.....................^.^.^.^.^.^...^.^.^.^.^.....^.^...^...^...^.^.^.^.^.....^.^.^.....^.^...^.......^.^.^.....^.^.^.^.^.....................
.............................................................................................................................................
....................^...^.^.......^.^.^.^.^.^.........^.^.^.^.......^.^...^.^.^.^.^.^.^.^.^...^.^.^.....^.^.^.^.^.^.^.^.^....................
.............................................................................................................................................
...................^.^.......^.^...^.^.^.^.^.^...^.^...^.^...^.....^.^.^...^.^...^.^.^.^.^...^...^.^.....^.^...^.^.^.^.^.^...................
.............................................................................................................................................
..................^.^.........^.^.^...^.^...^...^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^...^.....^...^.^..................
.............................................................................................................................................
.................^.^.^...^.^.^.^.^.......^.^.....^.^...^.^.^...^.^.^...^.^.^.^.^...^.......^.^...^.^.^.........^.^...^.^.^.^.................
.............................................................................................................................................
................^.....^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.^...^.^.^.^.^.^.^...^...^.^...^.^.^.^...^.^.^.^.^.^.....^...^.....^.^................
.............................................................................................................................................
...............^.....^.^.^.^.^.^.^.^.^.^...^.^...^...^...^...^...^.^.^.^.........^.^.^.^.^...^.....^.^.......^...^...^.^.^.^.^...............
.............................................................................................................................................
..............^.^.^.^.^.^.^...^.^.^.^.^.^.^.^...^.^.^.^...^.^...^.^.^.^.^...^.^.^.^.^.^.^.^.....^.^...^.^.^.^.^...^.....^.....^..............
.............................................................................................................................................
.............^.^...^.^.....^.......^.....^.....^.^...^.^.^.^.....^.^.....^.....^.^...^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.............
.............................................................................................................................................
............^.^...^.^.....^.^.^.^.^.^.^.^...^...^.^.^.^.^.^.^.^.^.^.^...^.....^.^...^...^.........^.^...^.^...^.^.^.^.^.^.^.^...^............
.............................................................................................................................................
...........^...^.^.^...^.^...^...^.^...^...^.^.^.^...^.^.^...^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^...^.^.^.....^.^.^.^...........
.............................................................................................................................................
..........^.^.........^.^...^.....^.^.^.^.^.^.^.^...^...^...^.^.^.^.^...^.^.^...^...^...^.^.^...^.^.^.^...^.^.^.^...^.....^...^...^..........
.............................................................................................................................................
.........^.^.^.^...^...^.^.^.^...^.^.^.^.^.^.....^...^.^.....^.^...^...^.^...^.^.^.^...^.^...^...^.^.^.^...^...^.....^.^.^...^...^.^.........
.............................................................................................................................................
........^...^.^.^.^...^.^.^.^.^.^.^...^.^.^.........^...^.^.^.^.....^.^...^.^.^.^.^.....^.^.^.^.^.^.^.^.^.^...^.^.^.....^.^.....^.^.^........
.............................................................................................................................................
.......^.......^.^.^.^...^.^...^.^...^.^.^.^.^.^.^.^.^...^.^.^...^...^...^.^.^...^.^.^...^.^.^.^.^.^.^...^.^.....^.^.^...^.^.^...^.^.^.......
.............................................................................................................................................
......^...^...^.^.....^.^.^.^.^.^.^...^.^.^.^...^.^.^...^.^.^.....^.^.^.....^.^.^.^.^...^.^.^.^.....^.^.^...^.^.^.....^.^.^.^.^.^...^.^......
.............................................................................................................................................
.....^.....^.^.^.^.^...^.........^.....^.......^.^.^...^.^.......^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.^...^...^.^.^...^...^.^...^.^.....^.^.....
.............................................................................................................................................
....^.^.^.^...^.^.^.^.^.^.^...^.^.^.^.....^.^.^.....^.^.^.^...^.....^.^.....^...^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^...^.^.^...^...^....
.............................................................................................................................................
...^...^.^.^.^.^.^...^.^.^.^.^.^.^.^.....^...^.^.^.^.^.^.....^.^.^.^.^.^...^.......^.^...^...^.^.^.^...^.^.^...^.^.^.^.^.^.^.^...^.^.^...^...
.............................................................................................................................................
..^.^.^.^...^.^.^.^.^...^.....^...^.^.^...^...^.^.^.^...^...^.^.^...^...........^.^.^.^.......^...^...^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^..
.............................................................................................................................................
.^.^.^.^.^.^.^.^.^.^.^.......^.^.^.^.^.^.^.^...^.^...^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.....^.^.......^.^.^.^.^...^...^.^.^.^.......^.....^.
.............................................................................................................................................