Move c++ solutions into separate directory

This commit is contained in:
SebastianStork 2025-01-06 17:12:41 +01:00
parent 3c40f13cfc
commit 4adbe68617
28 changed files with 1 additions and 1 deletions

View file

@ -0,0 +1,7 @@
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp

1000
2024/cpp/day-01/input Normal file

File diff suppressed because it is too large Load diff

59
2024/cpp/day-01/main.cpp Normal file
View file

@ -0,0 +1,59 @@
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
void readInput(vector<int> &list1, vector<int> &list2)
{
int value1, value2;
while (cin >> value1 >> value2) {
list1.push_back(value1);
list2.push_back(value2);
}
}
void sortLists(vector<int> &list1, vector<int> &list2)
{
sort(list1.begin(), list1.end());
sort(list2.begin(), list2.end());
}
int calculateTotalDistance(const vector<int> &list1, const vector<int> &list2)
{
int totalDistance = 0;
for (size_t i = 0; i < list1.size(); i++) {
totalDistance += abs(list1[i] - list2[i]);
}
return totalDistance;
}
int calculateSimilarityScore(const vector<int> &list1, const vector<int> &list2)
{
int similarityScore = 0;
size_t index2 = 0;
for (size_t index1 = 0; index1 < list1.size(); index1++) {
while ((index2 < list2.size()) && (list1[index1] > list2[index2])) {
index2++;
}
while ((index2 < list2.size()) && (list1[index1] == list2[index2])) {
similarityScore += list2[index2];
index2++;
}
}
return similarityScore;
}
int main()
{
vector<int> list1, list2;
readInput(list1, list2);
sortLists(list1, list2);
// Part one
cout << "Total distance between the lists: " << calculateTotalDistance(list1, list2) << endl;
// Part two
cout << "Similarity Score: " << calculateSimilarityScore(list1, list2) << endl;
}

View file

@ -0,0 +1,7 @@
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp

1000
2024/cpp/day-02/input Normal file

File diff suppressed because it is too large Load diff

80
2024/cpp/day-02/main.cpp Normal file
View file

@ -0,0 +1,80 @@
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
vector<vector<int>> readInput()
{
vector<vector<int>> list;
string line;
while (getline(cin, line)) {
list.push_back({});
stringstream stream(line);
int value;
while (stream >> value) {
list.back().push_back(value);
}
}
return list;
}
int getIndexOfUnsafeValue(const vector<int> &report)
{
const int MAX_SAFE_DIFFERENCE = 3;
int directionOfChange = (report.front() < report.back()) ? 1 : -1;
for (size_t i = 0; i < report.size() - 1; i++) {
int levelDifference = (report[i + 1] - report[i]) * directionOfChange;
if (levelDifference <= 0 || levelDifference > MAX_SAFE_DIFFERENCE) {
return i;
}
}
return -1;
}
bool isSafeReport(const vector<int> &report, const bool applyDampener)
{
int indexOfUnsafeValue = getIndexOfUnsafeValue(report);
if (indexOfUnsafeValue == -1) {
return true;
}
if (!applyDampener) {
return false;
}
vector<int> tempReport = report;
int unsafeValue = report[indexOfUnsafeValue];
tempReport.erase(tempReport.begin() + indexOfUnsafeValue);
if (getIndexOfUnsafeValue(tempReport) == -1) {
return true;
}
tempReport.insert(tempReport.begin() + indexOfUnsafeValue, unsafeValue);
tempReport.erase(tempReport.begin() + indexOfUnsafeValue + 1);
return getIndexOfUnsafeValue(tempReport) == -1;
}
int calculateNumberOfSafeReports(const vector<vector<int>> &list, const bool applyDampener)
{
int numberOfSafeReports = 0;
for (const vector<int> &report : list) {
numberOfSafeReports += isSafeReport(report, applyDampener);
}
return numberOfSafeReports;
}
int main()
{
vector<vector<int>> list = readInput();
// Part one
cout << "Number of safe reports: " << calculateNumberOfSafeReports(list, false) << endl;
// Part two
cout << "Number of safe reports (when taking the dampener into account): "
<< calculateNumberOfSafeReports(list, true) << endl;
}

View file

@ -0,0 +1,7 @@
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp

6
2024/cpp/day-03/input Normal file
View file

@ -0,0 +1,6 @@
?% mul(948,148)why() %how(670,744)mul(590,32);where())#}from()>how()mul(611,372)}{~^?>from()^mul(835,665)who()]#^don't()select()select())mul(724,851)[>&mul(188,482)$mul(781,111)[who()<why(),!]mul(678,13)why()$#%who()mul(620,771)<!^}@^+what()mul(281,719)(]'what()where()>&from():!mul(147,678)how(){mul(938,510)where()!$?*['mul(103,563)where())mul(4,125)$*>>^mul(126,929)]& %~mul(161,418)who()>>do()]-''?mul(416,366)~?/where()]who()mul(459,47))>what(){@[(mul(219,400)+do()when()from():who()when()]&{{%mul(804,830)-select()what()*what()%}mul(861,992)who()!',mul(159,874)#<)''<mul(460,777)?mul(909,244)how()+what()]<do()?}mul(749,87)from()(who();why()mul(430,124)/$>how()@$%mul(214,139)&how()>mul(112,835)select()*from()@why()?[{mul(209,568)/; ~)mul(630,749):mul(841,589)/;who()>[mul(778,567)+when() how()<#mul(544,851)what(){+mul(327,103)from()what()/[~-mul(995,415)/when()-mul(880,153)}:}mul(368,920)'how()mul(864,419)from()what()@mul(208,291)who()<?}?what()',[{mul(575,454)*&(<{how()[mul(557,489){{why(){how()@who()~mul(423,703)mul(910,916)+what()^/<-*from()'mul(746,826),-*)/+>}^from()mul(154,571)++:>,mul(601,458)why()<;how()~from(172,16)mul(333,315)?[mul(513,260) {*mul(117,759)%]mul(77,644){($%>]&~mul(238,306)~select()from();-'who()'mul(460,352); ?select()>[[(from() mul(337,294)why()how()</$<where()don't()(?]{why()%}from()mul(367,653)~mul(910,873)^why()>mul(499,785)>what()[*:#where()*what()mul(765,210)*$[]mul(461,957)##)+}when()-@:mul(198,90)what()what()how()') )mul(258,966)]+(when()mul(535,417)where()!don't()@mul(939,319)?mul(751,538))! mul(758,675)~how()[how(),@>[where()when(29,965)mul(358,39){^what();/(where()how()mul(271,786)why():mul(792,761)do()$]%mul(740,232)>who(949,378)what()[(where()who(){who()#mul(595,343)%+mul(194,296)'mul(161,747): '{where(12,567),@mul(234,39)!+do()/who()[where()&'what()when()how())mul(138,925)),#;where()>{mul(738,864){mul(605,662)*when()%when()+( /~&mul(633,935)when()];mul(263/}*<!where(),- ~when()mul(512,798)]}where())when()who()mul(933,447)where()}mul(33,935*mul(15,975)mul(574,550)+#^;'$from(280,157)$^what()mul(919,849)@mul(18,160))$&^]how()what() when()where()mul(88,657):/from())+:/when()@]mul(71,74)from()'*:@{>mul(127,821)^how()$$select()select()@^{:mul(867,979)&%/>{%^how()what(499,657)+do()%what()(~;-:*mul(438,941)<]?]mul(208,834when()&^;]from()when(613,710)^}+$mul(809,573)mul^)*:from(379,983)mul(47,786)}when()-what()how(450,632)> where()how()mul(810,597 ;;{%(select()select()&,mul(356,249)from()/!{#&^mul(23,248)(!who()]-+,mul(873,987)]{what()< )-{^mul(591,317)/mul(382,188)mul(476,338)*why()$]mul(865,625)who()})?select():*@[)don't()/ ,mul(737,418)select(318,357);+ what()<mul(41,445)mul(236,630)$}from()]$^$,(do()-select()mul(369,197)from()]#};^mul(561,752)+&#+}?}:mul(18,235)<'& ,(*mul(645,811)why()select()who()[>where()don't()%#>!>/@what()[mul(490,823)&^( ,'@ [do()@mul(855,491)*^why()[,mul(348,679)how()$who() '&how(16,459)/!;mul(43,422)#^from()![}select()mul(976,749)-}select()-where()select()mul(223,589)%[why()mul(868,881)mul(178,790)$,{who()from()#,mul(318,399):where()?[mul(182,864)where() mul(156,690) -]mul(857,353)#'%,},>?+@mul(914,528)where()$mul(785,748)<$who()[mul(453,859)%'@ mul(84,729)/{do()(?$<}mul(820,286)?:*?}#when()(%mul(245,958when()?from(),+mul(128,335)mul(463,102);:]@-~-%mul(914,398)
+mul(720,985)how(340,568)^!what()[),[mul(734,270)~')?who()]]mul(964,739)from()?who()$when() /mul(566,142)}*,?how()~mul(733,766)when()mul(319,914)when()mul(808,141)*@:&who();mul(736,736)where(){&!$when()]^mul(612,574)how()mul~]what()!!'[:mul(805,568),<^+~ #)&who()mul(810,729),[~/^<&mul(706,233)!-'{why(),(?&mul(28,746)%mul(127,170)-?} #don't()from(),[@,mul(282,734)mul(332,651)[:~mul(771,888)#who()^select(110,751)>who(){mul(655,334)why()+~&}mul(129,762)mul(597,498))*~-}who()who()~'$mul(235,859)where()^-,,@mul(661,707)[ ~,<-mul(502,445)?why(){why()from()-how()*>&mul(237,280)how()mul(669,512)#$< mul(426,417)[what()why()~select()*%,'where()mul(213,617)##>mul(148-how()&]mul(437,581)who()'<from()>%[:how()mul(985,24);mul(446,704)who(),mul(549#}%>[mul(58,502)%mul(55,502)~<where()''who()}<mul(678,579)mul(457,825)+how()from()'(*#+$$mul(266,507)mul(925,485)^why()mul(605,592)[}<>^<mul(173,922)@:<where()/-]'mul(110,899%select()why()why()>[%%;mul(63,642)>how())<*{mul(155,625)]mul(238,47)where()&@mul(630,112)who() mul(570,946)mul(299,320){({mul(307,251)%[]$%mul(621,739)^!}{^-+what())mul(350,650)!>who()what()]^,*mul(154,394)&?^mul(410,870)[-select()why()<who():+%don't()where()$]/when() how()when()mul(708from()]&?mul(589,972)*mul(167,814)[mul(807?%don't()])?'(who()mul(614,926)mul(404,930)'?+;mul(252how()^who(529,21)'who()%mul(675,37)mul(362*what(640,926)select()'?what(){'>mul(744,141)why():))from()^select()what()mul(991,854){-]+mul(64,859))~>>%>%select()#-mul(282,835)'select()'%<$!from(299,765)don't()-'mul(352,659),mul(366,409),when()mul(672,590)#@#}/(## mul(550,937)$#/^~mul(458,447)mul#(,/<mul(538,275)}where()'?'!-)mul<^>(how(),mul(465,230)^select()$<from(595,221):mul(704,141)what()]when()^select()^)^%'mul(260,350)>how()what()#@};(from()~mul(716,318)from()+]<!?mul(625,41)#[,~ /mul(19}mul(760,4)@how()mul(508,977)@select())][[mul(261,452 $mul(11,905)how(731,838)[mul(823,988)?!?@&&'mul(929,818)(>mul(701,784)!;>do()'&)when()select()mul(945,704)mul(250,874)who()]@don't()why(51,895)-,how()*+{why()%/mul(964,293)&<^where()<select();&mul(900,32)]where()$from()&#from()who()({mul(755,539)mul(26,466)how()$when()%&$~)mul(926,673)$what()!select(),do()~select()#^mul(272,306)~%'mul(22,647)$mul(904,943)^>-from()mul(635,212)when()how()[mul(314,335)%(- + ~mul(635,915)~[[do(){where(307,78)(who()(why()where();mul(450from()mul(903,662)>$mul(924,200),why()select()$mul(418,533)where()[where()mul(266,643):~^/#(:[from()mul(81,715),who()@:~+who()'%mul(79?who()select();# mul(436,105)#*why() #~[,where()'mulwho()[(~)[mul(119,92)]where(),select()why()?mul(639,691):+<why()why()mul(815,366)*where()-what()/?>mul(188,19)who()(select()what()mul(916,808));~mul(630,228)-)where()[~mul(586/[how()+~!>}>[how()mul(106,235)do()>why(416,339):mul(788,357)[when(442,691)what()how()where()$from()who()mul(471,832)]/*mul(837,328)<)>!mul(389,633)'from(),mul(70when()!from()select()$](when()*%mul(903,43)where(62,223)^from();@()mul(852,198)-when()?mulhow(168,455)(select()how();from()/mul(918,330)what()'how(215,263)$:{~how()*mul(136,552)from(363,441)-when()how()what()-+mul(229,899)!where()when()from(){mul(47,875)~mul(500,586)/&&where(),where()mul(571,252))%}^~when()mul(979,493)do()@!+~>^mul(568,461)]where()$who(){from();mul(743,403)@?[mul(117,954))/mul(382,589)<:what() mul(578,730)#/<,when()#)select()}mul(889,462){how(562,136)select()when()^>mul(150,815)/$from()?what()mul(842,604)**?'-^>;~'mul(622,493)
mul(901,810)[<,^$do()<#why()<why()},,select()mul(257,221)mul(393,412)-from()&$]mul(198,284)/>;/why()mul(296,969)@mul(224,163)#<$what():,what()mul(995,485)$~)who()mul(382,831)'&~mul(146,234)mul(228,532)mul(944,430)!!who()<;'$(%do()%'{mul(588,828)~$why():where()mul(753(select()/':~$[mul(785,897)/<(#$)@mul(821,858)$what()+@/*mul(545,209)where();what()mul-why()>mul(808,588),where()];;}mul(431,815)<<;how()?@why()(^don't()select()$)!mul(832,43)what()[where()mul(935,377)from()++where()$-]@mul(793,489)*&mul(910,985)mul(340,122);from(87,683)[[]]'mul(659>from()['from()~,;@:^mul(420,510)/mul{from()$ >! -mul(508,275)!()@+{!mul(134,503)how()?mul(717,994)@}what()}[@<do()~'[??from() #&}mul(443,258)){do()^mul(894,293),@from()mul(470,736)/select()where()from()how()mul(769,763)/-'mul(436,853)from()mul(955,870);#why()how()how()mul(807,205)#do()select()<@$when()*select()>mul(899,477)who(88,557){[?-mul[how()>>@mul(113,239)&;?what(825,719)from()}@mul(717,829)when()who()%@what()when()#':mul(644,495)]^$ >[~don't()!#mul(175,323)><$>do()[[$what()/>(#~mul(976,792))what()#{how()-$?mul(534,805))what()@mul(600from()'from()mul(859,367)from()mul(852,796)?{[]/'~mul(624,853($:;^mul(522,963)+mul(143,246)[,what()#*when()',why()mul(435,720)mul(812,909)'<? /;when()}*how()do()mul(49,504)how()when()/!mul(799,134)$mul(213,950)from(182,488)];]do()mul(325,689)(@mul(485,128)who()mul(376~when()(%-what()(mul(776,635)#: from(788,757)}mul(997,619)-from(919,426)where()where()how() mul(370,735)*what(),*%$mul(408,722)}#mul(990,90)(<where()*don't()*@:(;what()%:*#mul(804,562)mul(162,269)]mul mul(267,461)%#{(};^~[mul(124,671) ~-<$<from()<from()mul(401,89)>&!!who()how()/,who()>mul(179,82))]don't()@(}<who()where()%<from()]mul(950,333) }&mul(420,707)mul(293,223)what()(/mul(131,775)>@<mul(498,349)mul(416,808)*how(676,683)select()&@mul(100,528)'&from()/[<,%>!mul(224,804'}-mul(180,723)#+@mul(144,160 +#<]where()+!from()select()(mul(614,183)mul(123,655)*+##mul(744,352):#$when()~&,what(625,950)select()'mul(468,293)*]+#mul/$why()where(623,670)%@;mul(722,469)&(%;do()) from()mul(557,124)/}:mul(928,793>]how(){?who()'<mul(74,894)%mul(312,960)'(,]%^mul(560,307<where();when()}how()%>[mul(624,959)&mul(765,13):who()<),who()& mul(639,802)&;(@:why(988,378):mul(677,987)~@-! ;!^do()mul(29,935)mul(134,862)when()+{what()when()who()}~why()mul(541,335)who()@[<mul(342what()select()who();mul(833,47)when()%@}${why()mul(891,370)(@*@[^mul(652,523)}why()&-(?'*mul(906,962) )mul(691,622)~(!<--when(506,845)</$mul(603,406)'how(83,339)mul(44,583)<:-^/why()mul(812,857$what()<-:$]what()?mul(226,418)!>'+why();when()&mul(127,948)$mul(485,474))?$mul(278,206)select()mul(641,623){} @{*where()'?mul}>mul(792,193) [#;*%->~what()mul(876,897)/@+'mul(341,837)^)why()?;@+^^~mul(718,922)[why()when()/,{}select()who())mul(941,117)/}/who()why(293,857))mul(414,482)what()! how()who()mul(910,766)!]what(),how()*mul(6,611)~;{who()who()[--mul(720,952)why(546,471)!)from()/?mul(971,461)}&/$@'mul(452,187)#who():(mul(44,298)mul(530,770)']:who()&$from()mul(544,752)mul(375,827))&@select()^;who()where()how()mulselect()^%^,/&mul(204,187)when()&,}$(who();mul(60,317)+who()$from()(how(942,734);@mul(239,338)!?:%)}@select()(mul(284,525)select()what()where()@^#~[mul(718,185)&!*{';when()@when()mul(272,161)how()%how()?mul(66,988)@)@,::>)mul(930,190)why(),~when()%<@&where(),mul(143,136)why()-,/*-what()+mul(73,408)~ who()%*select()'+where()#!/usr/bin/perlmul(379,680)
;@mul(257,25)[!mul(646,635)>?who()who()from()mul(25,275(select()+why()%mul(102,254)%}/where()$mul(608,18)when()*#mul(343,951) mul(337,866)*^?#@why(805,831)-mulwhen()from()mul(854,5)when()@$why()mul(896,11)^mul(451,271)'how()?who()?)<%[}don't()who()/[{]-?from()when()?mul(198,238)])mul(750,760)+/-!what()~?#mul(880,271)%?select();where()(<^select()mul(373@from()where(),mul(700,15),mul(406,120)mul(551,206)mul(636,315);+{mul(261,201)mul,:-/&mul(267,217)/,'mul(132,410)@@;;who()when()]do()why()mul(4,121)#from()/mul(242what()how(277,558)<how()from()+:who()from()what()when()mul(27,714)who()why()what()mul(676,758)+^@*'}mul(274,109)-}]),select()*when()]why()mul(60,516)when()when(708,630)%%where():mul(34,59)from()#]how()+who()%who()*don't()select()&~(;where()/mul(548,869)&mul(439,68)]@}%)~&mul(46,712)when()+[&]where(),+mul(940,261)^who()where()mul(655,165) >'how()how(){mul(12,537)&[>}mul(322,676)[#,do()@,mul(248,663),when()-do()^what()]when()who()what()how())mul(864,73)how()?]*mul(653,55)when()from()from()how()@ }mul(94,590)]~what()mul(164,505)]from()when()]mul(218,565)(from() why()[*when()}[mul(306,447)*]][> #mul(783,715?)+^~mul(308,994):<*~)>from()why()*mul(508,139)>from()@;+~#mul(652,903)#[/?mul(407,208]how(){when(),**@*:/mul(849,965)mul(69,198<'#%[?mul(236,808)what()from()%from()why()^/,don't()select()&where()@mul(888,101) mul(332,775)who()):select()),:-mul(119,209)%how()mulfrom()select()don't(){mul(838,613)why() '({*<!mul(372,376)mul(407,117$who()[ mul(171,741)where();mul(742,142)mul(34#^+:who()mul(157,514)>~>*mul(466,106)mul(883,754->(%%who()[!mul(587,792)'((!?select()&}<mul(791,734){how()&;+<(mul(655,63):why(){!{)mul(320,950)->-'#)why()#[mul(234,162),what(497,671)why()#mul(985,797)>}~;from()select()mul(117,492)&~+from()]%>*$&mul(451,669))}'/@how()?where()why(694,295)'mul(676,756){~;select()what()}what()^}mul(963,857);%/how()?mul(944,194);select()<&^how(){->mul(195,702))?select()why()&~%}why()#mul(90,304)@%why(673,634)*/where()- <:do(){}!mul;who()]where()]-@?<mul(919,817),>when()how()how()>mul(875,604)select()%do()%mul(790,136)*$,mul(853,95)[how()>!%?mul(246,573)&!what()/#from()!mul(382,307),!#[-mul(32,733)$+[*mul(192,47)(@who()mul(304,303)@mul(167,528):select())!:how(){what()(}mul(933,177))#>$#,$:mul(81,603)<mul(40,227)mul(717,937)mul(853,848)mul(66,164)where())^<>what()?how()when()mul(206,607)<where()[$)}when()how()select()*mul(265,447)*/what())%+'[ from()mul(358,747)what()+%how()#from():,what()@mul(791,401)~where()[mul(990,778)?~[!:>!'^mul(666,852)mul(651,206)!+]}from()don't():*]#what()mul(359*%who()^)'mul(190,764)who()when()}select()~(~mul(547,102)mul(406,618)%when()>)<mul(822,907)?/[/from()mul(945,506)>![#mul(890,746)#who()$'~%]',+mul(341,395)who()--mul(285,533)}how()@<}!mul(715}>+~ select()where()$ (mul(894,62)?]}who()&when(652,875)%:}from(24,82)mul(713,250))-^{*%mul(548,903)&]]<]why(){from()when() mul(796,100)-(how()$%~mul(589,969) :who() @mul(271,734)<}mul(761,8)}@['- ['$mul(178,28)who()who(282,161)@$from()mul(413,253)#when()?(mul(585,394))select():$?#?>who()?mul(245,344)who()^who()where()why()~@why()don't()why()how()who(450,27)who()(!mul(951,644):select()-)%?*don't(), mul(189,841)]* why()*>'mul(758,690)what()<select()~>@>mul(728,932)how()?select()what()}mul(716,985){where()who()+who():mul(840,772)%how()>:;where()mul(139,830)$select()),mul(730,4)when(305,277);[$!,)mul(278,740)who(856,922)who()#<where()*>mul(212,541)((]mul(689,475)mul(814,611)'}&~{~~mul(716,817)who()mul(21,315))don't())(why()')$<mul(541,349)
$)mul(257,544)+where()how()-[how()^+ mul(986,808){[<why()%!;mul(940,137)who()-+(from()**^mul{>)who()how()?%why()}!<mul(908,379)select(811,438)mul(15,196)from(623,826)-from()+!mul(38,667){>{<{mul(41,189)-<how()*%when()}what(539,203)]mul(813,528)who())why()( ]how()why()how(){mul(299,367)]{[(@^mul(131,889)?:&who())when()'why()$&mul(728,552)^}when()@~mul(842,113)from()),?{!mul(811,809)*how(15,189)#>&+from(544,351)~&mul(516,38)]?;-@?don't()@}*mul(792,426when();#~ >%why()(/$mul(755,392)*(#]where()@select(),^select()mul(630]>*who(267,517)why()-;(mul(176,492)select()from()}~:who()mul(761,226)&,((mul(750,451)@/%select()from()mul(345,75)what()/who(); ~mul(431<)&mul(693,289)?~/mul(693,335)'mul(475,545){(*+~ mul(668,535)how()don't()?,<@mul(980,251)*why()$when()*-)mul(886,969):?/':]}-who()(mul(686,683)#}+($why()mul*^*$){&-(mul(94,775)- @when()?%]{when()mul(376,100)''/,&]^<mul(853,752)when()%who(),[^@where()!do()who()when()how()when(474,246)mul(318,180)do()%~(mul(216,96) ;}]why(907,964)$+when(680,212)?mul(442,979)why()what();##select()%mul(34,342)mul(641,907)@]who()@^:^mul(648,605)how()<}]when()!mul(567,219)?where()$what()~+from(),%how()mul(549,85)$-&(mul(94,269)~how(811,581)who(596,80)-how()~mul(510,591)mul(586,482)who()?#-<[[select()*}mul(249]{%<,where()*~^mul(628,294)]+what())why()mul(312,879&,?+don't()mul(100,514)when()select()mul(621,918)@select(813,295)/{^'%+mul(239,859) ']<*)mul(868,763)where()[/when()@)#{^mul(209,999)how()do()*#}},},&>mul(70/:from(184,559)>mul(679,138))<mul(454,112)[@)-?*where()mul(573,473)[(-/mul(867,232)~]/^/!'&where()mul(391,655)[%'mul(73,32)/{->)(~mul(929,872)'%#)mul(563,750)>(mul(324,725)what()why()[@$mul(186,770)?mul(719,251)[mul(270,934)+>when()'$when()mul(647,486)how()from(947,190),!(?mul(113,517) %[select()what()^)!mul(299,591)]:@' *where(145,530)/mulwhen()mul(811,260)mul(80,605) where(296,197))])>from()mul(324,361)select(){[/';/},mul(648,947&how(){who()/'-%*]mul(949,359){mul(288,162)&];&:^mul(188,899)select()where()]%mul(248,30)#[&+'why()'') don't()][}& mul(808,221)what()@>><;>*mul{;>what()what()+mul(646,752)select()<from()why(211,37)~~~:mul(196,842)}where(690,849)where()[$select(571,536)how()from()<mul(6,129)what()what()?]]how()mul(116,23)who(205,335)>)'where()!mul(748,585)>?<##mul(381,399)mul(597,746)) *mul(881,573)/:({why()'mul(527,57)@/what()?mul(395,551)%who()when()%'mul(713,766)[<mul(749,438)'(}^when();{mul(43,565)what()% #mul(653,209)what():!-mul(64,870)#from()select()from()mul(206,327)?(mul(678,256)^{mul(311,65)who()when()<(when()mul(552,622)*how()%?~;:;;)mul(767,192)--&$mul(512,806)['?')who()mul/({what()&/#'!mul(811,828)]select()~@!/(}$)mul(683,153)&}&~how()from()mul(815,380),?$*+mul(133,342)mul(867,908)!;&why()?(+!mul(915,100))when(895,91)&select()!({where(758,740)mul(759,261)-from()&])mul(365,436)from()&' &^mul(541,400)~from()-what()!mul(679,638)mul(107^#,%~#>[)*select()mul(313,218))when()when()mul(360,494<-select():::- [/mul(517,923)*from(),from()how()+]mul(870,559)}{*?do()>~mul(704,518)where()!)select()?from()where()&'do();mul(270,449)~[*mul(774,600)how():>why()[!when()mul(338,711){]mul(962,193)*where()#![-+mul(511,924):[who()why()}mul(252,534when())when()when()()'!why(230,750)-mul(543,358)~~ -mul(394,506){mul(176,192)who()from()%@mul(181,776)%[ don't()when()where(229,174)+}@who()where()]>mul(553,452)@{/mul(790,202)&&-]mul(783,999)'mul(123,410)<,#what()}how()when()from()$~mul(674,974)why()#>do()'[$]}when()mul(907,824)from()select(){what()mul(584,273)#<>>do()mul(767,778)how()how()from()[#<$from()how()>mul(133,565):mul(888,792)
who()where()don't()]mul(891,277)~mul(160,638)('don't()/@/%{mul(462,975)!^:+mul(317,407){who()/from()/mul(424,628) when()select()mul(415,352)!?[where(){?how()/mul(661^, -mul(141,973)(/where()!#who()(what()#$mul(916,889)when()$ )mul(945,846)why()+#where()@how()mul(147,694)%select()mul(414,149)< when(){)what()&[how()mul(903,731)~#mul(389,694)mul(72,447)mul(490,881)?++from()>+ ^(mul(703,722)mul(622,578)from() }@^)+mul(642,732)>from()where()@>${who()mul(526,211$why()[why()mul(349,908)who(635,389)from()what()*$*>@mul(180,150)//: ^mul(622,131);[-^~-mul(32,430)mul(306,173)~where()how() (mul(292,552)<mul(422,363)^<<!#when(304,583)who()mul(348,963)': #select(875,567)#>'where()!do() why()~] who()@^mul(20,119)?[$+/$^mul(242,536)who()'-&'from()mul(351,640){,]~mul(152,587)@select(140,751)<+mul(387,212)[where()%when())how()& >mul(916,539)~]?[when()>!when()??mul(322,151)!]!]~!;mul(27,537); ##;^}}mul(538,277)why()mul(205,526)mul(412,826)^@?where()'mul(957from(193,394)from(863,680)!@how()mul(771,563)( who()mul(377,655) ]select();who()mul(360,272)-select()$what(){mul(291,618)})from()^when(),how()where()don't()why()+&mul(462,803)^$,mul(788,584)@ %?:![:mul(439,528)mul(129,761)]!~mul(321,102)mul(41,728){&what()how()mul(93,933))[ where()^*@+mul(553,965select() '&{-mul(712,817)/<why()[:>/&mul(482,328)when()'mul(957,978)-}{[>{@what()who()mul(48,186)?]how()$what()&,)mul(33,872)#mul(125,207):;mul(143,386)how(),select()don't()}#when()%]&^@?^mul(107,59)&%?don't()mul(183,332):{}/[(#%-+mul(766,627)from()who() what()-+$^mul(41,791)who()] ;-#select()~mul(939,288)[:(</{$how()%select()mul(624,973) ]%mul(780,706)why(677,630);don't()+mul(3,844)$)$$where(),!why()[:mul(506,60)( <>@what()who()?mul(210,210)?select()why()select()where()-how()^mul(755,497)+?^(mul(860,478)^}+$from()(mul(565,649)}mul(184,450) ;/+%[why()mul(752,488)$how()mul(349,56)#'%,+mul(571,637)(mul(186,674)?how() </~@:%mul(295,276)'~where()-&%!mul(72,565);mul(140,645)%#-#*mul(258,568)!/select()why():&}from()from()don't()mul(458,777)#>,'^#!mul(577,819)mul(767,490)how()@when(359,565)mul(97,67)when()?where()>,'(-mul(267,998)%where()why()where():mul(593,317)<mul(514,327)how()~$[{mul(942,232)how()(who() 'from())mul(752,235)?/!'/*#mul(291,995){who()%!,%mul(873,542)%mul(543,144)from())'select()mul(317,658)+mul(819,545)<&what()who()$#who()how()$*mul(849,792)<;-mul(401,327)select()^}?mul(184,612))(where()what()[where()where()@}'mul(532,791)how()how()from()$*~:mul(963,569)when()%- :}why()^~$mul(520,245))^):{do()!mul(900,510)$ %who(615,822)mul(374,872)''/ mul(808,426)select()mul(268,752)&why(),</%!:!/don't()who(){when()*(where()mul(403,172)^mul(185,447)}mul(233,330)why()/&&%who()#/^mul(705,506)?%from();mul(494,15)['}]-}mul(45,474)who()@who()@why()don't()mul(174,355)?what(),@*$+#&mul(9,768);:^mul(381,691)when()&$/]?what(564,603)^how()mul(468,953)[@when()}mul(702,659) where()?where(){**mul(535,116)~where()$('}^~from()mul(926,18)&who()$when()where()>from(),mul(541,30)/why()${[from()who() mul(732,465)[<!{mul(794,385)mul(676,776)who()]/mul(45,904)<~+who()@-!)&where()mul(49,63))mul(710,576)+mul(279,872)&<{what()-how(),&how()~

147
2024/cpp/day-03/main.cpp Normal file
View file

@ -0,0 +1,147 @@
#include <iostream>
#include <vector>
using namespace std;
vector<string> readInput()
{
vector<string> lines;
string line;
while (getline(cin, line)) {
lines.push_back(line);
}
return lines;
}
bool isNumber(const string &potentialNumber)
{
for (const char c : potentialNumber) {
if (!isdigit(c)) {
return false;
}
}
return true;
}
string getNextValidInstruction(string &line, bool *doMultiplication = nullptr)
{
const bool considerConditionals = doMultiplication;
while (true) {
{
size_t mulPosition = line.find("mul(");
if (mulPosition == string::npos) {
return "";
}
if (considerConditionals) {
size_t doPosition = line.find("do()");
size_t dontPosition = line.find("don't()");
if ((doPosition < mulPosition) && (dontPosition < mulPosition)) {
*doMultiplication = doPosition > dontPosition;
} else {
if (doPosition < mulPosition) {
*doMultiplication = true;
} else if (dontPosition < mulPosition) {
*doMultiplication = false;
}
}
}
line.erase(0, mulPosition);
}
if (considerConditionals && !*doMultiplication) {
line.erase(0, 4);
continue;
}
size_t commaPosition = line.find(',');
if (commaPosition == string::npos) {
return "";
}
size_t closingBracketPosition = line.find(')');
if (closingBracketPosition == string::npos) {
return "";
}
int lengthOfNumber1 = commaPosition - 4;
int lengthOfNumber2 = closingBracketPosition - commaPosition - 1;
if ((lengthOfNumber1 < 1 || lengthOfNumber1 > 3)
|| (lengthOfNumber2 < 1 || lengthOfNumber2 > 3)) {
line.erase(0, 4);
continue;
}
if (!isNumber(line.substr(4, lengthOfNumber1))
|| !isNumber(line.substr(commaPosition + 1, lengthOfNumber2))) {
line.erase(0, 4);
continue;
}
string validInstruction = line.substr(0, closingBracketPosition + 1);
line.erase(0, closingBracketPosition + 1);
return validInstruction;
}
}
int getInstructionResult(const string &instruction)
{
size_t commaPosition = instruction.find(',');
int number1 = stoi(instruction.substr(4, commaPosition - 4));
int number2 = stoi(
instruction.substr(commaPosition + 1, instruction.length() - commaPosition - 1));
return number1 * number2;
}
int calculateSumIgnoringConditionals(vector<string> lines)
{
int result = 0;
for (string &line : lines) {
while (true) {
string instruction = getNextValidInstruction(line);
if (instruction.empty()) {
break;
}
result += getInstructionResult(instruction);
}
}
return result;
}
int calculateSumConsideringConditionals(vector<string> lines)
{
int result = 0;
bool doMultiplication = true;
for (string &line : lines) {
while (true) {
string instruction = getNextValidInstruction(line, &doMultiplication);
if (instruction.empty()) {
break;
}
result += getInstructionResult(instruction);
}
}
return result;
}
int main()
{
vector<string> lines = readInput();
// Part one
cout << "Sum of all the multiplications: " << calculateSumIgnoringConditionals(lines) << endl;
// Part two
cout << "Sum of all the multiplications (when taking the conditional statements into account): "
<< calculateSumConsideringConditionals(lines) << endl;
}

View file

@ -0,0 +1,7 @@
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp

140
2024/cpp/day-04/input Normal file
View file

@ -0,0 +1,140 @@
MASAMXSXSSXSASXSMMXSSMXSAMSAMXSXXAMSXSASXXMASAMXMSMMSSXSASMXXAXMAMXMAMXXMASXXSXMSSXAMMSMMMSSSMASAMXSAMAXMSMXMMMXMASAMXSXSSMMMSMSXXMAMMXAMAMX
SAMXSSMMMAAMAMAAXAASAMMXAXMMAMXSMAMMAAAXXMAMXMAXMAAMXMAMASXMASMMSMMSAMMSAMXMASAMAMSSXMAAAAXMASXMASXMAMMMMAMXSMSASAAMSAMAAAASASXMXXMAXMAXSAMX
MAMMXAXAMMMMAMSMMMXMAMSSSMSSMMAXXAMMMMMMMAXSSSSMSMSMSMSMAMAAXMAAMXASAXMSAMMSMMAMXXAMASXSMSMSMSMSAMASAMAAMASXAASAMXSXMASASMMMASAMMMSMSXXMAXXM
SSMMSSSSSMXSAMAMMXSSXMXAAMAAAMMMSMSAMAMAASXXMAAASXXASAAXMASMMXMMMMASMSMSAMAAMXSXMMASAMMMAXAMAMAMASASASMXSASMMMMXSMMMSXMAMMSMXMASAAAXXAAMAMSA
AMAMAAAAAXAMXXASAAXAXXMXMMSXMMAASASXXAMXXMMXMMMMMAMAMSMSXAAXSSSXMAXMXAXMXMSMSAXAAXMMXXMMAMAMAMSSMMMSAXAXMXMXMXMAMMMAMAMSMAMAXSAXMMXXMXMSAAAS
MSAMMSMMSMMMSMXMMASMXMAAXAXASMMXSASASMXSASXMMXSAMMMAXAMSMMSMMAAAXSASMXXMSXMAMASMMMAMSSSMSSXMXMAMXAAMXMMMSMMMSAMXXAMMSMAAMASMMMXSSSSXSAXSMSMM
XXASAMAAXMXASMMMXAAMXASMMASAMAXXMAMXMAAMAMSAMASASXMXSASXXAXAMMMMMXMMMSXMAAMXMAXAASAMMMAAAMAMSMSMXMXSXMAAAMAAMSXMXSMMAXSXSASXAXSAMAAAMMXXAMAM
SSXMASMMSSMASAMXXSXSXXXXSAMXSSMMMXSAMMMMMSXSAMXXMASASMMMMMXSMMAAXAXAAAASXMMXMMSSMSASMSMMMSAMMAMAXSAMXSMSSSMSSXXSAXAXMMAAMMXXSSMAMMMMMXMMASAM
MAMXAMXAXAMXSAMXMMAMMAMMSXXAAAMXAXMAXSXMMAMXMXMASXMASMMMSMAMASXMMASMMSMMAMXXMXAAMXAXAXSMXMASMAMAMMASAXXMXAMXAMAMAMXMSSMSXMSMXAMSMASXMAMMAMAM
MASMMSMMSMSXXAMXMMAMAAAAXXMASMMSSSSSMMAXSAMASAXMXAMMMAASAMXMAMAAXXAMXAXSXMXMXMSSMMMMMMMMASAMMAMSMSAMXSXMMSXMXMMMSMMSASXAAMAMSSMMSXXASAXXSSMM
XAMXXAAAMXMAMMMMXMSSSXSSSMMXMAAXAAAAAMAMSAMXXXSXMAXXMSMSMSSMAMMMMXAXSMMMXMAMSAMXAXXAXAASASAMSXSAAMXSMSAAAMAMXXSAAAXMASMSMSAMXXAMXSSMMSMSXAAX
MSMMSMSAMXMSAMXMXXAAAAXAMXAXSMMXMMMMMMMMSMSMMSMMAMASAMASMAASMMSXMSXMMMAMSMSMSASXMMSXSAXMXSAMAXSMSMAXASXMMSAMMMASMMMMMMMMAXMMXMXMAAMMAXMMMSMM
AAAXAMMASXAXAMMMMMMSMMMAMXMXSMSSMMXXAAXXMAAMXXAMAMAMAMAMMSMMXAMAMMASXMAMAAXASAMXMAMXMMXXASMMXXSAMMSMXMASASASXAMMSAXXMAAMMSSMXXMMMSXMAMXSAMXA
MMSMAMMAAMMMAMAAAAXAAXXAMMMAMXAAAMXSSMSSMSMSMSAMXMASAMMSAMAMMXXXSSMMASXXMMMMMXMAMAXASAMMXMMMXMMAMAMMMSMMASAMXSXAXMXMSMSSMAAXMMXSAMXMASAMASMS
XSMMXMSXMAASAMSSSSSSMMSXXAMAMMXSMMMAAXAMXXXAMSAMASXSASAMXMAMAXSMMAMSMMXASXSSMXSXMMMMSMMMSMMSAMSXMASAMASMAMXMAMMMXXMXAAXAMSSMAAAMXMASASASAMAM
MAMAMMMMXMXAMXAXMMXMAXMMSASMMSMAMXAXSMXSAMMMXXAMXMASXMXSASXMMMAASAMAAXSXMAXAMXSXASXAXXAAAAASAXMXSXXMXASMMSMMMMAXXSAMMXXAMMAMXSXMXSAMXSXMXSMS
SMMXSAAASMXAXMAXMXSMMXAAAMXMAMSAMXSXMAAMASAMSSMMAMAMASXMMMXAAXMXMMMMMMMMMSMAAAMSAAAAMMMSSMMSSMXAMMXSMXMXMAAMXSSSMMAXASXSMSAMXMASAMMSMMMSMMXS
AXXMMMSMXASXMXSMSASAASMMXSAMMMSMSAMXMXMMAMAXAAXSAMXSAMXSASMSMSXSMSMMSMMAAXMSMAMMSAMSSXAMXAXSMMMXXXAMAMMASMXMXAXXAXXMASAMXXXSASAMASAMAAAXAMAM
MMXAMXMMMXSASAASMASMMXAMAMASXASXMASXMAXMSXSMSSMMASAMASAMXSAAAMAMAAAXAAMMSMMASXXXMXXAAMMMMAMXAAMMSMAXXAMAMSMSMMMXMMSMMMXMXMSXMMASAMAXSMMSXMAX
XSMSAAXMAMMAMXSAMXMMSSMMASXMAXMAMXXASASXMAXAMXAMAMASAMXMAMXMAMSMSSSMSSMAXMSASMMXAXMASXAMSMSSSMSAMMSMXXMXSAMXAASXSAMAAAAMAMSAXSAMASMMXAMXMSSS
AXAXMMMMSMMAMMMMMXMAXAXSASMMAMSAMSSMMMSAMAMAMMSMMSAMXMMMMSAMXXXAAAAMAAMXMAMAXAMSMSAAXXXXAAAAXAMXSAMAMXXSAMMSSMMMMASXMSASAXMSMMMSAMXXSAMXMAAX
MMXMXMAAAAMXXAAXXMMSMXMMASASAXMASXAAAXMXMXSAMAAXAAMSAAXAAAXSSMMMMMMMSSMAMXMAMMASAAMXMAXSMMMSMXSXMMSAXSXAMXMAXAXXMXMXMXASXXSAMAAMASMMMAMAMMSM
MAASXSXSXXMMSSMSAXAXMAXXXSXMASMMMAMSMMXAXXXMSSXSXMASMXSMSXMMXAXASXSXMAXXSAMXSXAMMMSSMXMMSAMMMMAAXAMXMXMSXMMMSMMMSMSMXMXMAXXASXMMAMMMSASASMAM
MSMSAMMMMMAXAAMMMMMSSSSSMMAMXMASXAXAAMSMSXXXAMXAMXMXXAAAAMMXMXSAMXAMAXAMAAMAMMMMXAAAMXMASXSAAXSXMXMAMAMAXMAMSAMXAAAAXSAMXMMXMMAMXSAASXSMMMAM
MMXMXMAAAMMASMMSMSXAAAXMAXAMSAMXSMSMSMAMMMXMASMMMMAAMXSMMAAAAMMMMXMAMMAXSASASASAMMSSMMMASMSMSMXXAAMAMAMMMMAXXASMMSMSMSAXAAMMXMXMAAMMSMMMMSAX
MXMXMSSSXSXAAXXXAXMMSMSSSMAMSAMXAXXXXMXSAAXMXMMMASMXSAAAXSSSSSSMSAXAXSAMMASMSASXSXAAASMASAMAXAMXXMSSSSSXSXMSSSMAAMXMASXXMSMAAMMMXXMXXAAAASMS
MASAXXXXASMSMSMMSMXMAAXAASXMXMASMMSMMMXMASXMMXXSAXMAMXMMMXXAAAXASMMSXMASMAMMMAMAXMXSMMMXMAMSMSMMSAMAAAAAAASAXASMMMAXXMAXXAMXAMASXSMXSSMSMXAA
XAMMMMSMXMAXAMXAAMAXMXMSMMXXXXAXAASAAAAAMMMSASMMMXSASAMSMSMMMMMAMMAMASXMMSSXMAMAMSXMAMSASAMAAMAMMAMMMMMMMSMASMMXMSASXMMMSASXSSMSAASXXMMMMMSM
MSXSAAAXXMAMXXMXSSSSXSAMXSAMSMXSMMMSMSSSMMAMASMAXASMSAAXAXAAAXMAMMASXMAXAXMMSXSXAMASAMSAXMXMXMAXMAMXXSXSXAAAMXMAMMXSAAAAXAMXMAXMMMMXMASAAAMM
MMASMSMSXSASMAAXXAMAMMSMAMAXAAMXMAXAMXAMXMAMXMMXMMSXSMMMSMSSSXSASMXSASMMXSAASAMXXMAMAMMMMSASXXXSMSAMSAASMMMMSXMSMSSSMMMSSSMSSSMMAXAAAASXSMSM
XMAMXAAXXXAMMAMXMAMXMAAMSSSMMSASXMSAXSAMXSSSSMAMSASAXXXAMAXMAXSAXMASXAXAASMMSAMXSMASMMAAMSASAASAMAAMXMXMSXAAXXXAASASMSXXAAAXAXASASMMXXXMMASM
XMXMXMSMSMMMAMXASAMMMSSMMAMMAMMMAXSMMXAMXAXAAMAMSAMXMMMMSSMAXMMSMSMSSMXMMXMASAMAASAMASMSMMMMXXMASMXMMXSMMMMSSSMSSMAMXXMMXMMMMMXSAMXSMSSSMAMA
MXMMMXAAAAXSMMSASXSAMAXXMAMMAMAMMMSXXXASMSMSMMMXMSMAXAAXMXAXMMAXMAXMAMMSMMMASAMXMMSSMMXXAAXAMXSAMXSXMAXAAAXAAMAMXMXMMMXXAMXXXXAMXMXXAAAAMMMS
MXAAASMSMSMMAAMXMAMMSMMSMMSSSMMASXMAXSXMXXAXAASAMASXSXSSSSMSXMAXMXAXMMAAASMXSXSSMAXSXMASMMMAXMXMAXSAMSSMMSAMMMAMXAMAXAAXSSMSSSXMAXMMMMMMMAAX
SSSMXSAAAXMXMMAAMSMMAAMXSXAXAASAMAMSMMAMXMMMSMSASXSMMXAMXSXMAMASMSSSSSSSSMMXMMMAMSMMXMASAXSXXSAXMMSAMXAXAXMXAMMMXMAAMMSSXAAAAAMASAASMSXSXMSS
AXAXAMMMMMMXSMSXAAASMSXAXMMMSMMASXMMAMXSAMXAXXXAMMSAXSMSAXMAMMAMXAAAAMAMXAMXSASAMXSMAMASXMMSMSASMAXMMSXMMSXSMMSAMXAXMAXMXMMMSMAAXSXMASAAXSAM
MSAMXSASAAXMXAAMSSXMAMMMMSAMXAAXAMASAMASXSMMSSMAMAMSMAAMASMSSMXSMMMMMMSMXXMASASXMAMMAMAMAXAAXXMMMSSMXMASXAAXXAAAXXMSSMMSMSAMAXMAXMMMAMMMMMAS
XAAMXXASMXSMMMMMAXAMASXMASMMSSMMMMMMXMMSAMMMAMSMMAXASMXMSMAXAAXAXSAXMXXAMSMXSAMMMAMXAMXSMMXSSMMAXMAMSAMASMXMMMXMMXXAAAAAXXAMXSSMAMSMMSXXASAM
MMAMAMMMXMAXXMSMXSXMASAMASXMAAXMMASMMMXMXMAMAXAXMMSMMXAMXSMSAMXMXSASXAMXMAAMMMMASASXSSXAXAMAAMXAMMAMMASAMXMSASASXXMSSMMSMMAMXXMMSXMAXMASMASM
ASAMXSAAASMMSAAMXSXMMSAMAXAMSXMMSASASAAXAMXSMSXSXMAAMSAXAAXMAMAMAMMMMMMAXXMXAMXAMXSXMAXMXSAXMXMSSSSMXXMAMMXMASAXAXMAMXXXXSSSMAMSMASXMMMXXXXS
MSASASMSMMMAMSAMAMASAMXASMSMMAAAMXSXMASMSMAMXXAXMSSSMXMMSSMSASXMASXXMASMSSSMASMMSXSASXMSAMSMXSXAAAXSASMMMSASMMMMAMMASXMMAMAAMAMAMAMMAASXMMMS
XSAMAMXXMSMXMXXMASXMASXMMAAASXMMSMMMMMMAAMASAMMMMXMMMXMAMAASAXMSMSMMXMXAAAMSMXMAAAXAMAXMMMAXASMMMMMAMXAAMMAMMAAXAASXMMAAMMSMMMSMSSMSSMMAAAAM
XMXMAMXMASAMXXXMAXAMXSXMMSMMMMXXAMXAAAMXMASMXASAMAMMMAMXSMMMSMAMXMASAMMMMMMXSAAMMSMSMMMSASXMXMXAMXSAXSMMSMMMMSMSSXXMASMMXXAMXAAMAAAMAMSSMMSS
XMAMAMSMMMMAXXSMSSXMAMAXAAMXXASXSSSSMXMAMMMASMXASASASXSXXAXAMMXMAXSMXSASMXSAMXXXAMAAAXASASMMAMSMSMSXXAXAXAAMMAAAMAMSXMAXSMMMMSSXSMMMAAXMAXAA
XSSSXSAMMAXMMXMAXAXMASMMSMSXMASAMXAMASMXMAMAMMSAMASMSAMASMMMSMSSSSMXMXASAAMASMSSMMSMXMMSXMAMXMASAAXMXMXSSMMSSMMMSSMMMXMASASAMXXAASMSMMSSMMSS
AAAXMAMASXSXXMMAMXMMMMAXXASMAXMXMAXSXSASMMMSAMXXMXMASXMMAMXAAXMAMAMMMMMMMXSAMXMAAXXSAMMMASXMXSXSMSMAAMAXAMAAMAXMAXMAMMXASAMAMAMXMMMSAAAXXAMX
ASMXXXAAAMMXSASASXMXSSMMMXMASMSXMSAXAMAMMMAXMMMXMAMXMSXMMAMMMSMSMXMAMAMAMXSAMMSSMMXMXSASAMASAMXMAMMSSMASMMSSXSMMAXSXSAMXXASAMXSSMMAMMMXSMSSM
XMXSMMMMSAAASMMMSMAAMAXXMSSMMAXXAMMMSMMMSMMMSAMXSASAAMXSAMXSMSAXMSSSMXXMMASAMMAAMMSMAAMMXSAMMSAMAMMAXMASXAMMMMXXAAAAAXMSSMSASAXAAMSSMSXAXAAA
MMAMAAAAXMMXSAMXSAMMSSMMXAAAMSMMXSAAMAMAAAAAXAMXMAMMMMAXXMXAAMAMAAAAASASMXSSMMMSMAAMAMXXXMMSXXXXSMMAXMASMSSMAMASMMMMMMMXAASAMXSMMMMAAAMMMSSM
AMASMSMMSAMXSAMAMSXMAMASMSSMMMXMAXMASXMMSMMSSSMSSMMAXMAMAMAMXMSMMMXSASAXXMMMMSMXMMXSXXXSXMASMSMMXMMSMMXSAXAAMXAXXXAAAAXXMMMAMXMMXASMMMMSMXMX
SMAXAAAXSMMAMAMSSXSMASXMAXXXAXAMASMASXAAXMXMAAMAAASXMSSSMMASXSAMXMXXAMAMSMSAAAAASXMMXSMAXMAMMAMAXAAMASMMMMMSXMASMSSSSSMXAXMAXSAMSXSMMMXAAXSS
MMSMSMMAMMMSSSXMAMXSAMAMXMMSSXXSXMMMSXSMXXAMXMMMXMMAMXXAMSASXMAMXSAMXMAAMAAMSSSMXAAAAXAMMMMMMASMXMMSAMAAASXMMAXAAXMAMAMSXMXXXSAXAMXMAXSASAAA
XAAAXMASMXSAMXAXSMMXMSMMMSXAMSMSXMAMSXMSXMMSASMSSSSXMMSMMMASXMAMSMASMMASMXMMXAXASXMMSSSXSAAASASXASAMASXMSMMSMSSMMMMSMSMMASMMASXMXAAMMMAAMMXM
MXMMMXAMAXMASASMXASMXAAASAMXSAXXAXAXMXSASAXAMAAAAXAXAAAAXXAXXXAMXSAMXSSXMAXSMMMMMSAMAXMAXMMMAAMMXMAMXMMMMAAXAAAAMSAAXAAMAXAAMSAMXSSMSAMXMSMM
SSMSSMASMMSMMAXASMMASXSXSXAXMXSSXMSASMMASMSSSXMMMMXSMSSMSASAMXMSAMXSASXAMXMXAAXSAMXMMXMMMSMMMAMMXSMMSXMAXMSSMSSMMMSMSMSMMMMMXXAMAMMASAXXMXAA
AAAAXMXMXMAXMXMASXMXMXMAXMASMMXXXAMAASMAMXXAAMXAXSAMAAAMAMMASAMXASAMXSMMMMXSSMSMXSXAXXXSAAAAXSXMASAASAMMSMXAAAXAXXAMSAMASASXMSMMMSMAMXXMMSMM
SMMMSSXSASMSMAMXMAMAMXMXMMAAAAAMMSMMMXMASMMMMXMAMMAXAASXMXSAMASXMMXXXMAXAMXAAMXXAMMMMXAMMSMMMMAMASMMSMMMAMSMMMSXMMMSMASAMAAAAAXAAAMMSMAAAMAS
MAMXAASMMSAAXASXSMSASMMSAMSSSMMSAMASMMMXAAAAXSXMASAMXSXAXMMXSXMAMAAMMMSMMMSXMAMMXMASMXMXAMXAAMAMMSAMXAXMAMAXSAMAAAMSMAMXMXSMMMSMSSMXAAXMXSAM
MASMMMSXAMXMSMSMAXSAAAAASXAXAAAMMSMMASXXMSMSSXAMAMASXMMMMASAMASAMSMSXAAXMAXAXMXSSSXSAASMMSSXXAASXSMMMXMSXMXXMASMSMMXMAXAAMXAAXXXMAAMAXSAAMXS
SASASASMSMSMAASASMMAMMMMMMMXMMMSMAMMAMXMMAMXXMXMAXMMAMAXMAMASAMAXXASMSSSMMMMMAXMAMMXMXXAAXAAXSAMXSASMXMAMXMMSXMMAAXAXSSSSMMSMSSMMMXSAAAMMMAS
MXSAMASAAAASMSMAMMMAXXSAMASXAAAAXMSSMSSXSAMAXMSSMSSSSMSSMMMAMXSMMMAMAXXMMAASASASMSSMMXSMMMSMMMASAXSAAASMSAXXAAXSXSSMMMAMAXXAMAAAXAAMXMMXAXAS
SXMMMXMXMMMSXXMSMXXSSMMASAMMSMXSSXAAXAAXXMSMSMASAMXAXAMSXMASMMXAASAMMAMXMSXSAMAXAAAAMXAXAAXAXSAMAMXMSMMASASASXMMXMXMMMAMAMSAMSSMMMMSSXXSMSMS
MAAAXAMSSMMXAXAMMMAAAXSAMASMMSAAAMSSMMXMXXAAXMAMMMMSMSMSXXAXASMSMSXSAAXAMMMMMMMMMSSMMMMXMMMAMMXMMMAAXXMXMAMMXMMSAMAXAXXMSMXSMXAXSAXSMMAAAAAX
SSMMXXMAAAMMSMMMASXSAMXXSAMAAMMMMXXAXXASMSMSMMMSAXAXXAASXMMSMMAXXXAAMMSMSAMAMAXAAAMAMAXXSASMXSXSXMASMSXMMAMXXAAMASASXSAMXMXXXXMXMXMMASXMSMSM
AAASASMSSMMAAAXMXSAAAAXXMXSMMMSASMSSMSMSAXXMMMASMMSMSMSMMSAAXMSSMMMMXAAASMSASMMMMMXAASMXMXXSAMAMMMXMAXASMSSSSMMSXMXXXAAAXMASMSMMMMMSAMAXXAMX
SSMMASAMXMMSSSMSAMXMXSMMSMMMXXXASAAXAAAMMMMMXSASXXXXAMXAAMSMSMAMXASXSMMMMASMMXAMXSSSMXXAMAMMMMAMASAMXSXMAMAMXAAXXMMSSXMMXMASAAAAAXAMASXMMSMS
XAXMXMXMAXMMAXAMXSASMXMASAASXXMSMMMMSMMASMMMAMASASMSMSMMMMMXAMAMSXSXAXMAMXSASMSAAMAMXMASMASAASASASASASAMXMSMMMMXAXSAMMSXSAMXXXSMXMMSXMAMMXAA
SMMSSXSMSSMMMMXMXSASAXMASXMSAMXMAXXAXASAMAAMXSAMXXXAMXXMAASMXSAMSAXMMMXMSAMXMAAMMMAXXXMAMSSXMSASASAMASXMXAXMSSMSMXMASASXMXMASMMMXMMMMSAMSMXM
AAAXMMMAAAAAXAMMXMMMXMMAMMMMXMAXMMMSSMMSSSMMASAMMSSSMMAASMXMAXMSMSMAXAAMMXSAMXMXSMMMSSSSXXXMXSAMXMXMMMAMMMSMAMMAMMSAMMSAMXMASXSXMMAAMMSMXAMX
SMMSXAMAMMXMMMAMASAMMXMASASXMSMMMAAAXMAMMMMMMSAMAMAASMMMMAMXSSXMAMSXMSXSAMXMMMMXMASAMXAMMMAMASASXMASXAMXAAAMMMSASXMASXXAMXMASMMMSSMSMAXMASMA
AXXMASMSSSMSSSXXAMSSMASXSASMMASMSSSSMMMSXMAMXSMMMSMMAMMXMSAMXAAMSMSMMXAAAMAXXAMMXMMSSMMMXMAMAXSAMSMMAXXSMXMMAAMAAMSMMMSAMSMMSAXAAAMMMSMSXASX
XMSAMXSXAAAAXAAMSSMXMASAMAMAMASXAMMXAMAMASMSMMSMAAXXMMSMMXAXMMMMMXXAXMMASMXSSXSASXMXXXXAMSMMXMMMAAASXSMSMASMMXSSMAXAAAMXMSAASMMMSSMXAXAXXMAS
MXXMAMXMSMMMMMSMXAXAMXSMMASMMXSMMMSSMMAMMMMAAAXMSMXXXXAAXSXMAMSXMASXMASAAAXMAMXMAAMMMMMAXAXMMSSXMMXMAAAXMASAXMAMXSSMMMSAMMMMXAXMAMXMMMSMMMAS
AMASXSSMMXAMSMAMXMMMSMMXXAXAAXXAXAAAASMMSASXMMMXAASXSSSSMMMXXAMAMMMSAMMMSMXMASXMSSMAAASXSXXXAAXXMSXMSMMMMAXXMAMSSXXAAASAMSSMSSMMASAMAAXAXMAM
MSAMXXAAMXXMAMXSAMMAAAXMMSSMMXMSSMMSMMAXSAMXAASAMXMAAAAMAAMXSSSMMSASMXXMAASMMMAXMAMMSMSXSMSMMSSSMSAAAAAXMSSSSXMXMASMMXSSMAAAAMASASAXMMSAMMSM
MAMASAMXMASMMSASMSMMSSMAXAAAXMSAAAAXMXSMMAMXMASAXMMMMMMXSASAMMAMMMAMAMMSMAMXAXXMSAMXMASASAAAMMAAASMMMSSMMXAAMAMXSXSXXAXXMXXMSSMMAXXMSXMAMAAA
XXMAXMXAMMSAMMASAXXAMMMXMMXMAXMMSMMMSSMAXXXXSASXMXXAXXMMMAMAXSAMAMAMXXAAMXASXMXMMMMMMAMAMSMSSMSMMMXXAAAASMMMMAAMSASAASASMSMXAAMASMSXMAXAMSXS
MMMMSAMXSXSXMSSMASMXXASXSSSSXSAAMASASASXMMMMMXSASASMSSXSXSSXMMASMSMSMMSSSMXAMSASASAMMAMSMXMAMAMMXSXMMSSMMAAAMSXSMAMAMMAXAASMSMMAAAXASAMMMXAM
AMAXSAXXAXXAMXXMMMXXSAMXAAAAXSMXSAMMSAMXSAAAXASAMAMXXXAMAMAXMSAMXAAAAAAXXXXMASASASASXAMXSSMASMMSAMASAXXMAMSSXXSAMSMAMMMMSMMMXAMSSXMXMXMMAMXM
SMMMMMMMMXSXMAXAMXAMMSMMMMMMMMSAMXMXMMMAXSMSSMMXMXSSMMMMAMAXXAASMSSSSMXSXMXXMMAMASAMXXSAMXXAXXAMASAMMSMAMMMXASXXMASXMAAAXXMASAMMMMMAXAMSSSSS
AAMAAXXAXAXASMSSXMXXAAMAXXXXXMAXSAMMSXMAXAXMAMMXAXMASXASASXSASXMAXAAXMMSAMXMXMXMAMXMXXMASAMSSMMSXMAAXAAAMAMMXXSXXMMSSSSSSMMMMXMAAMSMMXXAAAAX
SASXSMSMSMSXSAAMAMAMSSXSSMSMMXMXXASASXXMAMXMAMXMMMSAMSXSASASMMMMXMAMXXAMAAASASMMMSSXMASMMAAAXXASXSSXSSSMSSSMSAMXXXSAMXAAMXAAXMSMXMAXAMMMMMMM
AMXAAAAAAAMAMMMXAMXXMAMMAAAAAAMXSAMAMMSSSSSSXMXAAMMAXMMMAMMSASXMXXAMXMSSMSMSASXMXAAXXAAMMMMMMMXSAAAMMAXXAAAAMASASXMMXAMXMSMMMXAMMSSSSMAXMAXM
SAMXMMMSMSMXMAXSAMSSMXMSASMXMASAAMMSMAAAMXMAMSSMXSSMXAAMASMSAMXMASMMXAMXXAXMMMASMSSSMMSSXMMXAXMMXMAMMAMMMSMSMAMASXAAAXXAMXXAXXXMMSXAXSMSXMSS
AXAMXSXMXAMXMAXXMMMAXXMXXMAXSASMSMAXMMMXMAAMAMAXXXAASMMSASXMMMMMMXAAASMMSMSSMSSMAAMXAAAMAMSSMSAASXXSMMSAAXAXMMMAMXMMSMASXAMSSMSSSSMSMMXMASAX
XSSXMASXSMSXMASXMASAMXMASMXMMAMXAMXSXMSASASXSSSMMMMMMAAMXSMSASMAMMMMXXAAXXAAMMAMMMMSMMMSAMAAMAMMSAXXAXAXXMAMXXMAXAMAAASAMXSAAMSXAMAASMXSXMAS
AAMAMXMMAAAXSASXSASAMASAXMAMMXMXMMASAMSAMAMAXAAAXAXXSAMXSMXSAXSAMAASMSMMSMSXMSSMMAMXXAMSXSMSMMSMXMMMMMMXMASMMMMXSASXSSXMAXXXMMMMSMSMXSAMMMMM
MSSSMMMSMMMMMMXAMXSASXMASMXXSASMXMXMXMMAMAMAMSXSASXXSAMXMXAMMMSMSMMMMAMXMMAMXMMASXSMSMMXASXXAXXASXMASAXXAMMXAAAAXXMAMMMXSSMMXSAAXMXAXMMMAAAA
MAAAXXAAAMXSAMSXSASMMASAMMMMMASAXSMSMSMSSXSXMMAAAXMXSAMAMMMXSAMAAXAASAMAAMMSAAMXMAAAXSAAXMASMMSSMASASMMAXXASXMSSSMMMMMSAMXASASMSSSMSAMXSSXSA
MMSMMMXXSMXSAMAAMASXMASAMXAAMXMXMMAAAAAXXXMAMMMMMMXAMASXSAMAMASMMSSXSAXSSMASXSMMMSMMMMXMMMMMAXSASXMMSAMASXMXAAMAXAAXAMMMSMSMXSAMAXAXMAXAMXMM
SMAXXMXSAMXSAMMMMAMAMXXMMSSXSXMAMMSMSMSMAXSSMSXAAXMXSAXASASMSAMAAAXMMMMMAMXSAXMAAAAMXMASXXASMMSAMMSAMAMAXAMXMXMASMMMSXMAXXAMXMAMXMMMXSMMMAAA
XAMASAMAAMASMMMAMXSXMMMXMAMSSXMAXXXXXMMMSMAMASMMXAAMMMSMSAMAMXSMMMSMAXXSAMAMMMSMSMMSAXAXMAMXSAMXMAMMSSMMSAMXXXMASAMSMXMAMXSMSMSMSAXAXXAASXSS
XSMAAXAMXMAXAASXSASAAXMAMMSAMASXXXXASXAAAMMMAMAXMXSAXXMXMAMMMAXXXAMMSSMSAMAMAAMXXAAXXXSMMMXMMSSXMAXXAMAASMXMXXMASASAMXMASAAMSAAAASMSASXMSAMX
MXMXSXSASMAMSXSAMASMMASXMXMASXMMSSMAMSMSSSSMSMXMMAAXMAMASAMXMMSSMASAAMASMSAXMXSAMMMMSMMASAAMSASASXXMASMXSAAMSMMMSXMASMXMAMXAMSMMMMXMXAAMXMSA
AAMAXAMAMXXMXAMXMXMASAMAXSMMMAAAAXMAMMMMAAAAAMXSMASASASASASXXMAXSMMMMMMMAXAMAAMAMMSASASAMSSMMASXMSMXXMMXMMXXAAAAMAMXXXAXXMMSAMXXXXASMSMMAMXA
XAXXMAMMMMXSXMSXSMXAMAMXAXAAMMMMXMMAXAAMMSMMMSAAXMMASASMXMMXAMXXMXMXXXMMSMXAMSMSMXMASXMAXAMAMXMASAMSAMXSXAMSSSMXSAMSXSXMAXSMXSASMMMSAAXSASAM
SXMSMSMXAXMAMXMAMXAMSXMXMSSMSSSSMSXSMSXSAXXMAMXSMXMXMAMAMSSSSMMSMSMSMAAAXAASMXAMXMMAMAXSMMSMASXXMASAAMAMAAMAAXAAMXMXAMASXXMXXMAAXMXMXMXSAXAS
AMAAAAMMXMMSASMSMSMAAXSXAMXAXAAAAMAXXAASMMSMASAMMXMXSAMXMAAMXAMXAAAAXXMAMSMXAMAMMSMAMXMXAMXAAMMMAXSMSMASASMSXMMXSXMSAMMMMASXXMSMSAXMMXMMXXAM
SASMSMSSSMAMMSAAXAAXMAMMXMMMMMSMMMAMMMMMAAXXSMMMAMSASAMXMMSMSXMMSMSMSXMXMXMMMMAMASXSSMASXMMMMSAAXXXAXMXMXMAXXXXAXAAMXMXASAMXAXMAXAMMASXXSAMX
XAXXMASAXMAMXMXMSSSMXSMSXSAAXMAXAMASMMSSMMSMMASAMXMAXAMSXMAMMMMMMMXXMXMASASMSXXMASMXAMMMSMAAAXAMMAMMMASXMMAMAMSXXMMSSSSXMXSXSMMSXMASASMAMAXS
MXMMSSMMMMAXAMXXMAAXXXMAASMMSMSSMSASAAAAAMXMSAMMXMXSMMMMASAXAAAASXMSMASXSASAMXXMMSMSMMXAAXMMXSMSAMAXAXSAMMAMAAMAXSMXMAMMSMSAAXAXAMMMAMXAXAXX
MXMASAMXASMSSSXSASMMMSMMXMXSAMAAMMMSMMMSSMAMMAMXXAAAXMASAMXMXSSMSAAXSAMAMAMXMMXMMSASAMMSSSSSMAAAXXMSMMMAMSSSXSMMMMAAMAMAAAMSMMXSAXMMSSSSSMSX
XAMXSMMMMSAAAAAAAMXSAAXSMSMSSSSSMMASXAXXXMAXXMMMMMXSXSAMXMSSMAMMSMMMMMMXMSMXAXSAAMMSAMAMMAAMMMMMXMMAAAMMMAAXMMAMSSSSSMSSMSMMMAASXMASAAXAAXSX
SSSMSXSAXMMMMMMMMMXMSSSMASASAMXMAMASXMXSMXSXXXXXMMAMXMMXXAAXMAMMXMAXMAXAMXASASMMXSASXMASMMMMXXAXASMSSMSMMSSMASAMMAAXXMAMAAAAMMMSAAMMMMMMMMSA
AAAAXAXXSMXASASAXXAXXMAMAMMMXMASMMMSASAMAAMAMSMAMMAXMSMSMMASMAMMASXSSSSMSXMMMMASAMXMASASAAMAXSXSMSAMAMXMAMAAASASMMMMMMAMMSSMXSXMAXAAAXXXMAXM
MSMMMSMMMMMASAMXXXXSASMMSSXXSMXXSAXMAMMSSSMAMAAASMMSAAAXMMMAMMMSASXXAAMASMXAASXMXMASXMMMXMSMASXMMSMSAMAMXXAMXMAXXXAAMSMSMAXXAXMASMSMSXMAMMSS
MAMXAMAAAAMMMAMXSMASAMXMXMMMAMSXSMSMAMXAAMAASXSMSXAAMMSMXASAMSAMAXMMMMMASAXMMSAMASMSAASXMMAMMMXSAMXSAMMXSAMXASXMSASMXAAAMXMMMXSAMXMXAASXMMAA
MXXMAXSMSMSSSMSAAMMMMMMMAMAXMASAXAAXMMMMSMXMSXXAXMMMSXMMSXSAXMXMASXAAXMASMSSXSASXSMMMXMAXSXAAXAMASASXMXAMXXMXSAAXXMXSMSMSMMSAMXAMAMXSAMASMAS
SAMXSXMAXASAMAMMXAMXAAASASAMXMMMMSMSXSMMAXAMXMMXMXAXXAMMSMMMMMMXMAXSSSMXSAXMASAMXXMXMXSMMMXSMMMSAMASMSMASXMMASMMMSMMXAXXSAAAXSSXMAMAMAMAXMAM
XXSAMAMAMXMMMAMAMSXSXSXSXSASAXAAMAAAXAMMAMSMSAAMMSMSSXMASXMAXAASXMAXAXXAMAMMAMAMXMSASXASAMXXSSXMXMXMASAMMMSAAMAAAAASMSMAMMSMSMXMSSSXSMMSSMXS
XMMXXAMSMSSXSASAMXASAMAMXMASAMSMSXXSAMXMSMXAMXSAAAXMASMASMSXSSMSAMXMMMMXSSXMXMSAMXSASXSAMXSMAMAXASMMMMSXMAXMSMMMSSMMAXMXMXMMMXAXAAMASMAXMXMA
SAXASXSMXAAXMASAMMAMXMAMAXMXMMMAXAMAMXAMXAMAMSMMSSXXMAXAMXSAAAAXAMSMXXAMMAMMSMXAXMMMMMMXMMAMXMSMMSAAMAMMMXSAMXMXAMXMAMMSMXAAMSSMMSMAMMSMMSAM
XMXMAMAXMMXSAASMMSMSASMSSSMAMXMXMMMAASMSMMMXSAMXMMXAMXSSMASMXMMMAMAMSMSMSAAAAASXMASAXAXASXSXSMXAXSXMMAMMAMXMSXMAASMMXSXMASXMXAASAMMXSXXAAXMX
SSSXSMAMXAAXMXSXXXASXSAAAAMXMAMASMMMMMXAAAAMAMXMXAAMMAAMMAMXSSXMASMSAMMASXSSMMMXMSMAMXSAMMMAAMSAMXAXSAXMASXXSAMAMXAXAMAMASMMMSSMMSMMMASMMMSX
AAAAXMXSMMXSMAXMMMXMAMMMSMMSMASAXMASASMSSMSSMAAMMMSXSMSMMSSMMAASXSXSASMAMXMAMSAMXAXAAXMASAMSMMSSMSMMMASXXMXAXXMASMMMMXMMAMAAAXAXAAMAMMMXMSAM
MAMMMSMMMMMAMASAASAMXMAXAXXAMAXMMSASAMXAAAXMXSAMAAMASXAXAMXAMSMMASMSAMMAMXXAMXXSSSXSSXAAMAXXAAMAMXXMASAMMMMSMXSMXASAMASMSSSMSSSMSMSAMXXXMAMA
AAXAXAAXAASAMMAMSSMSAMXSMMSMXMSMAMXMXMMXMMSSMMASMSMAMMSMMSSMMXAMXMAMXMXXMAXSMSMMAMAXXMASXXMSMMSMSAMXXMMMAXAXAASMXMAMSMSAAMXAAAAAXASXSXMAMMXS
MXSMSSSMSXSAAXAXMXMXXXAMXAAMAXAMSSSMMSMMXMAMAMXAMXMXMAXAXMAAAXAMSMSMSSMASMXXAMXMAMXXMMAAMMMAAMAAAMXSXSXSSMMXSSMAASXMXAMMMXSMSSSMMMMXAXSAMAAM
XAXMAAXXXASXMMMSXASMMMMSMSSSMMASAAASAAXXAMMSXMXSAAAAMXSSMSSMMSAMXAAAAMXAMAAMAMXMXSAMMMSSMAXMSMMMMXAMXMAXAASMMMMXMMAMMMXAXXSAMAAASXSMSASASMSS
MXSMXXMXSMXSXAXMMMSAAMXSAAMAMSMMMSMMSSMMXSXXAMXMMMSXSAAAAAAXMAMXMSMMMAMSSMSSMMXMAXAMAAXAXSSXXMSMSMXXAMMMSMMAAMAASMSMAMSXSMMAMMMMAXXAMASAMAAA
SMMMAXSXMMAMMMAAAXSMMMAXMSMAMMAMXMXMAMAMSMMSMMSSXMMAMMSMMMSMMAXXXAXMMXXXAMXAAAMMSSMMMMSAMXXXMAAAAMSSSSXAMAMSXMMMSAMSSXMAAASXMASXMSMMMAMXMMMS
AXAAXMMAAMASAMXXSMSXSMMXXMMAXSAMASMMAMAMMAAAAAAXAAMAMXXXAXXMMMSMMMMSMSSSMMSMMMXXMAXXXAMXMASXMSMSMMAAXSMXSXMMSMXAMAMAXAMXSAMXSAMAXMAAMXSASXAX
SMMMSASMMSASMXSAXAMASXSXASXAMSAMASASXSSSSMMSMMSSSMSMSMXSSSMAAAXAAAXAAAXAAAMAAMXMSMMMAMSSMXASAMXAAMMXMXMAMAAAAXMXMMMXXXMMXAAAMASXMMSMSASASMMS
XAAAMMMXAMXSAAMMMAMSMAXMMMMXMSMMXSMMAMXAASAAXSAMXXAAAAXXMAXMMXSSSXSMMMXSMMSSMSAAAMMMSMAAXXMSMXMSMMXSAMXSSSMSSSMSMMXSXAXAMXMMMAMAAXAAXMMXSAAX
MXMMSXXMXMXMMXSXSAMXMSMSAAMAAMASAMAMSMMSMMSASMMSMSMSMMMASMMMSMMAXAXMASMAXXXXMSXSMSAAAMSSMSXSMAMXSAMASXAMMXAAMMAMXSAMSSMMXASAMASXMSXSSXSAMMMS
AAMXMXMXAAXMMMXASXSAAAAMSAXXMSAMMSAMAXMXAAMXSAASAAMAXXAXMXAAMAMAMSMSASASMSXAXSXMASMSMMAAXXAXXMXAMXSAMMMSAMMSXMAMMMAXAMAMSASXSASMAMXMMAMASMXX
MMSAMMASMSMSSMMMMMMMMMXMMMSSMMMXMXXSXMXMMMSSXMMSXXMASXSMMSMMXMMSSMAMMMXAASXMMSAMMMXXMMXXMMSMASMMMAMAMMAMAXAMASXSASXMASXMAXXXMASMAMSMMAMXXXAS
SMSASAMMMAAAMSASASXSSSSMSAMXAAAMSAMMXSAAXASMMSXMMSMAMXAAXXASXSAMAMMMASMMMMAMAMAMMMASMSSMMAXMAMAXSXSMSMMMSMXSAMASASASAMAAMSXMSAXXAMSXSXSMXMMM
AMMAMXXXXMMMSSMMASMMMAAAMXMXMMXSMASAAMXSMMSAAMAAAMMSMSXMXMASAMXSAMAAMAXAASAMXSMMXMASXAAMMASMAXXMMASAAAAAXXMMAMXMAMMMASAMXMAMSASMSSMAMAAAXMAS
MSXSAMMSASXXXMAMSMXAMSMMMAMSMSXAXSMMSSMXASMMMSMMMSAXXSASMSAMXMMXAMAMXMMSXSMSMAASMMASMSMMMMMXAMAXMAMXMSMASASMSMSMSMMMAMAXMSAMSAMMXAMAMSMMXSAX
XAMMAAAMAMMMMMAMAAMMXAXXSXMAAXMXMMAMAAXSSMXMMAAMXMASAXAMMAMMMSSSSXSAAXAXAMAAMSMMAMASMXASAXMAXASAMMSAXAMXSXMAXSXMASXMASXMASMMMAMXSMMXXAAMXMMS
AMAMSMSMAMXAASMSMSMSAMXXMAMMSMSSSMAMSSMMXMASMXSMXMXMAMSMMASAAMAAAAMSXSAMAMSMXXXSSMMSASAXMSMASXMASAAXMMSMSAMXMMMSAMXSMXAAMMXAXAMXSAAMSMSMAAAA
SXSMXAXMAMMMMSAMAAAXXSXMMMAXAMAXAXXXXAASMMMAAXMMMSAMXMXASASMXSMMMMMAMMASXMXSAMXMAAXSXMAMSAMAAASXMXSMSXAAMSAMXXAMASXMSSXSASXXMAMXXMAMSAMMSMMX
AAAXMXMSMMMSMMAMSMSMMMXSAAXSSSMSSMSASXMMAMSMSMSAAXXXSASMMMSMXSAMAXMAXSAMAAMSXMASMSMSAMMMSASMMXMMMSAAXSMSMAMASMSSMMAAAXXMAMAAMSSMMXSXSASAXMAM
MXMXSAMMAAAAXSSMMAAAAXAMMXMAMXXXMAXASXMXAMAAAAXMMSSMSXSAAAMMAMASMMSAXMSSMMMMASXXAAASXMAAXXMXMMMSXSMSMXMMMXMAMSXAXSXMMSMMAMXMMAAAAXMAMAMXMMSA
XAMAXASMMMSXMAAAXSSSSSXMASMSMMSMMSMASASXXSMXMMMMXXXASMSXMSSMASAMAAMAMMAMAMXSAMXMSMMMSSMSSXMASAAAASXXXAAAXAMXMXXAMXMXXXXMASAAMXSMMSMAMAMMXAAA
SASASXMXAXXMMSSMMAAAAXMASXXMAMMAAXMXMAMAMXMASMMMSAMXMASMMXAXXSASMMSSMSASAMAMAMXAXAMXMMXXAASASMSMMMMXMSSXSSXMASXMXAMSSMMSAXMXSAMAXXMAMAMAMMSM
SXMXSAAMMMSXMAMXMMMMMMMMMXASMMMMMMSXMAMAMASASAAAMAMMMMMAMSMMMMMMMMAAASASMMMSMSMSSMXMASMMSMMAXAXXSASAAMAMAAAMASAMSASAAXMASMXXMASXMSSMSSSXMMAM
MXSASMMMXAASMMSXSAMXXASAMXXXXSXASXXASXSASXMASMMMSAMAAASAMXXAAMAAXMSSMMAMMAAAAAMAAXASAAAAMAMSMSMMSASMSMAXSSXMASAMSSMXSXMAMMXMSXMAAMMMAXXMASAS
MSMMSAMAMMSSMXMXSXXMASMMSAMXAMSAMXSXMASXSAMXMMAMXXSSSMSASXSSSSMSSXMAXMXMSXSMSMMSSMMMSSMMSSMAXXMAMXXMAXXMMMMMASAMXMMMMXMASAMXMASXSSSMMSMMMMMS

97
2024/cpp/day-04/main.cpp Normal file
View file

@ -0,0 +1,97 @@
#include <iostream>
#include <vector>
using namespace std;
vector<string> readInput()
{
vector<string> lines;
string line;
while (getline(cin, line)) {
lines.push_back(line);
}
return lines;
}
bool wordIsXmas(const string &word)
{
return word == "XMAS" || word == "SAMX";
}
bool wordIsMas(const string &word)
{
return word == "MAS" || word == "SAM";
}
int xmasCountAt(const vector<string> &matrix, const size_t rowIndex, const size_t colIndex)
{
const size_t numberOfRows = matrix.size();
const size_t numberOfCols = matrix[0].size();
int xmasCount = 0;
if (colIndex + 3 < numberOfCols) {
string horizontalWord = matrix[rowIndex].substr(colIndex, 4);
xmasCount += wordIsXmas(horizontalWord);
}
if (rowIndex + 3 < numberOfRows) {
string verticalWord;
for (size_t i = 0; i <= 3; i++) {
verticalWord += matrix[rowIndex + i][colIndex];
}
xmasCount += wordIsXmas(verticalWord);
}
if (rowIndex + 3 < numberOfRows && colIndex + 3 < numberOfCols) {
string downDiagonalWord, upDiagonalWord;
for (size_t i = 0; i <= 3; i++) {
downDiagonalWord += matrix[rowIndex + i][colIndex + i];
upDiagonalWord += matrix[rowIndex + (3 - i)][colIndex + i];
}
xmasCount += wordIsXmas(downDiagonalWord) + wordIsXmas(upDiagonalWord);
}
return xmasCount;
}
bool crossMasExistsAt(const vector<string> &matrix, const size_t rowIndex, const size_t colIndex)
{
const size_t numberOfRows = matrix.size();
const size_t numberOfCols = matrix[0].size();
if (rowIndex + 2 >= numberOfRows || colIndex + 2 >= numberOfCols) {
return false;
}
string downDiagonalWord, upDiagonalWord;
for (size_t i = 0; i <= 2; i++) {
downDiagonalWord += matrix[rowIndex + i][colIndex + i];
upDiagonalWord += matrix[rowIndex + (2 - i)][colIndex + i];
}
return wordIsMas(downDiagonalWord) && wordIsMas(upDiagonalWord);
}
int main()
{
const vector<string> matrix = readInput();
const size_t numberOfRows = matrix.size();
const size_t numberOfCols = matrix[0].size();
int numberOfXmasOccurrences = 0;
int numberOfCrossMasOccurrences = 0;
for (size_t rowIndex = 0; rowIndex < numberOfRows; rowIndex++) {
for (size_t colIndex = 0; colIndex < numberOfCols; colIndex++) {
numberOfXmasOccurrences += xmasCountAt(matrix, rowIndex, colIndex);
numberOfCrossMasOccurrences += crossMasExistsAt(matrix, rowIndex, colIndex);
}
}
// Part one
cout << "Number of XMAS occurrences: " << numberOfXmasOccurrences << endl;
// Part two
cout << "Number of X-MAS occurrences: " << numberOfCrossMasOccurrences << endl;
}

View file

@ -0,0 +1,7 @@
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp

1353
2024/cpp/day-05/input Normal file

File diff suppressed because it is too large Load diff

97
2024/cpp/day-05/main.cpp Normal file
View file

@ -0,0 +1,97 @@
#include <algorithm>
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
vector<pair<int, int>> readRules()
{
vector<pair<int, int>> rules;
string line;
while (getline(cin, line)) {
if (line == "") {
break;
}
int number1 = stoi(line.substr(0, 2));
int number2 = stoi(line.substr(3, 2));
rules.push_back({number1, number2});
}
return rules;
}
vector<vector<int>> readManuals()
{
vector<vector<int>> manuals;
string line;
while (getline(cin, line)) {
stringstream inStream(line);
vector<int> pages;
string page;
while (getline(inStream, page, ',')) {
pages.push_back(stoi(page));
}
manuals.push_back(pages);
}
return manuals;
}
bool isCorrectPageOrdering(const int firstPage,
const int secondPage,
const vector<pair<int, int>> &rules)
{
auto it = lower_bound(rules.begin(),
rules.end(),
secondPage,
[](const pair<int, int> &a, int b) { return a.first < b; });
for (; it != rules.end() && it->first == secondPage; ++it) {
if (it->second == firstPage) {
return false;
}
}
return true;
}
vector<int> getProperlyOrderedPages(vector<int> pages, const vector<pair<int, int>> &rules)
{
sort(pages.begin(), pages.end(), [&rules](int a, int b) {
return isCorrectPageOrdering(a, b, rules);
});
return pages;
}
int getMiddlePageNumber(const vector<int> &pages)
{
size_t middleIndex = pages.size() / 2;
return pages[middleIndex];
}
int main()
{
vector<pair<int, int>> rules = readRules();
vector<vector<int>> manuals = readManuals();
sort(rules.begin(), rules.end());
int sumOfCorrectMiddlePages = 0;
int sumOfCorrectedMiddlePages = 0;
for (const vector<int> &pages : manuals) {
const vector<int> properlyOrderedPages = getProperlyOrderedPages(pages, rules);
if (pages == properlyOrderedPages) {
sumOfCorrectMiddlePages += getMiddlePageNumber(pages);
} else {
sumOfCorrectedMiddlePages += getMiddlePageNumber(properlyOrderedPages);
}
}
// Part one
cout << "Sum of the middle page numbers of all correctly ordered manuals: "
<< sumOfCorrectMiddlePages << endl;
// Part two
cout
<< "Sum of the middle page numbers of all incorrectly ordered manuals after ordering them: "
<< sumOfCorrectedMiddlePages << endl;
}

View file

@ -0,0 +1,7 @@
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp

130
2024/cpp/day-06/input Normal file
View file

@ -0,0 +1,130 @@
............#...........................................#.......#.............#...........#.......................................
..........#....................#.........................................#............#............#.....##...................#...
.#.........#..........#.....#......##...............................................................#..................#..........
...........#.#...................#..................#.......................#........#............#...............................
...#..........................#............................#..................#..................#..........##..................#.
..............................................................................#...................................#..........#.#..
.#......##........#.........#...........#...............................#...................#........#..#............#.........##.
.....................................#...................................................................#........................
......................#......................#.............................................#......................................
....................................................#...........#........................#...................#......#.#.........##
..................#..#..........#...........................#.#..........#.......##....................#.#....#..#................
............#...#..........................#.............................................................................#........
...............................#.............#.........#..........................................................................
.....#......#........#.#...............#.........................#.......#.......#.........................#......................
...#....#........................##.................#..#...............................#..........#...............................
..........#......#..............................................................#...................#..........#.........#.#......
#.............#.........#.................................#....................#....................#......................#......
....#.............................................#..................#.........#...#................#........#....#..........#....
.......#......................................#.......#..........................................................#................
...#..#..............#.........#......#...........................................#..............................###.....#........
......................................................#........#..............................#..................#................
.......................................#.....#.........................................................................#..........
...........................#...........#....................................#.........#...........................................
....#........#...................................................................#...................................#............
....#..#.................................................#........................#...............................................
............................................................##..#......................#.......#...........#..#........#..........
........#.........................................................................................................................
............#......#.........#...............##...............................#......#......................#......#..............
.#......#...............................................#.#........................#....#.....#..#................##..............
.........#.....#.............#.........#.............................#.................#.........##.......#.......................
...#..............................................................................#....................#..........................
.#...#.....#..............#.................................................#..............................................#......
....................................................#...#..................................................................#......
..............#................#.......................................................................#.........#................
...........#..............................#.....#.........#..#............................#.......................................
.........................#............#..................................#...#.....#......#.......................................
..........#......................#...#....#......#.....................#..................................#.....#........#........
.............#...#........#.........................................#..#........................................................#.
.....#...............#......#.........##.....#.......................#..............#....................................#...#....
.....................#..........................................................................................#.............#...
.................#.............#..............##...................................................#..............................
..................................#.......#.......................................#...........#...................................
...#..............#............................#.#................................................................................
..........#.......#...........................#...........................#..............................#....................#...
.....#...#...#.................#..........................................................#............#.....................#.#..
...#...#......#.............#...............................................................................#...##................
..........#.....#.......#............#........................#..........................................#.............#..........
..................................................#.................#.........................#.#.......#.........................
.............................#...............................#.#............#................#...................#...............#
..#...........#........................#............................................#...........#............#....................
.......................#...#...........................#............#..#..#............#..#..............................#........
.......#...........#...............#.............................................................................#................
...........................#................................#....#....#...#..................#...................#.#..........##..
...#.#.......................................................................................#.....#..........#..........#........
....#......#.......................................................#.......#.#............................#.......................
.#.................#...#........#...#...........................#...#.................^......#............#.......................
...........#................##..........................................................................#.........................
...........................................................#....#............................#........#...........................
.#......#....#..#.......#....................#...............................................#........#...........................
......................##..............##.......................#...#...............#........................#................#....
#..................................................................................................#..........#...................
.....................#...................................................................................#............#.....#.....
..........................##.#............................................#........#.#.......#.#....#...#.........................
....#...............#.................................................................................#..#...........##...........
.................................................................#.#.....#.........#...............#..............................
.......................................................#.......#.........#............#....#..........#.....................#.....
#..............................................#..#..................#....................#.......................#....#....#.....
................#...............#..............................................................#....#...........................#.
.#...............#..#....................#...........................................#............................................
................................#...........................................#.........................#..#........................
.......#......#........................................#....................................................#.....................
.#......................#........................#...............#......................#...........#.............................
........#.......#..................#.......................#.........#.....................................................#.....#
..................#.....................#...#..........................................................#.............#............
....#........................#......#...#.....................#....##.........#...................................................
......................#....................#....................................................#..........#..................#...
.......#..........#.....................#.................................................#.......................................
....................#.......................................................#....##...................................#...........
................................#.............................................#.....#..............#..............................
..#.....#.......#..................................#........................#.....................................................
...##........#.#........#.........................................#..............#......................................#.........
........................................................................................#.........................................
.......................#......#...........................................................................#.......................
.........#...................#.............................................................#.........#............................
..........................#.................................................#................#...................................#
...............................#......................................#.........................#....#......#................#....
..........#.......................................................................................................................
....#......#.#.................#.#.......#.........#...#................#...............#..............#.....................#....
....#.........#....#................#..........#........#...................#.............#...............#..........#...#........
................#...............#.....#.....#...........#....#....................#.....#...................#.....................
.......................#.......................#...........................................................#.....................#
#.................................................................................................#...............................
.........................................##..#........#............................#............#........................#........
....................#...............#............#................................................................................
...#................#............#..............................................................#.#.................###...........
......#...........................#.......#....#...............#....................................................#.....#.......
..#.......##.....................#................#.....................................................#.#......................#
.................................................................#.................................##.............................
....#..............................................#................................................................#....#........
................#................................................#..............................................#...#...........#.
...................................##...............................................................................#.............
............#.................#..#.........................#..........................#.......#...................................
.......##........#.#...#......................................#..............#...............................#.............#......
............#.............................................##..............................#............................#..........
.................................................#..........................#.........#...#...............................#.......
..#............#......................#.....................................#.....##.........................#....................
...........#......#............#...................#.......................#..##........................................#.........
.................................##......#.........#.......#..................##...............#..................................
........#.........#...##.........#.#......#.........#.......#.....#.......................#.......................................
..................................#..............#................#.....#..............##...............#.........................
................#..........................................#..#.......#....................................#......................
..................................................#...........#..........................#.................#......................
.........#....................................................#..........#........................................#...............
..........................#..............................................#.................................................#......
...#....................................#.......................#.#.......#............##........#........................#.......
...#..................................#.....#...........................................................#...#........#............
................#...........#.........................................................#...............#....................#....#.
.................#...........#..............................#..........#........#............................#..........#.........
.........#.............................................#..........#....#.................#...................#...#................
......#....................#.................#.......#..............#............................#..#.......................#...#.
#.....#..........................#.....#...................................#...##.....#.....#...........#................#......#.
.##................#.........#.........#...#.#....................................................................................
.............................................................#..#...............#..#...............#.....#....#.............#..#..
.............#.........#.......#....#.........#...#......#........#.............................#.................................
#.....................................#.......#..................#..................#............#...#......#.........#...........
.......##............#.............#..............#.....#........#.................#..#..........#......................#..#......
......#......#.............#....#...............#.......#....................##.................................................##
...............#........#........#........................#.#........#.............#...................................#...##.....
................#........................#.......#......#..........................#................#............#...#....#.......
#.................#.....................#..........#.....................#...................##..........................#........

120
2024/cpp/day-06/main.cpp Normal file
View file

@ -0,0 +1,120 @@
#include <iostream>
#include <set>
#include <vector>
using namespace std;
void readInput(vector<string> &mappedArea, pair<int, int> &startingPosition)
{
string line;
for (size_t rowIndex = 0; getline(cin, line); rowIndex++) {
for (size_t colIndex = 0; colIndex < line.size(); colIndex++) {
if (line[colIndex] == '^') {
startingPosition = {rowIndex, colIndex};
}
}
mappedArea.push_back(line);
}
}
bool isOutOfBounds(const vector<string> &mappedArea, const pair<int, int> &position)
{
return (position.first < 0 || position.first >= mappedArea.size())
|| (position.second < 0 || position.second >= mappedArea[0].size());
}
bool isObstacle(const vector<string> &mappedArea, const pair<int, int> &position)
{
char cell = mappedArea[position.first][position.second];
return cell == '#' || cell == 'O';
}
enum Direction { UP = 0, RIGHT, DOWN, LEFT };
bool takeStep(vector<string> &mappedArea,
pair<int, int> &currentPosition,
Direction &currentDirection,
set<pair<int, int>> *distinctPositions = nullptr)
{
const vector<pair<int, int>> directions = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
pair<int, int> nextPosition = {currentPosition.first + directions[currentDirection].first,
currentPosition.second + directions[currentDirection].second};
if (isOutOfBounds(mappedArea, nextPosition)) {
return false;
}
if (isObstacle(mappedArea, nextPosition)) {
currentDirection = static_cast<Direction>((currentDirection + 1) % 4);
return true;
}
if (distinctPositions && mappedArea[nextPosition.first][nextPosition.second] != 'X') {
distinctPositions->insert({nextPosition.first, nextPosition.second});
}
mappedArea[currentPosition.first][currentPosition.second] = 'X';
mappedArea[nextPosition.first][nextPosition.second] = '^';
currentPosition = nextPosition;
return true;
}
bool isLoopCausingObstruction(const pair<int, int> &obstructionPosition,
vector<string> mappedArea,
pair<int, int> currentPosition,
Direction currentDirection)
{
if (obstructionPosition == currentPosition) {
return false;
}
mappedArea[obstructionPosition.first][obstructionPosition.second] = 'O';
set<tuple<int, int, Direction>> states;
states.insert({currentPosition.first, currentPosition.second, currentDirection});
while (takeStep(mappedArea, currentPosition, currentDirection)) {
tuple<int, int, Direction> currentState = {currentPosition.first,
currentPosition.second,
currentDirection};
if (states.count(currentState)) {
return true;
}
states.insert(currentState);
}
return false;
}
int main()
{
vector<string> mappedArea;
pair<int, int> startingPosition;
Direction startingDirection = UP;
readInput(mappedArea, startingPosition);
pair<int, int> currentPosition = startingPosition;
Direction currentDirection = startingDirection;
set<pair<int, int>> distinctPositions = {currentPosition};
while (takeStep(mappedArea, currentPosition, currentDirection, &distinctPositions))
;
int numberOfDistinctPositions = distinctPositions.size();
int numberOfLoopCausingObstructions = 0;
for (const pair<int, int> &obstructionPosition : distinctPositions) {
numberOfLoopCausingObstructions += isLoopCausingObstruction(obstructionPosition,
mappedArea,
startingPosition,
startingDirection);
}
// Part one
cout << "Number of distinct positions visited before leaving: " << numberOfDistinctPositions
<< endl;
// Part two
cout << "Number of potential obstructions to create a loop: " << numberOfLoopCausingObstructions
<< endl;
}

View file

@ -0,0 +1,10 @@
....#.....
.........#
..........
..#.......
.......#..
..........
.#..^.....
........#.
#.........
......#...

View file

@ -0,0 +1,7 @@
TEMPLATE = app
CONFIG += console c++17
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp

850
2024/cpp/day-07/input Normal file
View file

@ -0,0 +1,850 @@
28690: 43 665 1 88 9
292283: 36 5 3 9 8 8 4 4 184 770
115932854: 67 2 8 7 3 6 49 1 631 4 2
159: 8 8 3 96 15
642859823521: 7 9 3 6 5 4 1 27 84 10 3
140244: 7 7 30 3 3 13 640 156
1810564: 656 23 6 20 4
86166816424080: 83 39 80 5 6 8 4 80 861
20133655: 872 569 576 4 998
7795767: 41 63 789 1 95 6 441
104811: 9 8 629 2 7 80 47 844
6943025: 3 691 151 3 539 971 1
264923: 71 466 1 27 2 4 19
1877688115: 4 51 34 1 75 7 99 82 15
28399327598721: 631 68 62 26 296 860
48964452: 48 964 382 37 1 29
9898: 78 17 4 97 295
377130: 4 2 2 8 81 6 640 4 2 6 3
1298: 2 5 40 9 713
2574297726: 27 476 37 5 8 3 4 38 91
481431045498: 88 47 194 4 4 3 15 499
222567314: 918 95 99 8 2 73 12
9638: 56 38 7 16 7
161090: 3 7 281 2 5 2 7 5 39 7 91
51044268006: 46 5 46 561 860 5
39658: 62 325 79 60 819
109951: 71 86 7 51 2
12100422: 927 593 308 22 2
71821: 346 13 20 2 3
1556: 7 77 7 40 2 926
892823481883: 9 920 259 75 115 98 9
782: 4 6 9 28 698
12585: 7 81 7 55 2 2
8270: 2 3 74 6 75 3 1 3 3 5 3 2
89690724: 996 5 622 14 9
114302917: 369 7 74 13 46
113961074: 379 87 30 7 6
184626390: 407 51 5 59 6 806
35111582: 171 27 6 41 5
6574224: 7 298 6 60 9 82
7916961: 4 170 72 521 160
1537: 6 8 93 44
3308049045315: 678 992 80 35 609
27459: 1 1 6 35 72 27 9
569674: 7 211 79 8
10475928386: 6 569 6 182 48 35 82 6
4851753: 966 4 7 993 5 940 8
1295: 190 98 3 310 1 7 686
2588200588: 93 369 4 6 462 819
19444110: 7 68 28 814 80 5 565 6
745867: 8 711 968 3 8 7 2 55 4
13209: 254 9 50 8 51
7769113: 17 4 157 43 803 88
21625511: 81 2 7 689 1 9 67 118 3
1077120: 1 4 130 61 7 9 76 44 85
294905644: 823 651 5 2 558 6 5
449156: 19 1 707 31 5
482366646558: 482 366 646 538 19
324165888: 1 7 574 2 960 6 9 648 6
9481646353: 7 260 9 41 637 3 5 1 71
3642387125: 4 7 6 44 269 72 7 1 19 4
2659769139: 672 335 2 1 43 92 2 9 1
89493: 991 9 29 831 3
5601177: 70 80 303 766 108
20549: 404 6 2 8 5
82882800: 3 8 445 577 8 315
600: 5 26 8 66 3 283
6151659: 7 888 16 4 2 6 1 4 4 4 7 2
3169221: 222 549 26 90 303
552172: 5 52 12 6 46
503: 1 496 7
12734: 329 4 1 9 1 881
545591: 5 80 425 4 66 826
104954683399: 2 7 529 32 39 8 4 184 5
305810: 265 948 4 918 53
9625: 90 6 3 564 1
11014: 31 5 31 18 5 3 8 5 5 7 1 2
155239206: 587 1 82 43 5 89 75 6
14077812: 7 8 1 3 3 73 49 8 9 6 958
1838055318: 5 543 677 31 7
1545156413: 9 4 60 509 6 5 549 866
124275: 8 4 419 5 80
420337: 417 9 4 4 7 1
7418: 4 69 40 77 2
530126106404: 51 28 9 113 38 371 1 9
29436: 8 83 1 3 5 77 2 875 142
142551104348: 103 297 890 3 35 1 46
118832: 98 600 8 601 7 2
507172365: 32 8 9 367 6 6 703 1 5 9
23495253: 581 7 5 4 15 2 6 2 38 7 7
40250395029995: 70 575 3 950 29 99 7 1
372437: 52 4 3 2 1 5 5 672 2 5 4
23594032362: 9 83 3 2 54 8 365
136828510: 4 959 5 672 518 53
159891: 26 541 5 48 5 5 1 44 6
1651545: 23 9 7 689 4 8
426888285: 5 220 36 77 7 8 4 4 1 8 5
57786554168: 8 267 174 7 47 3 6 5 3
437646968: 509 8 305 10 4 9 81
9215: 8 1 15 5 57
14720016: 5 32 80 1 575 8 2
71695502: 724 11 3 84 99
144052834877: 71 9 46 4 53 773 49
127474128: 6 2 3 1 8 1 68 98 221 1
24824: 1 6 74 348 58
427443: 845 63 716 5 58 990
7739520: 3 4 1 584 9 97 22 3 5 3
14542953306: 5 9 1 49 6 7 7 8 1 4 706
796979: 7 90 6 96 9 7
1750051: 566 59 70 40 51
2219: 1 56 4 56 5 9
19309378: 4 33 17 425 496 20 5
1358: 2 4 115 10 127 6 295
19132434805: 33 550 71 21 7 6 961 5
9367480: 48 160 66 2 95 4 34 2
2351520: 1 1 3 6 6 345
396543: 791 30 23 1 3 7
2263572323: 2 202 739 13 3 7 5 4 80
86374: 319 5 66 26 1 2
460560727: 5 6 5 4 677 66 6 29 4 8 5
27374821053: 6 3 1 3 74 81 6 4 5 5 56 1
17759347: 7 1 7 9 71 5 443 4 5 7 88
1317045161: 3 5 2 1 8 28 3 8 5 1 154 4
24498: 64 43 6 1 9 7 3 1 7 4 9 9
3292956: 329 2 638 5 313
113246: 4 5 8 60 249
1497554: 9 7 1 484 6 700 1 48 2
31496: 785 5 3 9 8
68460990: 267 88 26 9 30 247
877: 8 74 6
31283904316: 312 740 98 91 4 9 315
487: 7 7 8 77 18
316080: 3 430 6 90 8
81252447: 92 99 8 8 9 82 2 9 9 699
82720: 270 542 85 674 762
5380344: 97 9 1 76 81
6572: 10 54 1 57 15
95276379: 84 5 68 139 4 2 65 8 3
59337632: 3 1 5 27 9 84 35 8 4
53335311: 3 4 8 51 638 92 7 1 559
2569795: 83 387 9 8 44
600018801: 89 741 35 828 693
1696464: 5 7 600 36 77
15929: 1 19 837 20 6
1440994: 5 48 6 9 94
3540681: 7 8 38 576 678
129675194: 610 44 4 6 26 354 39
1618: 798 2 9 4 7 3
803095: 80 28 2 92 3
3528527687: 35 278 7 276 8 6
11982: 148 8 5 9 2
2624004: 65 9 51 469 77
9015108: 8 964 51 107
38598859750: 88 7 33 87 95 50
7871095: 631 77 3 3 18
103577: 8 4 3 9 2 3 8 75 825 63 5
259341: 42 6 4 8 8 9 3 4 8 6 6 63
16175642625: 4 4 5 85 2 82 2 247 9 6 6
16842488: 52 750 21 4 89
254: 229 18 5
73705155: 1 10 670 449 4 20 639
6150654: 61 4 84 8 9 5 5 3
26102032: 300 9 749 8 946
14167: 91 20 3 4 79 41 31
128269: 30 1 3 979 6 6
27152670: 77 44 6 8 122 548
933846: 2 474 824 527 3
9448662229: 296 84 9 38 229
70290954: 4 374 45 4 3 9 2 9 6 1 29
9352: 9 3 43 7
237870: 4 392 6 57 84 45 85
82110: 85 321 85 3
205797: 64 2 9 32 69
2308880: 2 587 5 8 98
13983109811: 1 63 63 6 8 3 2 8 37 7 46
200698: 1 32 760 7 8 2
415904: 8 320 6 3 81 3 8 2 3 8 3 5
22302042: 65 113 89 30 4 1
716804850: 8 878 9 37 9 54 606 8
100746530: 3 6 7 3 74 2 83 1 2 4 97 2
51688: 6 347 4 456 2
3093750240: 2 9 6 29 43 760 7 42 7
8676701: 55 6 429 671 61
12754: 2 23 85 6 7
51961695: 7 6 824 6 1 155 542
33859420: 23 9 8 2 8 3 53 93 367
5573575659: 8 80 4 6 1 550 649 914
28515425: 8 7 274 8 5 3 6 8 3 685 5
12901110: 9 917 6 9 914 3 5
176851425: 348 66 456 302 9 25
4829584: 9 532 41 58 4
506182996: 58 181 87 82 93
57543842: 268 60 84 356 1
79446: 588 5 27 22 44
3686759: 3 686 761
453027: 8 608 14 4 266 88
2032981: 273 95 55 89 79 2
4624428: 6 11 33 5 8 674 9 2 6 83
83328: 298 3 691 7 2 6
3096378: 7 6 7 3 35 3 73 9 7 93 6 6
1305324: 288 5 66 6 606
10073457: 523 642 4 30 357
24214852: 24 2 14 804 48
7340086: 239 2 9 6 93 3 1 1 2 7 4
195489: 6 735 29 30 2 78 64
130810527: 7 8 749 9 441 7 3 5 1 1 6
130202199288: 8 714 836 8 6 63 1 428
12763359: 123 4 6 3 359
57796204: 4 3 226 596 25 924 3 4
181620: 522 9 43 7 288 3 6 4 9
6763: 2 2 1 7 69 65
33803993: 567 85 96 42 7
27872: 2 18 1 53 67 133
493611: 493 1 611
54600: 3 13 91 60 7
24148088073: 844 2 859 1 333
418353409: 567 640 274 3 384
2011: 6 9 1 3 438 4 3 53 4 8 4 7
4596317498: 459 6 317 483 17
496: 484 2 7 3
6795323645: 90 28 1 995 271
13042333: 1 7 844 101 9
1806709901348: 486 983 8 53 478 7
275168323: 4 9 3 75 2 394 7 265 1 2
735264: 6 1 352 6 7
64455: 92 5 510 58 62 719
112688880: 3 3 17 20 7 52 2 4 1 4 8 6
1028461654: 17 141 6 165 7
2069307524: 10 67 709 5 2 69 3 525
17587502: 14 173 1 94 99
4424222: 6 16 449 8 8 222
1674127: 102 7 7 4 4 752 3 7 1 91
6121750272683: 55 652 268 7 2 11 6 8 4
335240: 220 8 77 18 96 3 4 20
227: 2 8 8
1644222: 68 9 37 918 223
2347714: 332 705 705 5 8 3
288708120: 8 196 29 3 39 9 9 2
720872370: 2 816 71 16 289 54 21
28647: 83 69 5 4 8
9243611142: 9 71 1 8 502 64 1 74 1 6
2384668: 8 290 8 6 14 54
106: 3 9 39 3 48 4
6952347: 2 20 213 272 3 1 27
78720: 86 2 35 80 8
8828365486: 67 9 2 21 65 48 9
2516238418329: 8 62 91 9 91 40 1 3 887
11139: 6 854 2 6 775 44
617: 34 6 8 2 3 4 325
80389: 983 40 5 402 466 2
426400: 85 5 5 43 854
523644: 1 36 6 189 8 70 91 3 7 3
6272: 6 76 30 7 8
446760: 1 247 2 60 3
1725: 53 4 9 4 9 483 612
2027266768809: 7 68 75 468 42 321 9 9
16062: 1 610 459 1 5 4 3
1054640556: 8 98 196 1 5 6 282 5 6 6
266040747: 98 22 23 4 8 19 9 69 49
2650266: 4 2 4 5 6 7 1 7 179 263 5
1440996: 76 474 9 4
94431: 869 7 529 93 9 6 7 9 6
35076: 7 61 1 520 37
705582: 36 7 32 8 5 134 6 62
484703: 69 877 75 8
252216: 571 44 96 9 7
209472780: 1 366 8 8 75 630 946
8193489: 80 1 92 812 2 8 665 4
13724934598: 72 2 644 9 206 32 4
82375963: 80 2 307 68 898 65
84596760: 86 5 948 5 920
85224810529: 1 3 81 3 9 67 9 3 416 9 3
266934: 3 593 68 4 5 117 9 1 22
164816: 2 158 95 644 67 529
1796: 3 297 2 1 14
60345493396: 60 3 385 69 87 6 395
6290660: 4 650 8 30 302
314847: 9 4 1 6 42 94 29 54 39
8448504910: 44 192 50 49 11
4594105: 86 84 67 7 30 258 3 1
526152727: 61 9 85 272 7
2485: 67 2 2 7 5
80888199: 668 6 12 819 9
2943040: 827 7 50 9 7 23 8
118831268: 72 99 692 499 2 68
4516687: 6 1 98 2 283 7
89820: 99 336 8 1 454 14 6
27421595: 334 821 96 99
4966069: 7 69 4 65 72
46913588: 4 733 8 724 57 2 5 21 3
1372980: 20 8 65 61 7 41 3
25613: 2 61 203 255 48 605 1
2290057: 325 77 7 966 4
2539150720: 253 91 153 354 20
461181686: 2 5 436 181 683
5133083942: 34 22 15 3 91 1 448 41
154998461: 3 7 8 711 459
41700: 27 367 1 516 4
734737920: 336 10 79 420 64
4592955: 590 8 3 60 9 457 7 15
1607096752: 845 84 19 75 2
10675518320: 8 58 5 2 2 19 8 2 7 5 16 1
2746634119884: 1 338 920 2 941 218 7
3797011: 7 9 955 464 98 27
693355211: 47 2 810 16 87 7 1
130528507: 91 39 528 443 64
5005084: 52 5 5 7 550 84 1
10190323544727: 53 1 5 986 347 3 39 24
8283: 9 6 69 8 3
271057803516: 60 767 589 35 16
51436: 841 1 444 8 5 36
58: 4 5 15
3704: 8 64 6 6 594
3655413: 2 25 32 223 6
697256: 4 2 530 24 9 6 6
363819106: 209 310 74 158 7 2
17534328395: 812 366 59 395
88574: 56 55 683 167 1 92 70
1680393: 6 7 4 99 1 7 114 4 860 5
40839820: 82 16 71 90 70
690775: 76 9 54 623 5
69828: 67 65 529
3132811200477: 2 8 91 9 523 3 822 80
3882285509: 5 99 11 31 23 511
278665835010: 790 57 94 8 5 4 9 9 5 6 7
8171522: 7 60 8 48 28
1031448: 63 7 85 5 70 5 2 514 88
47536770722: 56 93 4 6 1 5 703 71 49
445217: 4 4 52 1 7
22061822199: 8 41 65 8 8 38 5 47 5 22
3074: 4 80 4 9 50
124022658484: 1 2 9 2 52 9 2 6 2 640 7 4
82992865844: 3 8 6 43 573 5 842
3035565: 5 4 5 97 9 694 6
716: 4 73 8 98
24427949152: 909 7 2 2 7 4 959 7 9 2 8
725974: 7 2 314 331 8 80 1 75
16229351: 2 9 13 4 43 9 62 92 96
170441317: 9 139 36 4 534 2 43 31
230345511: 5 355 39 704 919 17
72829: 128 564 350 71 216
33939936: 353 49 5 3 3 32
138960: 29 9 511 3 60
128293483: 8 16 293 396 87
117440137: 903 4 83 6 39 4 839
26292000: 3 8 5 4 65 9 7 96 6 875
93688783177: 2 8 2 3 9 33 7 54 8 865 2
17109343573: 4 421 9 1 711 43
28538702: 828 70 43 4 739
138438180771: 10 48 6 8 73 40 3 9 771
13126807879: 6 2 30 5 75 602 6 3 71 9
87: 78 4 2
254158884: 30 63 7 693 3 45 8 98
868246590: 5 788 31 15 90
7669256: 6 504 716 3 6 7 3 6 845
457988: 228 47 52 2 7
2227414: 128 249 5 27 7 778
211991: 2 5 23 50 8 41 6 4 139 4
4026392814367: 1 868 80 641 42 723
353961368: 416 6 98 590 83 400
2758349: 1 1 3 2 317 8 6 8 138 6
23591: 32 1 7 7 4
84824088480: 1 5 1 2 5 1 8 602 2 4 4 79
151554853439: 26 640 93 164 373 2
6326: 6 81 72 58 4
144710: 7 6 4 38 16 4 966 1 3 5
8082900: 4 5 9 1 1 142 9 1 50 9 7 1
10836538: 637 14 9 8 5 3 9 88
16425806: 1 7 8 8 594 9 60 6 8 8 1 6
2622: 1 4 5 54 787 1 2 5 2 3 9
1774798: 15 7 7 5 77 6 6 2 2 7 4 2
341021579: 773 11 85 953 392
5002482: 61 35 393 50 76 320 1
14138748: 2 1 511 5 8 53 9 27 13
2558673224: 513 411 3 1 14 13 923
563: 26 1 127 361 50
104773227: 6 9 839 2 96 25 2 9 3 2
3318: 682 83 1 4 61 4
852: 8 6 9 15
3857931: 7 574 9 7 2 5 2 684 1 3 7
222495: 72 3 6 49 6
38589184: 7 5 8 7 776 74 256
606648: 591 5 522 10 756 322
597: 3 90 504
1630770: 6 724 75 354 5
1023697654363: 2 2 40 3 465 3 5 436 4
925270: 53 6 8 4 3 49 5
160112022: 95 8 3 13 8 382 21
747807555: 963 4 19 65 407
792285: 9 92 65 4 2 3 897 5
92613: 307 993 12 9 2 70
149289204229: 36 40 1 2 820 5 4 22 8
14895: 9 331 5
833634664: 118 47 7 8 47 7 46 6 6
65472: 11 2 744 2 2
14688: 104 4 68 2
116307: 7 3 4 5 237 5 3 6 57 2 9 3
5434562863: 7 548 72 286 4
19195597915: 27 4 98 8 9 2 9 274 7 1
51289: 96 41 74 5 599
2100: 1 5 3 411 5
363904113: 10 83 87 928 426 463
7194135: 458 3 6 195 79
2229: 6 12 5 6 69
5917453: 188 13 736 3 4
880490: 6 7 9 5 885 37 1 5 8 9 9 4
769176: 76 84 7 7 6
753216: 6 2 368 90 4 93
101420469: 260 71 1 1 389
22896614: 5 487 76 5 94
356: 85 4 4
11123046521: 11 497 41 430 1 964
104046540: 743 112 2 6 1 676 3 5
262891155: 648 4 1 8 2 9 6 7 67 9 9 4
14410: 4 5 1 98 1 3
350068: 199 348 639 4 531
23695: 180 6 998 9 2
41927: 1 9 22 131 6
6227336637: 7 44 407 78 846 3 94 4
266366871187: 934 620 60 3 2 95
551981: 5 452 67 1 84
38194845319: 54 5 55 9 7 4 53 14 3 2
2679973302: 6 1 5 923 4 19 21 1 219
1002684: 54 8 525 4 931
51253312655: 309 8 188 88 6 5 3
1354321: 202 634 60 9 3
1295: 170 2 579 8 536
26013: 2 1 2 635 6 1 4 8 5 4 7 2
18481269696: 3 82 9 56 55 6 961 9 8
631953744: 8 7 761 5 8 7 421 2 9 5
2679000: 5 6 3 2 8 2 5 1 3 6 570 47
592859: 19 3 9 13 859
3729880: 856 9 8 49 11
497: 5 61 6 8 8 85
1097: 3 41 12 92 478
1127538: 663 746 35 1 8 50
2082: 81 5 228 715 37 697
228359936: 2 9 4 1 7 988 6 20 55 1
507339: 5 58 5 7 1 9
3572622: 7 9 554 824 17 8
1248: 75 274 7 837 1 54
15672362: 83 65 61 186 4
405801: 8 926 4 3 2 8 4 2 9 6 2
1763746501: 8 2 8 8 1 3 2 5 4 6 452 52
6290164656: 2 74 8 7 7 82 925 6
443962004: 81 783 7 981 9 14
577891583: 4 1 778 91 57 1 1
843426: 4 5 31 5 41 39 6 9
1597: 26 5 5 2 900 429
74691339: 7 4 599 92 339
9853112835: 162 89 9 37 49 3 89
28204194340: 39 8 124 9 7 4 4 49 81 9
9660789005: 4 9 298 6 15 6 54 5 3 6 8
2556174348: 9 4 7 3 756 9 741 9 9 4 7
14630: 9 8 8 52 978
6672215: 665 7 15 128 67 3 13 2
8985607536: 24 720 52 753 4
1459218: 69 1 3 3 63 7 307 6
368507286: 6 6 1 70 4 661 63 2
23430: 7 137 1 44 13 7 4 22 5
741391: 8 6 438 7 3 4 5 5 1 3 3 1
181270: 166 26 42
4252215576: 773 1 3 55 564 5 3 5 1
898898694: 4 29 29 86 143 616 76
23113822: 5 6 9 2 2 4 8 8 7 3 82 2
174619734: 18 7 95 5 131 3 7 2 4
4276: 8 34 76
1170: 4 18 3 519 2
7964328: 8 9 93 2 170 53 8 8 7 5 8
1067: 960 80 27
492778: 84 85 69 5 27 7 5 74
26142757536: 830 9 288 1 12 184 7 7
4518650: 9 502 5 7 7 8 2
103636870: 8 41 3 9 73 91 60 72
9365852: 4 5 365 8 55
46863306: 3 665 91 4 78 3 8 354 9
12771378: 3 9 467 31 83 7
138279: 3 2 7 8 1 4 61 1 310 4 8 7
3082845737: 48 892 8 5 150 8 6 135
489677974: 612 8 304 9 461 4 9 8 2
10851: 4 8 893 126 9
682194487: 903 9 1 22 3 5 763 2
53655: 47 93 162 49 783 5
99719: 9 43 9 38 721
5458: 2 37 60 8 2 762
741494320: 3 2 2 7 513 2 19 3 2 3
324082818: 634 511 9 99 1 733 88
406454159: 7 8 3 7 527 7 8 8 2 7 268
5612814963: 38 3 39 9 9 92 54 9 961
616977: 565 26 42
721304: 36 5 4 515 95 696
155010990: 7 24 3 73 814 722 69 3
33888340: 84 40 6 4 84 12 629 5 4
573: 45 3 3 90
6126: 30 60 2 2 1
36127: 7 5 531 596 1
10725: 41 3 87 24
282744: 589 80 4 6 1
34940: 96 8 6 956 18 45 155
1158910204: 2 1 9 16 70 713 5 2 9 6 4
811460: 80 576 26 209 47 5
601470: 476 41 9 3 80 127
295568: 596 4 632 98
5159: 34 1 17 98 1 162
574699: 4 23 664 831 481
24805: 950 2 26 5 48
1014779540: 3 8 5 107 6 9 7 8 2 64 2
11414800529: 20 6 79 5 71 2 9 3 945
73653: 90 808 927 5 1
1506435960995: 2 27 6 8 6 8 8 795 98 1 5
12394: 24 57 42 9 4
69841259: 16 55 422 2 62
51640931715215: 64 23 536 781 15 214
75151: 7 515 1
41133271: 498 83 1 5 14 393 2 72
255016983: 408 601 52 20 663
15449832: 9 331 54 67 2 3 4 1 9 8
384072: 5 552 52 53 975 64 8
73353263864622: 5 4 335 751 75 8 2 25 9
193: 26 89 8 70 1
354746880: 32 9 157 768 2 519
294615321: 48 376 9 203 3
1085: 678 5 405
6804: 97 7 95 53 27
31486398: 85 7 94 1 367
8677076: 7 775 4 73 38 4
969: 4 38 811 6
379686195: 2 339 28 1 1 61 2 2 95 5
934642033: 93 464 1 97 6 57
80834113: 853 89 54 76 14 969 1
149661389: 2 748 41 20 38 6
8889: 987 9 6
154503: 2 6 7 4 50 6
568127: 3 8 138 51 21 67
655214: 60 8 9 32 6 214
208492350: 32 9 4 74 17 7 56 8 68
108931747: 141 34 9 3 64 1 80 69
211049832: 315 29 453 77 51
850953708: 7 7 7 134 96 175 6 18
1623: 77 21 4
512647246: 570 498 2 30 906 8
59854: 592 28 1 9 615
2618: 978 44 818 715 61 2
59430: 87 542 4 6 93 3
39163791: 7 559 3 37 92
169855479: 999 14 93 17 97
60: 4 7 32
67984: 6 77 818 87 3
3597: 5 7 9 1 7
41945296: 13 45 99 5 63 985 489
22456681: 8 29 5 371 1 53
286540898174: 580 74 2 78 56 9 817 7
852: 583 4 4 1 2 258
283860837: 4 1 3 41 8 1 60 415 840
2965053: 9 26 58 8 4
2175168088: 804 8 1 3 5 6 1 9 9 6 5 85
577578802818: 5 7 7 578 798 2 46 17
587931: 587 9 33
112731862277: 630 64 42 383 73
8064588196297: 3 5 9 8 183 8 8 90 7 4 4
20599396: 6 658 473 31 732
45071047476: 4 1 20 636 9 548 431 3
1683: 8 97 907
43: 1 4 1
4597: 4 1 2 7 467
1787362285: 29 651 11 548 5
10560094995: 366 34 3 88 9 4 9 9 5
140547692: 7 6 335 4 591 76 8 881
37010325: 5 46 9 16 66 17 15 4 4
1001414: 91 9 1 416
6063: 2 7 8 49 1 5 4 587 8 1 1 6
24466666: 27 185 900 63 103
604586056266: 60 458 60 1 1 5 6 268
74336: 65 5 3 670 39
133721916: 52 64 9 103 39
207068460628904: 567 5 913 7 57 8 613 8
177218494: 7 52 265 8 483 72 8
829486: 1 2 8 8 23 2 8 4 466 1 5
70276995833: 9 8 98 71 7 2 43 4 5 8 3 4
3717098250: 7 590 9 98 253
269277696: 36 6 363 8 7 5 3 8 604 4
171851: 2 71 98 842 6
519752083: 2 28 3 1 6 5 25 6 4 5 8 6
454553: 45 409 5 5 3
8107742: 433 604 4 31 67 59
19212: 3 6 9 6 577 171
30728092030: 5 2 60 466 331 157 65
8477565490: 934 7 9 9 4 1 9 46 493 1
5746813: 89 744 50 8 8
210863073: 843 45 25 82 434 57
609362459: 72 57 978 483 2
11875359702: 1 266 563 79 699
4212811716: 6 702 7 9 4 9 80 790 7 7
36216701433: 8 895 4 1 9 6 700 6 8 3 3
1035028: 3 5 8 5 8 403 88 6 9 29 1
266586242: 4 1 695 2 7 811 7
535764165: 4 6 1 5 7 8 523 282 3 3 9
300760284: 824 73 5 2 84
477114074: 4 6 8 6 857 12 18 4 958
32079569825: 71 779 603 58 4 7 8 67
59675079: 85 7 1 5 2 7 452 7 554
767331014338: 87 20 93 7 83 20 57
1342: 4 33 966 297 44
452895: 482 6 464 15 2
62613601318: 626 13 601 276 42
100121433122: 1 791 321 46 9 3 3 1 23
93305992: 26 801 4 4 8 7 5 2 6 1 8
23753423880: 18 8 87 7 3 4 31 849 6
40520808356: 7 52 709 53 1 76
100193: 6 93 6 86 510
196735266: 6 5 734 5 9 74 3 1 546 1
1011: 335 3 6
6297024: 9 60 514 933 173
92033659: 920 275 9 52 6 2
2595879507221: 4 91 6 959 592 92 20
23108: 1 403 55 37 906
63840932: 7 98 40 46 6 2
217986: 25 83 3 303 5 518 944
186542500: 9 2 654 2 497
75368: 6 9 8 628 8
633: 3 55 5 64 199 7
51806907: 5 9 8 8 3 4 9 2 1 85 3 82
272251: 5 7 43 75 66
624026357: 64 800 963 5 230 6
4374721668802: 6 560 93 1 2 3 84 70 5
220573: 371 18 6 33 1
30428064650: 42 26 12 8 9 647
809617204: 230 7 42 44 341
508531: 5 63 1 39 7 9 6 7 6 497
353239643: 5 2 1 5 89 1 8 1 61 8 41 2
1674273: 3 1 1 5 4 576 62 6 5 9 2 1
681366292: 904 42 3 72 30 289
5980228: 6 11 18 339 7 3 9 6 252
41271: 4 8 1 8 268
24764: 54 20 4 4 450 9 8 4 92
15758608327: 8 9 65 8 9 7 9 524 6 6 3
6979213110580: 8 8 3 5 727 131 10 578
141008010153: 440 64 1 1 32 101 56
945: 3 6 7 30 9 8
94823641: 19 98 9 59 38 3 4 15 9
1819: 194 3 36 605 26 5 2 81
115112: 868 558 12 9 8
7930: 89 4 10 5 278 2
18653856: 6 5 6 586 6 8 2
19508800: 290 64 1 84 3 656 16
567: 8 3 513 7 36
5852476824: 499 1 2 7 674 240 6 4 6
439380438: 93 480 5 50 8 2 2 47
61738728: 8 7 66 46 949 786 73
7376496: 787 4 8 764 130 93 9 8
130551619: 187 79 8 869 9
9887953920: 8 3 1 91 4 955 440 368
2151: 25 2 48 59 6
2261: 6 9 5 1 530 7 180 3 8 42
1491316: 953 56 1 492 1 3 556
16271778: 1 1 9 8 234 2 9 42 37 62
14496899307: 483 3 6 89 9 2 5 8 41 6 3
4918664: 7 927 758
54859: 271 85 233 2 23
22972: 8 35 667 8 3 1 61 6 8 3 7
32815640772: 54 51 8 839 26 49 228
16673677: 445 5 36 15 40 37
30479387928361: 5 4 59 884 73 773 840
134569: 7 3 2 6 3 53 82 55 7 1 7
58970677: 93 2 8 896 4 90 4 9 59 1
43121775: 76 938 581 6 1 9 4 272
4917315682: 99 1 15 7 932 8 4 3 6 8 2
13894928: 7 96 747 831 49 9 5
13250: 5 8 2 41 9
523847: 517 55 553 17 59 2 8 1
224505: 5 2 7 5 9 2 6 111 16 5 9 3
8087096159: 360 4 3 942 10 792 78
2357: 689 43 752 47 763 63
391638: 1 9 9 416 788
1974200: 3 5 4 58 2 9 736 18 248
21725: 2 52 3 4 3
2687326108: 9 99 7 3 384 741 70
245761: 2 58 7 454 197 63
30953583002: 526 3 4 2 6 635 6 45 85
732348540: 9 246 9 1 195 4 9 77 3
2246405: 2 934 40 6 3
3524: 788 67 4 92 6 6
53303537: 4 921 11 1 54 71 97
3360049: 698 99 93 9 48
1618: 6 255 3 3 82
1909900127: 9 212 47 61 141 86
243: 1 2 5 13 48
32995: 32 9 82 1 13
675556316638: 7 7 8 9 1 2 3 65 7 4 27 80
2410548942914: 365 8 2 52 3 5 4 6 6 8 44
280724: 30 6 159 5 49
1758081992469: 64 2 589 5 8 11 893 33
774996: 773 4 6 96 886 13 1
31561010: 1 8 149 805 4 5 9
211421664040: 57 12 8 810 477 41
18145662: 355 10 73 7 53
57939896229131: 579 398 962 291 31
2468151: 6 3 6 68 154
1647031320686: 8 5 733 6 60 6 37 9 684
5499423886545: 54 99 1 4 238 8 650 4 6
2665606: 82 751 40 8 5
38799191: 431 9 816 7 5 4 9 859
89572560: 65 50 6 7 5 786
89792219: 88 9 6 92 221
33379385886: 5 5 1 63 14 1 9 6 588 6
16121194: 48 1 76 441
1364880: 5 8 589 311 33 22 2
889954: 889 933 8 6 9
4763542: 2 96 643 4 811 4 73 7
38469: 20 11 58 28 35 3
10576444743: 354 137 290 94 8 903
135936: 4 6 1 6 59 16
9062652223: 2 2 543 911 402
6911190: 5 5 5 86 5 3 4 7 731 702
888725003: 888 667 8 49 6 3 97 3
36644159: 611 5 204 76 588
4095968: 19 21 801 487 3 26 8
22371212446: 23 76 8 4 4 26 164 3 1
111106877: 9 9 151 996 1 84 2 5 5
12136: 6 108 2 9 786 72 8
1028902: 4 808 550 755 589
16283: 8 8 2 81 1
318876267: 1 3 28 651 1 24
546122570: 473 5 7 57 9 3 6 7 5 9 5
818: 9 9 9
933925: 2 954 4 79 461
1010417: 9 1 10 405 1 11
778662443: 2 5 581 14 84 941
4567: 334 35 12 23 116
1389408: 483 1 7 71 41
10898985: 2 22 45 9 8 982
19178168: 69 330 5 45 6 8 5
111403052: 275 135 7 2 350 3
6231: 18 594 5 5 53
293664: 799 6 23 5 41 48 7
88998: 2 68 536 66 4 2 286
6582556818: 8 747 8 11 8 7 673 8 1 7
5149437: 4 39 9 2 5 99 9 31 7 498
46539232: 6 2 4 4 9 37 27 6 7 51
93957670868: 3 42 2 9 531 4 31 944 1
980986: 9 7 4 6 984
20958: 8 2 17 8 62
294329746728: 58 9 895 5 5 6 8 3 7 8 8 6
3849205: 6 4 2 72 1 3 8 30 9 4 6 61
3727138: 4 4 7 7 5 1 60 5 66 9 5 14
1700261627: 943 6 4 4 3 904 3 8 629
1568899629: 152 4 8 78 4 4 75 630
4891: 97 2 2 4 839 3
13637089: 28 2 55 6 65 3 7 5 3 7 7
539480135459: 338 6 7 845 60 7 190 2
6660670: 66 60 66 9
1377624: 1 3 4 2 6 2 1 42 6 6 4 941
3159004: 242 9 145 90 6
52560043: 801 504 604 13 1
6298225: 8 82 3 32 955
2931: 1 6 455 6 65 58 67 5
6280200: 4 798 29 2 270
49532564: 448 8 124 876 20
13168381444: 431 7 5 61 339 949 1 5
33844498: 33 23 61 392 57 8
696970913906: 1 3 20 11 227 373 48
270249841: 172 70 9 43 29 2 1
1934903247: 7 739 521 92 5 50
8725453: 2 906 1 3 2 1 7 34 722
2229689: 1 4 7 6 442 1 82 4 6 8 9
7225344: 12 5 1 9 1 91 3 9 4 784
46644: 565 2 31 3 26
32902200: 6 226 4 2 768 3 3 2 30 3
335326: 16 3 2 5 7 8 732 4 8 716
429867267: 9 530 1 45 483 3 6 89 3
2341: 8 9 49 585 5
519757625: 55 15 63 7 627
7858: 72 1 7 7 582
14980143269: 9 247 810 1 55 6 80 2
39707833: 83 763 627 231 5 314
68663: 673 6 6 84 75 1
97738578: 2 345 7 6 728 9 2 2 5 9 7
5267: 2 35 67 579 1
222416: 6 1 1 3 4 7 2 4 4 640 4
855748009262: 370 1 33 222 34 68
642616: 39 1 1 44 7 3 1 160 334
392878: 651 3 6 1 1 1 5 8 9 299
665029144219: 14 475 2 914 420 6 14
6157828: 4 7 6 29 1 8 6 8 4 6 5 1
39566133: 681 7 83 33
216262800: 38 3 7 94 106 3 520 90
3581755: 1 75 37 67 7
44967: 1 1 2 4 78 7 68 4 960 3
32514046: 9 605 12 8 4 72 72
114: 7 7 1 9 91
18533253: 44 5 6 34 84
249786: 77 47 69 1 75
1011970: 37 6 7 491 2 9
746466: 5 381 634 3 98
2296902: 423 543 4 5
2884856760: 811 9 9 482 811
7619775368: 1 9 5 29 336 3 799 48 7
50721403: 9 2 90 3 8 483 6 7 9 4 4 3
610038009: 450 220 79 78 9
80007914: 313 87 4 1 5 5 2 905 9
46800: 1 2 22 3 2 81 3 120
20483578: 667 83 5 74 8
5947620: 29 328 17 98 3
3878550: 48 1 752 1 42 2 34 5 3 9
173586586405: 789 22 658 640 5
12950: 754 4 4 6 882
1163009: 57 62 4 2 944
117810: 87 23 59 722 3
50460241880: 20 6 8 4 86 6 51 89 8 82
8476174807: 8 4 76 174 73 3 69 2
44781: 7 71 6 9
84519915: 426 2 21 53 4 9 8 6 47 2
3018426: 34 98 9 65 19 112 23
40138519: 4 10 138 5 17
114452: 7 4 57 16 71
317375420622: 3 9 7 46 830 6 8 7 3 2 7
13865781: 14 99 55 17 264
1185316293395: 49 38 810 5 2 889 6 8 4
165520: 1 907 5 9 46 4 2 9 3 6 5 2
29250: 72 2 97 734 6 5
1969163: 7 4 7 4 5 165
1071: 1 531 2 3 1 5
4703440: 4 7 9 5 56 454
4417077: 9 7 3 5 8 1 4 5 222 5 51 9
306782604629: 7 669 565 1 155 2 4
30: 4 14 5 9 1
37003: 55 656 837 7 11 68
11522587: 32 30 2 2 31 6
875599671656: 2 8 98 344 5 4 3 773 5 6
641: 61 6 25 2
10121133615137: 55 126 9 34 60 1 513 9
182654704: 48 23 9 11 3 254
2410589726: 9 3 6 2 2 2 3 7 7 38 4 568
3039121: 4 599 8 63 1
914129: 5 4 14 121 5
123846286: 21 9 9 48 652 98 81 9 3
1013001: 1 3 204 4 49 509 4 33
34048: 5 8 72 304
708: 84 56 567 1
20108586700961: 41 7 265 5 242 994 7
449981: 488 922 17 7 6 15
224: 70 72 73 1 8
1704872581: 8 779 9 2 97 581
869: 9 2 3 43 553
2524323977: 2 7 4 74 1 4 3 399 11 8 8
3620512: 3 61 4 6 5 14
7304: 33 63 8 3 7
1544: 60 3 5 596 341
1876436: 3 118 98 46 3 27 212 2
396657148: 66 6 648 8 73 90 960

99
2024/cpp/day-07/main.cpp Normal file
View file

@ -0,0 +1,99 @@
#include <cmath>
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
struct Equation
{
long result;
vector<int> numbers;
};
void readInput(vector<Equation> &equations)
{
string line;
while (getline(cin, line)) {
stringstream stream(line);
Equation equation;
string result;
getline(stream, result, ':');
equation.result = stol(result);
int number;
while (stream >> number) {
equation.numbers.push_back(number);
}
equations.push_back(equation);
}
}
long computeEquationResult(const vector<int> &numbers,
size_t operatorMask,
const size_t operatorSpace)
{
long currentResult = numbers[0];
for (size_t operatorIndex = 0; operatorIndex < numbers.size() - 1; operatorIndex++) {
size_t numberIndex = operatorIndex + 1;
int currentOperator = (operatorMask / static_cast<int>(pow(operatorSpace, operatorIndex)))
% operatorSpace;
switch (currentOperator) {
case 0:
currentResult += numbers[numberIndex];
break;
case 1:
currentResult *= numbers[numberIndex];
break;
case 2:
currentResult = stol(to_string(currentResult) + to_string(numbers[numberIndex]));
default:
break;
}
}
return currentResult;
}
bool isValidEquation(const Equation &equation, const size_t operatorSpace)
{
const size_t operatorCount = equation.numbers.size() - 1;
const size_t maxOperatorMask = pow(operatorSpace, operatorCount) - 1;
for (size_t operatorMask = 0; operatorMask <= maxOperatorMask; operatorMask++) {
if (computeEquationResult(equation.numbers, operatorMask, operatorSpace)
== equation.result) {
return true;
}
}
return false;
}
int main()
{
vector<Equation> equations;
readInput(equations);
long totalResult = 0;
long totalResultWithConcatenation = 0;
for (const Equation &equation : equations) {
if (isValidEquation(equation, 2)) {
totalResult += equation.result;
totalResultWithConcatenation += equation.result;
} else if (isValidEquation(equation, 3)) {
totalResultWithConcatenation += equation.result;
}
}
// Part one
cout << "Total calibration result: " << totalResult << endl;
// Part one
cout << "Total calibration result with concatenation: " << totalResultWithConcatenation << endl;
}

View file

@ -0,0 +1,9 @@
190: 10 19
3267: 81 40 27
83: 17 5
156: 15 6
7290: 6 8 6 15
161011: 16 10 13
192: 17 8 14
21037: 9 7 18 13
292: 11 6 16 20

View file

@ -0,0 +1,7 @@
TEMPLATE = app
CONFIG += console c++20
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp

50
2024/cpp/day-08/input Normal file
View file

@ -0,0 +1,50 @@
........................E...j......W..........L...
............................O........E.........L..
..q......O...........l....................K.......
............q...................HM......W.........
................................1..H...........IW.
....................5.............................
..........k........M...wl............6............
.....O.......w...k.....5.8..l......K.........o.6..
.......k....w.........5.........R.....o........K..
.....q..X..............j........E...I.........K...
............O..........E........................H.
................Mn.h2.w.p....................H....
..................p.......a............j.....L....
.....X...l.p.....................m.........W..6...
..Xq................A..................R..m.......
.........................i..........a..........R..
...........u.....................a........I.....2.
k..............A..n.........R.................o...
................n.................Qo..............
..........u.A.........h........2..................
...5.......Y.....p...............iN...............
1...x.....................i.......................
........M..............2.....Qi...................
...............................I..e...............
......u......A...........m..........h.............
.......1...........U.............Qm.......j.......
.......X.......................................9..
.....u........U.......Y...........................
.............................h.e..................
..................4....e......Q.....L....N........
.1..................4.......................y8....
.........Y................................8.N.....
............P.0J...........3..........8y..........
....V3P..........J................................
............U..P...7x...........e.................
....................J...............r...9.........
.........0.V......Y...............................
...............V.4................................
..........V..........................n............
..............v........7..........................
...........U..........J.......7...................
.....v........7..........................a........
.......................................r..........
...........0.......x................y.............
............6..v.x.....................N..........
...........P......................................
........3.......................r......4..........
..............3......................y............
................................................9.
.................................................9

131
2024/cpp/day-08/main.cpp Normal file
View file

@ -0,0 +1,131 @@
#include <iostream>
#include <map>
#include <set>
#include <utility>
#include <vector>
using namespace std;
void readInput(vector<string> &antennaMap, map<char, set<pair<int, int>>> &antennas)
{
string line;
for (size_t row = 0; getline(cin, line); row++) {
for (size_t col = 0; col < line.size(); col++) {
char frequency = line[col];
if (frequency != '.') {
if (antennas.count(frequency)) {
antennas.at(frequency).insert({row, col});
} else {
antennas.insert({frequency, {{row, col}}});
}
}
}
antennaMap.push_back(line);
}
}
pair<int, int> getDirectionVector(const pair<int, int> &antenna1, const pair<int, int> &antenna2)
{
return {antenna2.first - antenna1.first, antenna2.second - antenna1.second};
}
bool isInBounds(const pair<int, int> &location, const vector<string> &map)
{
return (location.first >= 0 && cmp_less(location.first, map.size()))
&& (location.second >= 0 && cmp_less(location.second, map[0].size()));
}
vector<pair<int, int>> getAntinodes(const pair<int, int> &antenna1,
const pair<int, int> &antenna2,
const vector<string> &antennaMap)
{
if (antenna1 == antenna2) {
return {};
}
const pair<int, int> directionVector = getDirectionVector(antenna1, antenna2);
const pair<int, int> antinode1 = {antenna1.first - directionVector.first,
antenna1.second - directionVector.second};
const pair<int, int> antinode2 = {antenna2.first + directionVector.first,
antenna2.second + directionVector.second};
vector<pair<int, int>> antinodes;
if (isInBounds(antinode1, antennaMap)) {
antinodes.push_back(antinode1);
}
if (isInBounds(antinode2, antennaMap)) {
antinodes.push_back(antinode2);
}
return antinodes;
}
vector<pair<int, int>> getResonantHarmonicsAntinodes(const pair<int, int> &antenna1,
const pair<int, int> &antenna2,
const vector<string> &antennaMap)
{
if (antenna1 == antenna2) {
return {};
}
const pair<int, int> directionVector = getDirectionVector(antenna1, antenna2);
vector<pair<int, int>> antinodes;
pair<int, int> antinode1 = antenna1;
do {
antinodes.push_back(antinode1);
antinode1.first -= directionVector.first;
antinode1.second -= directionVector.second;
} while (isInBounds(antinode1, antennaMap));
pair<int, int> antinode2 = antenna2;
do {
antinodes.push_back(antinode2);
antinode2.first += directionVector.first;
antinode2.second += directionVector.second;
} while (isInBounds(antinode2, antennaMap));
return antinodes;
}
int main()
{
vector<string> antennaMap;
map<char, set<pair<int, int>>> antennas;
readInput(antennaMap, antennas);
set<pair<int, int>> uniqueAntinodes;
set<pair<int, int>> uniqueResonantHarmonicsAntinodes;
set<pair<pair<int, int>, pair<int, int>>> consideredAntennaCombinations;
for (const auto &antennasWithSameFrequency : antennas) {
for (const auto &antenna1 : antennasWithSameFrequency.second) {
for (const auto &antenna2 : antennasWithSameFrequency.second) {
const auto orderedPair = make_pair(min(antenna1, antenna2), max(antenna1, antenna2));
if (consideredAntennaCombinations.contains(orderedPair)) {
continue;
}
consideredAntennaCombinations.insert(orderedPair);
const vector<pair<int, int>> foundAntinodes = getAntinodes(antenna1,
antenna2,
antennaMap);
for (pair<int, int> antinode : foundAntinodes) {
uniqueAntinodes.insert(antinode);
}
const vector<pair<int, int>> foundResonantHarmonicsAntinodes
= getResonantHarmonicsAntinodes(antenna1, antenna2, antennaMap);
for (pair<int, int> antinode : foundResonantHarmonicsAntinodes) {
uniqueResonantHarmonicsAntinodes.insert(antinode);
}
}
}
}
// Part one
cout << "Number of unique antinodes: " << uniqueAntinodes.size() << endl;
// Part two
cout << "Number of unique antinodes when taking resonant harmonics into account: "
<< uniqueResonantHarmonicsAntinodes.size() << endl;
}

View file

@ -0,0 +1,12 @@
............
........0...
.....0......
.......0....
....0.......
......A.....
............
............
........A...
.........A..
............
............