Not everything done

This commit is contained in:
Andrew 2023-03-26 14:48:47 +07:00
commit 2773df212e
16 changed files with 8761 additions and 0 deletions

93
aoc1.ipynb Normal file
View file

@ -0,0 +1,93 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "335e32f0-2c5a-4f77-84dd-66c2266e6312",
"metadata": {},
"source": [
"### Part 1"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "42055a53-b495-4615-bdb4-eaddd9380e92",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"72602"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc1_input.txt\", \"r\") as f:\n",
" elves_raw = f.read().split(\"\\n\\n\")\n",
" elves = map(lambda x: sum(map(int, x.split(\"\\n\"))), elves_raw)\n",
" most_calories = max(elves)\n",
"\n",
"most_calories"
]
},
{
"cell_type": "markdown",
"id": "4523a59c-06bb-4214-a9ce-143885257bb4",
"metadata": {},
"source": [
"### Part 2"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "614216a4-bbe9-40e9-a4b1-108e85946186",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"207410"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc1_input.txt\", \"r\") as f:\n",
" elves_raw = f.read().split(\"\\n\\n\")\n",
" elves = map(lambda x: sum(map(int, x.split(\"\\n\"))), elves_raw)\n",
" top_3_calories = sum(sorted(elves)[-3:])\n",
"\n",
"top_3_calories"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

2237
aoc1_input.txt Normal file

File diff suppressed because it is too large Load diff

149
aoc2.ipynb Normal file
View file

@ -0,0 +1,149 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "6da7f724-829d-4ce7-ba59-42ac322d072b",
"metadata": {},
"source": [
"### Part 1"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "6b0efa14-33f7-48fe-bed9-1079fdaca7b5",
"metadata": {},
"outputs": [],
"source": [
"score_from_shape = {\n",
" \"X\": 1, # Rock\n",
" \"Y\": 2, # Paper\n",
" \"Z\": 3, # Scissors\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "b9d1cb75-2a68-4593-8967-b757dbf28ff3",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"13446"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc2_input.txt\") as f:\n",
" score = 0\n",
" for game in f:\n",
" score += score_from_shape[game.split()[1]]\n",
" match game.strip():\n",
" case \"A Y\" | \"B Z\" | \"C X\":\n",
" score += 6\n",
" case \"A X\" | \"B Y\" | \"C Z\":\n",
" score += 3\n",
" case _:\n",
" score += 0\n",
" \n",
"score"
]
},
{
"cell_type": "markdown",
"id": "910b30ba-03e9-41cb-af02-281623ef50ce",
"metadata": {},
"source": [
"### Part 2"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "4893b160-0d7e-4833-b629-99f54ba07abf",
"metadata": {},
"outputs": [],
"source": [
"highest_loose = {\n",
" \"A\": 3, # Rock -> Scissors\n",
" \"B\": 1, # Paper -> Rock\n",
" \"C\": 2, # Scissors -> Paper\n",
"}\n",
"\n",
"opponent_matching = {\n",
" \"A\": 1, # Rock\n",
" \"B\": 2, # Paper\n",
" \"C\": 3, # Scissors\n",
"}\n",
"\n",
"highest_win = {\n",
" \"A\": 2, # Rock -> Paper\n",
" \"B\": 3, # Paper -> Scissors\n",
" \"C\": 1, # Scissors -> Rock\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "cb35d20f-987e-4d40-86bc-38e5504eb7ae",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"13509"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc2_input.txt\") as f:\n",
" score = 0\n",
" for game in f:\n",
" opponent, strategy = game.split()\n",
" match strategy:\n",
" case \"X\":\n",
" score += 0 + highest_loose[opponent]\n",
" case \"Y\":\n",
" score += 3 + opponent_matching[opponent]\n",
" case \"Z\":\n",
" score += 6 + highest_win[opponent]\n",
" case _:\n",
" score += 0\n",
" \n",
"score"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

2500
aoc2_input.txt Normal file

File diff suppressed because it is too large Load diff

117
aoc3.ipynb Normal file
View file

@ -0,0 +1,117 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "297093bf-b2ad-4645-935b-b2adea775c55",
"metadata": {},
"source": [
"### Part 1"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "129613b8-f732-4f41-a745-edf2c979b213",
"metadata": {},
"outputs": [],
"source": [
"def item_priority(item: str) -> int:\n",
" if item.isupper():\n",
" return ord(item) - 38\n",
" else:\n",
" return ord(item) - 96\n",
"\n",
"def string_halves(string: str) -> [str, str]:\n",
" length = int(len(string) / 2)\n",
" first_part = string[:length]\n",
" second_part = string[length:]\n",
" return first_part, second_part"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "069cad24-9cd2-4d1a-bfa5-f265fa578909",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7795"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc3_input.txt\", \"r\") as f:\n",
" sum_priority = 0\n",
" for rucksack in f:\n",
" comp1, comp2 = map(set, string_halves(rucksack.strip()))\n",
" intrsct = comp1.intersection(comp2)\n",
" sum_priority += sum(map(item_priority, intrsct))\n",
"\n",
"sum_priority"
]
},
{
"cell_type": "markdown",
"id": "86d642f4-2504-42c0-a703-2dc063810a2c",
"metadata": {},
"source": [
"### Part 2"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "921090d1-2d2b-4161-aad2-23af1b358645",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2703"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc3_input.txt\", \"r\") as f:\n",
" sum_badge_priority = 0\n",
" for r1 in f:\n",
" r1 = set(r1.strip())\n",
" r2, r3 = set(next(f).strip()), set(next(f).strip())\n",
" sum_badge_priority += sum(map(item_priority, r1.intersection(r2).intersection(r3)))\n",
"\n",
"sum_badge_priority"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

300
aoc3_input.txt Normal file
View file

@ -0,0 +1,300 @@
vJrrdQlGBQWPTBTF
fcpTMnMqMfTnZpgMfPbFBWzHPpBPzbCPPH
mcVMfcsqZgmgVcmfgcmZmqZNJhrlrdhNhDdrRRJSvDTRhJlD
pMFRmLwHMbRPmMbPPddvqqrrNSTFVttdrN
hgfpgCGZcjpcgfvNtdrtjvrdtSrd
gZgsBBBlZggBGhsfhpzlzLDLmLRDRMLDPw
hChhMFCvqtTMwbSSHgTZWHZd
jjBNPjJJNfsNjVnVJJNcNfPwGbSbDZnZZgHrddwHrrgWGb
mBBRRmBBQBmNJWhCzqllzhRCCv
lQgpngNgQvHdSgWwjMRmDjmMDHmm
zCLVzfzzbbCzsZZPbZPLfFJJMDWWRcDsmJRcjmwTmlRj
BblftzBtlFznptSQQQppNG
wJJwqCtCGRcVlqlM
BQpppjBQLczTrvHRjH
QQQFnmQWWRfnpQBpQpfDCwCdbPDCwbNNPtdJPCZw
gpJjshBpgjZGppJqBGJjJZzTwzTmcvzwwcmvwsCFdmcF
WPSSWWSQLVdDDfWltDWLPfttvFCVmzCCTFnmwcnnnCTCzVVv
tLldLltDQfflrRWNqBRjgHBpJNZjHj
bzVJjVnjbCGVLZQLmmsJZZQQ
RrwwzhPScWSwrhvZZvZlZvvSTsQS
HwFhzFWdPHfcPwPWPdhWffnngpjtnjgtpnfGCGnG
CPwQtftDQfPDBPBCfDDDCDptszcpVVddcRczVLVdccRGrLWs
FqlSnhlqhmhMbHqqSQlHbcrRrsWzRdzdWVzLRGRrVF
MbQmSnHZhqZMQMTJCttjCgPCwfgDwT
CCSpvHtZHSwftFtdtbfR
QJmNPmjjJNgNVNSzDlmRqbWlqWWfcqfWqbwfqR
MDhJzmSMDmsZrLhssrvh
ZhznnrLzcHhHSjsjSBSsBnSS
dTwqDdqDRQjNdwqjldggDvBJfmBfTSBbBSvfSJsmff
DjCldNglVwFVgZHHHzhCMcLhMC
vBnShjwwSshmQPmtJLpJtn
rDLFCWrClWCMWWVrbFVJqpQqpHmtbzJPQzJmzb
ZMCCDCMNrTWTrgScgGRhsvcsGLSG
LQpJglQQRjQsppfsQbjfbQlBgBhFhrvghhZCdPZZZthPgv
zVHDMSWVVMVWDzmnVMHDSMMzZvNFFrFvPCdmdFdNdrBPZhhd
ncqqSzMVCcGWVSCTWCDcVTffLLLbJsLLsRLblRQTps
zjGzLQtFzzRgwwLhVrqw
dfClCdHZsmffZDWlBZHCDBmhJbqTgbwgqbTnwrgrqRbT
HsdwPCsWDpDsBpfdWdHldWpsGvvccPvGcvzQvFQvccjNztQt
wmVVgFPrFdwJrlNHQHSHCCHL
tWBtvnBqZZMpcvmmqMBRCQQLCLWCHfNQQCSGWL
BBsnmcpqPswFsTws
BQRpFPJJJJPmPRqZNFVhcczHHzggwjBhghgzHw
snTsTLtrlvSSSslsGdcwmjhgggvjHhmH
nSsWWTtCbbDSnlRRZCfFRNZmCVJf
tRRMCWLtJWQLqLrmLHVLqmqh
JszPjSbGbsnGnSZprVpFhvFqvhrqZZ
zgbGSDBbPsTgbDBzzSDnDnPTcWlWJCQlNttNwwwMcMctcW
hlVRvPvzqqtRdwRRJsst
HHVNVBMBjHLTjVjwDjsbjJwbdmbbss
NBZHMCNVCCpgLTWggBpgNLTvqCPnGhQhCCGlqlhfcvvGfn
mwbfbfbDCqRJZRbCSvmfWTQFczTznnnFTFnrzJsz
BdhHlLjpjjjncSprnsSFWS
ljhVBPjSdHPRfZRZDvVRZM
tGqbqBSsntRgNqwNNVVHVN
hclFvJZvCDFppDpZpHNggMTwdlrMQNVgHM
CCFmcZLDFpvzZhCFJvZvmwjSRWsBLWsnfWjRRGGfnsst
GdGQQFdcMPwMdLFvWsNWFDLfss
SqjhtjnrbVznSztSqtzpjztVvTmNNmmfMMfDDMDDNTqfgsqv
rVhhZjppVrhpVzRbjSnzHPMwlJCJQdcRPPlPPcHJ
JVQLVgVZghFtFlhghtvSzsddmrdvssmzSWtd
HTMJCBMCjnwNBnCbTNwMdWfzvzsrsvffWbdsmfPr
BGnnpDnTjjHJwDBNpqlFQVQFQclcRFQqpR
BRhbrQDttbTTtRDtTRRzLHWZLZHGSqWLCBNWqLNL
fwFPPSjmsmJGLsNH
dvfSdvfVMjPTttTzczgTcd
dZgggwzgvsggtdstZTZgdfnhSJSSJDDhnDBdppnGnhSp
VQWRQWVCRLFGnThJCpFJ
LbmmbQVcHcmmlWjmVlVQNVRzvwwZvTrsrNwNwzZrMvfsqt
lDZQSlHDbLccRPQhCNhG
gtsntgvdvBvvqgsTgBggdrWRNzPhWczPbWcdWCccGGGP
sTBttvrFnnMTMJngbqfLlZLpwFVljwppZZDl
zNNNgqpgmLgqlHBHsMGslH
WdWFrFwhcwWRwhddcRWcdQbcDDslzBDszsHbGBDfbHfzVlVl
ZvhRrvPQwvWFQRZvFdJttSPgCmNppCNzJnJS
fCzRRNGfqNRvwpQhwrGcwZZT
gJnStgMmLhdHndSSTjcTrTpcmrjjcrrw
FFJBbdddFPPhFFNWCF
btrHRSBBSNLLRPLwhbhpqpfWhQppWZ
zCzTvvmgDvgDZhqWZZthtDZh
ttTjMsvCgRRLRSsBRG
LsSFFTTDWdCsmFTlLSsLDDRRQCvhpRQGNGQBJBhGGMNB
zqPtqZnjPPrPvJHBMHrJrMpv
VbqfjZfwgtfjPgZPgtwDLTLcTlcFdWLdcdVTJF
pfMCDmpHbdMQQdQFFG
gdjldRsVFRntQnqR
rlJVsWgWPWjsslSpDbScmSDPHfCd
lnFFGgBFBslDFGbFSjnNTjjppSrQHhnT
zcvmCRcvZmcZzWpTQhQrrTSPtHWH
CRccrZJmdJlwDJwgswGg
hllrrDzggGppgSSLNWgW
jlTlPwwqjjntVpWWPNnP
wjjJqvQjJjQJbTjlFqhBMzfDDmMCGBMHDCGb
jvQPhhtCRtfmqHHjqHHJsl
FFSTcBTBTMwFGCTwMTcGwTVnsHSJzqqJJJplmlpJHszZZzZD
dLMdVMNGBdGFMTNTRRLrQWCQhgWQbhgf
gdRgdgzzrvrzggDwgDGpPLzrbNljMTsbWWjWjZbTjLZMWcWj
tFfCQHJJnJMJTJjNNMjl
HmtffVttqHQmBCBQCqfFnCwRqpDvPRrGppRggNzdwgzp
DHSqzQbzWlRLDzMZNpVLgnpNLggw
cZcdTmPPthPdsvvdhPGTvJgwnpgjjTgNNwMVngNBjNfn
PPdJPvrtGtcFdFFchDRHDqHzZWSQQCrQWQ
BcgnLBLsFvRnGRRRlzfJbbPJzwHPwPFz
hCDjWMDVNfVllfzddw
qqMqpWCMjDTWNWTBLpgsgLvZwtGLLg
zczPgpGzhnbmbchhHwqwhSwfwHCFWw
VJdmVLlLdVJSJWHSTFwH
rlttQLVLdvvZpgcGbmDrzGMD
WSvtpqqtqccttVQpVvJNJSVNCmTlnCWwTTnWlBBBjwCBTlTP
ZgfPHfPfMHsDCwnlGBwTMGBM
rgdffZhPrrLsdLZpvcFSJJNvpJhcJv
qVdqJGvzgJzJgwzgWvdJzpblcRRWmLFFcLBmllFRRMRFRH
TGGSsSssNPTSLlRLcPHMmnPB
tTjTZtNGhrCjQNCjQQDTCSjZvfJbdgqrdpwqfVzwgzvdvVgb
VTmwcTVSMHwbMwbDVBTcMpJfpfnWqdJbZpJldfsjZn
hNtPhtzFzPQGCCGFFCGtnqQqWZWplsjWdlnlldJn
vRCRzvvFFFvhrRthPtLrtNGSwBVDScDSgHHjwwcBgSgTSL
dWCsWbWWchblsmbWVZqqsSpsGfBqBVBB
DtTtjPJrgjjtTTwgPwwjrTgnLqSBZQLqngQppqnfBVQfGp
PJPwwtDwHGGJtJRFHmhCFRCvdmHR
mMsMJSCjllsSSmBBclsMsJHDbcHqqbHpqHGbDZHbqHpb
RnQnGVnzGzFQgzWzpzvpqDHW
QVhRTfGLLFGTTFFwhnQVNfFwJsJsMjsBMrlsjrJlPSPlTrls
JNMJSVSGVCjnWZMZWWcH
gLTcqbqhqbbgzgnjpnjjWHnP
wqlbcrfTwrvcLBwwRtJwsNRstRsCCN
MlBssQBchZDLNJZgmvGg
fdzHMfHSzSprfgSvvJbmvDGNDW
PCHTRfjHnzHMzzfrCPCpMTlFhcFstqVwVCFllQcBtqss
TtFnnFJfDhtdfJJcFtfnsfcFjBjLDjHrDLrCjMjwCLLrZjrS
qQmWmQzvWpRQGvgpGGRGRzmWwZMwBLCHMZjbBBCLwrHSLrqr
MRllgRWWMlsJFnlFclJT
SRRrRDRBRTdbdMRZBZMprTCJCnWGvChJGzLSWWzsGhCs
wwqHPtFwjwTHLHvGTsGW
FlPtqTNVcTVtwtmjRbBZfQbfZbQmRRMR
WSWfQttffsHSfRRRStfnCsQQqlJpbhnrnmNzJbzqNbbrpmnb
FGFPddBcBwDPzpzbWlpzDbbh
ZPdPPLMFdGwFFGdwGdZwcZgTtSTVCsRRSgSRTQWTTtCTtH
vHsfGHTvSvHHHsGHctMgtHrJwbJJwrjgbrdzjWCrdrrw
hqZRLmmZpFhcLhFmrzJQbzzmQQJWJJbm
LNZFcpPlhBRhqDDllRtnMssGfBsnttGTnttT
VDVrLrZZcjrhhFrZppGlglGMPFwFWNQw
bzszSBHBWNGcscpN
TJqBqSfTBBqBHzJqddBqzcLnLjnhCRTvvRrnDrvrvZRn
GLzrNWbtMptHDmNDglgmlD
fZtcfCRvtBcQjdjgmmjj
RhBhhqfSPPpttrnPnVVW
BhVRJGwWqtHjZqTDLZ
gQnfpBdPNpQrPNSfBdndnpTTDFZttDLLzZzTzCLNLZZD
mQQPsgrldpgdBQgSbGVcmcRwGMWhwVwW
DrLCctBCLQtSSQcLbcQHWvvvlWHHnWlWBlNRRB
wqdmpgqsZhzGphwwpZGsppRvfnJsWfHWvfFfWFsfvlNN
mwmhVppTqpGqpNZpqTbSLLttDrDDtPQTtr
qwqmgnglDnlgtQzQJzJQhmWQ
pTpTpssdsVvNsdTSZGdSdjvCRcqcRcVWVczhWChtchzWcR
sGTvPqZvSGdZZGdsvNGdPHrFHFBDlDLwPgBFLLBB
BBBGsGGBrBBrqWVqRnWBBBWpzFwMhjMFSFPzzSwPFPpzzFvg
HtCdDdDctZDtbHCffcbddbNfvjvFSPFjMhMgLwPgjbFhjFFj
NJTDdltNgCNDZJJZCDJZDfJtrWWnQGBqlRVVlrBsnlrqqmnr
PwZhgbZSWSqqGznv
tTPVVmptcsrNrsTNpjRzqfHvvGfGWjfjqGzHWn
RVRtVDRmsRtrctmJDtgBBhBhbFgJPFFMFJgP
jPzzCCPzTtTfzrRtgSNVRHvFQVvbpQppVN
sSnDlBGBwJbFNplVlN
cLwSwdMhSwcBcsBZgWjCTCWfCLffrg
RSNPvTTNqFTSvNrSBvBGJGzmFMslgCMJCgmzlc
fDVfpptLWQfnVLffVHbQDQCclJzGGCtGmmGJmzMshzGh
VfQnWZfZDbdnVHWcfWnfHWVvPrTSNZqSwSqPjjvBwRqrNS
FLRpmRwcpjfzjSnD
tGvPNvBnPQggPQQvPgNHDjSSjDzzthjzfHrjlT
JGqvWNCCGQBWGBQvVLsCMMRLRnRMnwMc
fGJbzgBffCGpPGDVnG
mcTccshvbbdRNRsNjdLjnVlHVnHLqVpDpDqD
wdmsWvWssbZTcWvRhfzMQtrzMgrfrZJgfQ
NfSbvZHZNRSbQbbQgZrMjhLwMrjLjwHLCmmh
NTWdJBFcWJFcdsFJqcqPwqmjpMrLCMpLMwLP
dNJctnFBVfSGgvnfZz
GSnRJfGfRJgMDMGWnfzdmptpFJppLvwLwvLt
hbjZzrQbblqcLtpwlHvFplTH
qrzqbschrQCqqjPcCVcCGDfGMWDgWNGDDSfgnf
vmMpCdTndCvMdmnFcCRJWBJGcZJRJB
NDNwGzshPLrwVVNsjswhGzjFSfFFQQRSJWRBFcFRfsWFQB
NwNhNjVzhhzzrgzdqqvqtnqvlqdggG
MdPLVSSlMMVMmlLBBLFdvZNWqWztStttRRNqzqNGTq
DhJfhghhCgwChJgJwHHzbsHpnZRtTWqqfZRGTnWTZtNqNRWR
hwHpJbprwpQhDHDCbCCzsClBvrLMVFPvmPlMMVMdLrvj
DssDrqRsWsNfzfsWLRzjgTdBlgzFpMlgTFTglT
ttCZnSQmSQmgjGQGQgDlBp
bhDnCmbwVmCwwtZttPwbRWsRJcqWJfcfsfrqVrqq
ldBgTMTRvBDVnCCCTdSRTqNjbjSbPPPPqtfPqtPJFJ
cZHZrszLrrrZHrbNjNtbJCfqNJLt
GZzCzWZGGsGzmzZcmGssZzZVvnVdBDddRRDnVlWgRTDdBM
RjNrrjwGDDqqGJsHtzpMHHGz
QCbWgbShmBCCPClmmWFHzJzTbDdsMJsTtpTD
fffQfnSCWDBfhCDLRrNrwcrqVqwNqn
zmRrDRzqjmLLHzDjLsHLflJlVVJlWWTDTfdMtlWJ
pPQQnbvSpvNbgfgfVtMVJfgdtG
SnpnVFcPnNnPvpNSFNSbhHLhrjhCqRsRBRrHCLhzmC
CZZzlnCZNlGGcbVrbtVlMtct
MgFQDFgQRLLHhJgDFqQJQLgdtVTrttSrPSmcbmTtvSqvVSTV
hFQDDfMDfLgHwWfBzWwwsZGW
bHVDdHVHTPMvnSQnWSDQgDmm
GhrCJfbfrhfbRJcqGqlwZtnBRtBWSQgQWWnWQW
lfcCrqJhlfFqphpplNCrNVMPMPLbsLPLzFVHVLsVdz
VDhFCZhtFdPqwwcp
SvnvHNNnTvbwNNgnHwTHgwBTLcdqmmfmqLGmmTRLPfpdGP
BNWsHJgSnwgMMgMBBWMDVJjtjZrDJZzztJhjQr
HDsSHLRnpjbpbbRDbqLjLjjGGVffMVGMdvnfMcNvfBBGcB
TCzQQztwwNTMqMdBVv
hCQWmtCzZthPPZPrLjSbJqjSjLLFjLpr
ZrrZqJDcZSCFLLHBFcjjHF
TgvnDTlTtQwgBfwwwzLjGLdF
VbnVngMtvDTTVMQDQMDQlsbZJChCmCPhprrZqhqZSZPJ
glMGHBJTJJTplgwcCgcqcFhhbWncFm
sSswtPfRDmWcCqfchq
RZSdSzsVzNPSwSSQsdzSSQpGLjJTMpBGrJrLLrplZBpG
WQqqwLqQlnlWDwtbVbtCNfVbpV
dFTRjBPhcBgBrFhTPhrbVptJpNNbbtJCbJSL
hjcmcRmgPPcRcPDmHHzGLWmsDmzH
rWFmrRmmccSZJWvSLZTH
hDPhGbhSjtbpqJLvJHjLHTqj
pnplBlfBPPhlgfDbDhglPMMrwrRRSSncwccQzddzmC
LbccJCGzbcCJcfGczcnmNnvNmZNLSDZZWPWS
dwstRhTsrsFddPZqvNWP
BBggRrQstBwBRTHWTprRCHHGVljfCGCfcljHjbGV
FHVBSVDvnsFDwwSVwwvGVSMFWhWcWptMWchWMtPPcWtNNWcj
TgqJrJTRmRCNrbcLjprLnp
qQTlfdlZQgmfqqnFVznvQwvnsBsV
TGpDDMQGMZNtfvDJdtWd
jbrmstmllRmNvVhmmvJVhv
tbrRzFFLlRrjFlLlTQgLQwwLMwgTZBTB
QFgFWQQfSgLFGmtnnVmqCPWmPH
TTzjgTbRRqnRsCPCsP
NDMMgZjzcJvbjhMcjZbbbJJNpdpBfBvSBBQwBSQLQSpSplBG
zcRNsQSSMjRsNNZZFBLQHHFFBPWF
tvwCtgvqLJNnNBCH
fNNwqrqNMpTrDlcs
MMHMVPRJHJWvqzWctbtQQdQz
DFfNFffDnTllfTfFfmzsjqcdtQGQpbddQQbssn
mlFNCgFNNNLrmLFCThhhzJBvhSJPVhMgMh
PWjhljbHFhjbFMWhjbPfhbTGZvlGcGlCLvvwtGCNZGvc
SRqBqBrmQWQrgQrrqrJBLZNccLNZmTCtvTGtCvCt
rJDzDSSBrzdqQWDPHFMjMFdjHMVnbM
qqLwvvtrLFqqfqrjjjdBZfBCBBJdlT
ZGZpRZHbQDzDWRRRVdBzSSlBdzjjzdJJ
ZGpgNDQmWGDRmRpZMQbvPPtnnFnLsstFmnFrPL
TdhcfZhdZZdpdbPWttCWrrCN
MBMMqRLgpGpFFWbNsvLwvCPCCP
mpBMnBRMBGqJfZcfZZHZlhfm
CdmGdnMcMwHjhDtFFnrj
vPbVbPBPPpgpgWJpvTjqDZZqSHqVZShrDj
BppjjgvbJjbpNbzPfNcGCLlCRcmLLflllGcc
qDtgVttGFtlslStS
gCZbbHCjvJbZjCbJhHhHJrZcslJcLzLllcLNFssMSsTlSM
CWbWrZgWBQQBBpfdPm
hstPtCGtltlTClllPJLScVdPdJjLPJMV
NHRbDZDQSDFFjjdJ
RqbQpgBmqZvqZNQqgZmmbszpTtthtCswhjslwwpTWC
CVdwBJJdppbbwdBVrJbrJbGPlMFSLrjrPjmPFFmPRRDF
NNWHHhNZTcQWhnNFlmSSlRmLjnPPRF
qWsccHTZccsNsZcvTcNtStpBtbdVwpfBwbVCBq
lPQHNJhMPMPFlNMHBqZBwQwQwQZwcCqw
bWddDzbWbftdDSDbgttgnSDWccLwcvBczqcqGZzLccZTZwwc
spWrssWrnDtDpfSWDtsFqlFPjNMjRJVVNNPJNp
bCCfcWVLTHfSSdHwhH
sGQSZSzQJmmQsphwHHHsndnpHN
zPSqrmZPFCvFTbWMLV
tLtVBGLJqGqVGbzGSCsSsSqQsFvZCSQv
gRgdWlHTBHgjjHlWpWjWjrwdCfQRZFSssQQQZmQmMSvZfFMQ
lPHlpWgjTldprNWHNNdHjTctcLbVcnNJJGbVzBhnbhhJ
zVrSwzzJbVrbqFCVVVwVCztWDDtfTZsWDZTLZZmSWsDm
bpgHlgBbbGGGglBGRNvMpWfTDjmDfWDjfRZZWLtmZs
bGbvQHMpQccFJPPh
VGqCPmPjfGqCdMqVMhjhmPChDJDJzvrrbrBvrdrpnJDpJDQr
TSRsgHRSFHTlHvJvBDvvzlptbv
ZFLTsRRgZTgWscHTfWNWNPPBfGqmmMfV
TvTrrrCVCVwqjPrWfWhjfH
RRmgmnggltRgNpzRsdfqWWjdFdvNHfdh
zZlRzDGGZmbmmZbvGJVccwCMVcVVTLwDwC
QPsNlvvvSccbbNQcSPvDVSvzTLLCgRVzCJgTJpgCpphgzh
MDqHwFrMffgFpgpJLzTz
ZtdrffBrdqmBBmfwMtDtQPPPbjcNvnllnlbNtScn
HbbbcpTHHMMqNTCddCVBQvgPzJPJWQBQjvpBvQ
FFrDGtntFFwhrRFDFthfRhRmSJPJvvJZjZjWJJvJQJnvWjjg
rtfFfLmLRmNgdHqcLNHd
FpFHCFWtFSnCWnBfJJfgMJDGHDGGsG
rhrLrrhLrbtZThLfgsfGNDfgTgNcDs
QmPjbdqjmbbbrmhQqQZrZStRdlnnFdlRzVVVWlnpzR
bBMwwjzhbjhssvsGZBSZLr
JFtnDtRzJtffJHWNtHncRRrvGZvSnllZZZsgvlnvVvlv
RRPHPHFPHHdcHtzNfMQhdCwbqCmbMChhqq
pWGdFSWwwjLdvgNNvggl
mTNbmRPHmmVNmvZhnhBssBlhnb
HPTzRPffJJNzjCFpDWDz
MHlgzsqHlbmzgsHzlsbcRWPdPtjZFqhGGdrPrjPJGrVP
vpwwvQwCnhNQpSnLdVtrrZGZtZjdVSdJ
hfffwvTpvLwDpCLvDnQDHbmRRTcWRHMWWHWMmWMW
WHlNHWWldjpwntnWBPpPQFZFBFhZBZCZ
TqqvgvmgfmvDVLLfqqLsrFBRhrrBFJQBGPgPZGCR
mcDbcDmzLcmDDzfVzTQNjNzNztdzjNdwSHlH

123
aoc4.ipynb Normal file
View file

@ -0,0 +1,123 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "298d175e-fe20-4d97-8d3c-5b77b045a33a",
"metadata": {},
"source": [
"### Part 1"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "aed8a1d4-93f0-4bb8-9810-a20b1113ff1f",
"metadata": {},
"outputs": [],
"source": [
"def range_contains_range(range1, range2):\n",
" return range1.start in range2 and range1.stop in range2"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "2385899f-2a65-467e-8abf-2d7fa90aba84",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"532"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc4_input.txt\", \"r\") as f:\n",
" fully_contains_count = 0\n",
" for assignment_pair in f:\n",
" match list(map(lambda x: list(map(int, x.split(\"-\"))), assignment_pair.strip().split(\",\"))):\n",
" case [[fa1, fa2], [sa1, sa2]]:\n",
" r1, r2 = range(fa1, fa2), range(sa1, sa2)\n",
" c = int(range_contains_range(r1, range(sa1, sa2+1)) or range_contains_range(r2, range(fa1, fa2+1)))\n",
" fully_contains_count += c\n",
"\n",
"fully_contains_count"
]
},
{
"cell_type": "markdown",
"id": "5886c69c-229a-45f6-b31e-556b55b1bbec",
"metadata": {},
"source": [
"### Part 2"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "c567162f-8ef0-47c1-ba17-84bf667b3496",
"metadata": {},
"outputs": [],
"source": [
"def range_overlap_range(range1, range2):\n",
" return range1.start in range2 or range1.stop in range2"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "f3142767-65a1-4bf0-a64d-83ef53711e20",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"854"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc4_input.txt\", \"r\") as f:\n",
" overlapping_ranges_count = 0\n",
" for assignment_pair in f:\n",
" match list(map(lambda x: list(map(int, x.split(\"-\"))), assignment_pair.strip().split(\",\"))):\n",
" case [[fa1, fa2], [sa1, sa2]]:\n",
" r1, r2 = range(fa1, fa2), range(sa1, sa2)\n",
" c = int(range_overlap_range(r1, range(sa1, sa2+1)) or range_overlap_range(r2, range(fa1, fa2+1)))\n",
" overlapping_ranges_count += c\n",
"\n",
"overlapping_ranges_count"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

1000
aoc4_input.txt Normal file

File diff suppressed because it is too large Load diff

133
aoc5.ipynb Normal file
View file

@ -0,0 +1,133 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "a19b0da1-9ac5-4d7f-9957-6268d3536564",
"metadata": {},
"source": [
"### Part 1"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "dc5032e6-5ad2-4b32-8a58-29679cfba227",
"metadata": {},
"outputs": [],
"source": [
"def split_def_in_sectors(line):\n",
" for i in range(0, len(line), 4):\n",
" yield line[i:i+3].strip()"
]
},
{
"cell_type": "code",
"execution_count": 60,
"id": "cdccaa3e-0aaf-4e0a-8171-179f90c65bb6",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'VQZNJMWTR'"
]
},
"execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc5_input.txt\", \"r\") as f:\n",
" line = next(f).rstrip(\"\\n\")\n",
" stacks = [[] for _ in range((len(line) + 1) // 4)]\n",
" while \"[\" in line:\n",
" for i, e in enumerate(split_def_in_sectors(line)):\n",
" if e:\n",
" stacks[i].append(e[1])\n",
" line = next(f).rstrip(\"\\n\")\n",
" next(f)\n",
" for stack in stacks:\n",
" stack.reverse()\n",
" for cmd in f:\n",
" match cmd.split():\n",
" case [\"move\", amount, \"from\", pos, \"to\", newpos]:\n",
" amount, pos, newpos = int(amount), int(pos)-1, int(newpos)-1\n",
" stack_left, stack_right = stacks[pos][:-amount], reversed(stacks[pos][-amount:])\n",
" stacks[pos] = stack_left\n",
" stacks[newpos] += stack_right\n",
"\n",
"\"\".join(stack[-1] for stack in stacks)"
]
},
{
"cell_type": "markdown",
"id": "b9df4a1d-f7ec-406c-870d-e5a7269ccf0c",
"metadata": {},
"source": [
"### Part 2"
]
},
{
"cell_type": "code",
"execution_count": 61,
"id": "55ade032-7a23-4e6e-a984-71f0e452b224",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'NLCDCLVMQ'"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc5_input.txt\", \"r\") as f:\n",
" line = next(f).rstrip(\"\\n\")\n",
" stacks = [[] for _ in range((len(line) + 1) // 4)]\n",
" while \"[\" in line:\n",
" for i, e in enumerate(split_def_in_sectors(line)):\n",
" if e:\n",
" stacks[i].append(e[1])\n",
" line = next(f).rstrip(\"\\n\")\n",
" next(f)\n",
" for stack in stacks:\n",
" stack.reverse()\n",
" for cmd in f:\n",
" match cmd.split():\n",
" case [\"move\", amount, \"from\", pos, \"to\", newpos]:\n",
" amount, pos, newpos = int(amount), int(pos)-1, int(newpos)-1\n",
" stack_left, stack_right = stacks[pos][:-amount], stacks[pos][-amount:]\n",
" stacks[pos] = stack_left\n",
" stacks[newpos] += stack_right\n",
"\n",
"\"\".join(stack[-1] for stack in stacks)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

511
aoc5_input.txt Normal file
View file

@ -0,0 +1,511 @@
[L] [M] [M]
[D] [R] [Z] [C] [L]
[C] [S] [T] [G] [V] [M]
[R] [L] [Q] [B] [B] [D] [F]
[H] [B] [G] [D] [Q] [Z] [T] [J]
[M] [J] [H] [M] [P] [S] [V] [L] [N]
[P] [C] [N] [T] [S] [F] [R] [G] [Q]
[Z] [P] [S] [F] [F] [T] [N] [P] [W]
1 2 3 4 5 6 7 8 9
move 7 from 3 to 9
move 5 from 8 to 9
move 3 from 9 to 5
move 6 from 9 to 2
move 9 from 9 to 3
move 3 from 7 to 3
move 8 from 2 to 3
move 9 from 3 to 1
move 11 from 3 to 8
move 5 from 6 to 9
move 1 from 6 to 3
move 1 from 2 to 7
move 1 from 4 to 8
move 1 from 3 to 9
move 4 from 4 to 3
move 6 from 8 to 3
move 2 from 8 to 2
move 4 from 9 to 3
move 3 from 2 to 5
move 2 from 5 to 4
move 5 from 3 to 4
move 11 from 1 to 4
move 1 from 7 to 6
move 1 from 3 to 5
move 2 from 1 to 9
move 1 from 1 to 4
move 7 from 5 to 8
move 21 from 4 to 6
move 6 from 6 to 2
move 6 from 8 to 9
move 5 from 8 to 5
move 2 from 2 to 7
move 4 from 3 to 7
move 1 from 2 to 6
move 1 from 2 to 5
move 2 from 2 to 7
move 4 from 3 to 7
move 1 from 4 to 6
move 9 from 5 to 3
move 7 from 3 to 4
move 7 from 7 to 3
move 7 from 4 to 1
move 8 from 3 to 5
move 1 from 3 to 5
move 3 from 8 to 2
move 2 from 2 to 9
move 13 from 9 to 4
move 5 from 5 to 3
move 4 from 7 to 6
move 1 from 7 to 4
move 2 from 4 to 2
move 3 from 3 to 4
move 2 from 5 to 2
move 6 from 1 to 7
move 1 from 2 to 8
move 1 from 3 to 8
move 1 from 1 to 6
move 1 from 3 to 4
move 1 from 2 to 6
move 24 from 6 to 1
move 3 from 2 to 3
move 3 from 3 to 5
move 2 from 8 to 6
move 2 from 5 to 4
move 3 from 5 to 1
move 7 from 4 to 8
move 3 from 8 to 9
move 2 from 9 to 5
move 2 from 6 to 3
move 1 from 9 to 8
move 5 from 7 to 5
move 2 from 3 to 1
move 1 from 7 to 1
move 7 from 4 to 7
move 2 from 4 to 8
move 6 from 8 to 6
move 3 from 6 to 9
move 10 from 5 to 1
move 7 from 7 to 1
move 1 from 4 to 9
move 1 from 6 to 3
move 2 from 9 to 7
move 1 from 4 to 2
move 1 from 9 to 5
move 1 from 8 to 5
move 39 from 1 to 8
move 1 from 2 to 5
move 2 from 6 to 9
move 3 from 9 to 5
move 3 from 1 to 6
move 1 from 7 to 2
move 1 from 3 to 2
move 2 from 6 to 2
move 3 from 2 to 3
move 1 from 6 to 2
move 1 from 1 to 8
move 3 from 1 to 2
move 3 from 2 to 4
move 2 from 4 to 5
move 2 from 3 to 8
move 8 from 5 to 2
move 8 from 8 to 2
move 15 from 2 to 7
move 1 from 1 to 5
move 25 from 8 to 7
move 2 from 2 to 4
move 2 from 4 to 3
move 1 from 8 to 4
move 2 from 4 to 6
move 1 from 2 to 1
move 26 from 7 to 2
move 15 from 2 to 1
move 7 from 8 to 9
move 10 from 1 to 6
move 10 from 7 to 2
move 1 from 8 to 1
move 5 from 9 to 8
move 1 from 8 to 9
move 2 from 6 to 9
move 3 from 7 to 1
move 1 from 7 to 1
move 5 from 9 to 2
move 1 from 3 to 1
move 9 from 6 to 3
move 1 from 6 to 1
move 4 from 2 to 4
move 3 from 4 to 8
move 1 from 4 to 1
move 9 from 3 to 1
move 1 from 7 to 6
move 9 from 2 to 5
move 14 from 1 to 6
move 1 from 3 to 8
move 5 from 2 to 6
move 8 from 1 to 8
move 6 from 6 to 8
move 14 from 6 to 7
move 1 from 1 to 7
move 10 from 5 to 4
move 11 from 8 to 5
move 15 from 7 to 1
move 4 from 5 to 6
move 4 from 8 to 9
move 6 from 5 to 3
move 1 from 6 to 9
move 1 from 1 to 6
move 1 from 5 to 8
move 2 from 6 to 2
move 6 from 1 to 5
move 1 from 5 to 8
move 2 from 5 to 4
move 9 from 2 to 9
move 13 from 9 to 8
move 1 from 2 to 1
move 1 from 4 to 8
move 3 from 3 to 1
move 2 from 4 to 5
move 2 from 1 to 5
move 1 from 9 to 3
move 17 from 8 to 1
move 3 from 3 to 2
move 4 from 5 to 1
move 2 from 2 to 4
move 1 from 6 to 1
move 1 from 2 to 8
move 4 from 4 to 6
move 1 from 5 to 9
move 5 from 6 to 8
move 1 from 5 to 4
move 1 from 5 to 6
move 3 from 8 to 6
move 8 from 4 to 5
move 32 from 1 to 7
move 11 from 7 to 6
move 8 from 5 to 3
move 3 from 8 to 7
move 6 from 3 to 9
move 4 from 3 to 8
move 5 from 8 to 2
move 1 from 8 to 5
move 11 from 6 to 3
move 1 from 5 to 2
move 2 from 8 to 6
move 12 from 7 to 8
move 2 from 6 to 2
move 2 from 6 to 4
move 5 from 2 to 5
move 8 from 7 to 2
move 2 from 7 to 1
move 2 from 7 to 6
move 5 from 5 to 4
move 5 from 4 to 7
move 5 from 8 to 2
move 2 from 9 to 7
move 5 from 8 to 4
move 2 from 7 to 3
move 2 from 9 to 3
move 3 from 7 to 9
move 1 from 1 to 8
move 2 from 6 to 1
move 2 from 9 to 8
move 1 from 7 to 8
move 1 from 2 to 5
move 1 from 7 to 9
move 7 from 4 to 3
move 3 from 3 to 6
move 5 from 8 to 6
move 3 from 9 to 5
move 16 from 3 to 1
move 2 from 9 to 1
move 7 from 1 to 8
move 1 from 1 to 2
move 5 from 8 to 2
move 12 from 1 to 4
move 1 from 3 to 5
move 1 from 2 to 9
move 1 from 9 to 4
move 4 from 6 to 5
move 5 from 6 to 1
move 1 from 6 to 5
move 1 from 1 to 4
move 1 from 4 to 7
move 1 from 3 to 7
move 9 from 4 to 6
move 2 from 7 to 8
move 1 from 3 to 4
move 2 from 8 to 9
move 4 from 8 to 4
move 4 from 2 to 8
move 2 from 9 to 7
move 2 from 7 to 8
move 10 from 2 to 4
move 1 from 2 to 1
move 5 from 4 to 7
move 1 from 1 to 3
move 3 from 8 to 7
move 6 from 7 to 2
move 3 from 2 to 7
move 1 from 6 to 7
move 5 from 5 to 8
move 4 from 1 to 3
move 4 from 3 to 1
move 8 from 4 to 2
move 1 from 3 to 2
move 2 from 7 to 2
move 2 from 6 to 3
move 4 from 7 to 2
move 4 from 5 to 7
move 14 from 2 to 7
move 3 from 2 to 1
move 3 from 8 to 2
move 1 from 5 to 7
move 6 from 2 to 4
move 2 from 2 to 7
move 2 from 3 to 6
move 6 from 8 to 2
move 4 from 6 to 4
move 2 from 6 to 9
move 4 from 4 to 2
move 2 from 4 to 8
move 10 from 7 to 2
move 18 from 2 to 6
move 2 from 2 to 6
move 2 from 9 to 2
move 2 from 8 to 5
move 1 from 2 to 9
move 1 from 2 to 9
move 1 from 5 to 7
move 1 from 2 to 6
move 2 from 9 to 2
move 6 from 7 to 3
move 7 from 6 to 8
move 5 from 7 to 2
move 1 from 7 to 4
move 1 from 5 to 7
move 4 from 8 to 7
move 5 from 2 to 3
move 1 from 7 to 5
move 2 from 2 to 8
move 9 from 4 to 3
move 13 from 6 to 8
move 10 from 3 to 1
move 1 from 5 to 2
move 3 from 6 to 8
move 5 from 1 to 2
move 1 from 1 to 8
move 2 from 4 to 3
move 17 from 8 to 6
move 5 from 6 to 3
move 3 from 1 to 2
move 9 from 6 to 5
move 2 from 6 to 8
move 5 from 5 to 9
move 3 from 9 to 8
move 3 from 1 to 3
move 3 from 7 to 5
move 6 from 5 to 8
move 7 from 2 to 4
move 1 from 6 to 3
move 1 from 1 to 5
move 4 from 4 to 5
move 2 from 2 to 9
move 3 from 1 to 3
move 4 from 5 to 8
move 1 from 4 to 5
move 6 from 8 to 7
move 1 from 5 to 2
move 4 from 9 to 2
move 2 from 5 to 9
move 2 from 1 to 8
move 2 from 4 to 9
move 6 from 7 to 5
move 3 from 5 to 2
move 3 from 2 to 5
move 10 from 8 to 3
move 2 from 8 to 5
move 3 from 2 to 5
move 6 from 5 to 1
move 4 from 5 to 6
move 1 from 7 to 5
move 23 from 3 to 7
move 2 from 5 to 9
move 2 from 1 to 5
move 2 from 6 to 3
move 6 from 3 to 1
move 1 from 1 to 7
move 4 from 3 to 1
move 1 from 8 to 5
move 2 from 9 to 2
move 3 from 3 to 8
move 2 from 6 to 8
move 12 from 1 to 3
move 1 from 9 to 7
move 3 from 5 to 9
move 9 from 3 to 8
move 1 from 1 to 7
move 1 from 9 to 4
move 3 from 3 to 6
move 3 from 2 to 1
move 3 from 8 to 6
move 1 from 4 to 2
move 1 from 2 to 9
move 1 from 2 to 7
move 20 from 7 to 5
move 3 from 7 to 3
move 3 from 1 to 3
move 5 from 8 to 1
move 5 from 1 to 5
move 4 from 5 to 2
move 3 from 2 to 6
move 3 from 8 to 7
move 1 from 2 to 6
move 2 from 8 to 6
move 2 from 7 to 5
move 2 from 3 to 6
move 12 from 5 to 1
move 6 from 5 to 7
move 12 from 6 to 8
move 4 from 9 to 3
move 4 from 5 to 8
move 3 from 1 to 5
move 4 from 7 to 4
move 3 from 5 to 9
move 7 from 1 to 6
move 1 from 1 to 3
move 6 from 7 to 6
move 1 from 1 to 3
move 10 from 3 to 6
move 10 from 6 to 2
move 2 from 9 to 5
move 4 from 6 to 5
move 9 from 6 to 1
move 16 from 8 to 7
move 3 from 8 to 7
move 1 from 8 to 1
move 7 from 2 to 1
move 1 from 5 to 9
move 1 from 6 to 1
move 2 from 2 to 1
move 3 from 1 to 4
move 1 from 6 to 8
move 7 from 4 to 1
move 1 from 8 to 2
move 22 from 1 to 8
move 18 from 7 to 9
move 6 from 5 to 2
move 2 from 2 to 7
move 2 from 1 to 5
move 4 from 7 to 6
move 1 from 5 to 6
move 2 from 8 to 2
move 3 from 2 to 6
move 1 from 5 to 6
move 15 from 9 to 6
move 6 from 9 to 5
move 1 from 9 to 8
move 1 from 2 to 9
move 5 from 5 to 9
move 9 from 8 to 6
move 3 from 2 to 7
move 12 from 8 to 9
move 1 from 7 to 5
move 1 from 5 to 7
move 3 from 7 to 1
move 17 from 6 to 3
move 1 from 2 to 6
move 2 from 1 to 4
move 16 from 6 to 4
move 7 from 4 to 6
move 1 from 5 to 7
move 8 from 4 to 5
move 9 from 9 to 8
move 16 from 3 to 7
move 1 from 1 to 5
move 3 from 5 to 1
move 5 from 6 to 2
move 3 from 1 to 7
move 3 from 6 to 7
move 3 from 9 to 3
move 5 from 8 to 5
move 11 from 5 to 7
move 2 from 3 to 7
move 1 from 2 to 1
move 1 from 3 to 6
move 17 from 7 to 9
move 1 from 3 to 2
move 3 from 4 to 6
move 1 from 1 to 2
move 1 from 6 to 4
move 14 from 7 to 6
move 15 from 9 to 6
move 4 from 8 to 7
move 1 from 4 to 7
move 7 from 9 to 5
move 5 from 2 to 9
move 7 from 5 to 1
move 3 from 1 to 7
move 29 from 6 to 4
move 1 from 2 to 4
move 18 from 4 to 2
move 3 from 1 to 4
move 1 from 1 to 7
move 18 from 2 to 4
move 3 from 6 to 5
move 15 from 4 to 1
move 1 from 5 to 1
move 1 from 5 to 4
move 9 from 4 to 1
move 5 from 1 to 3
move 9 from 1 to 5
move 2 from 4 to 3
move 5 from 5 to 6
move 3 from 7 to 9
move 7 from 7 to 5
move 6 from 4 to 6
move 2 from 3 to 7
move 6 from 5 to 8
move 2 from 8 to 4
move 1 from 8 to 9
move 9 from 6 to 2
move 3 from 9 to 3
move 1 from 2 to 1
move 6 from 7 to 4
move 2 from 2 to 8
move 3 from 9 to 5
move 5 from 4 to 8
move 1 from 6 to 9
move 1 from 3 to 1
move 1 from 3 to 4
move 1 from 6 to 5
move 1 from 9 to 3
move 10 from 8 to 7
move 3 from 9 to 2
move 7 from 2 to 4
move 6 from 5 to 7
move 4 from 5 to 8
move 7 from 3 to 2
move 3 from 7 to 1
move 9 from 1 to 5
move 5 from 7 to 9
move 7 from 1 to 4
move 11 from 4 to 2
move 4 from 8 to 3
move 5 from 4 to 7
move 4 from 4 to 1
move 1 from 3 to 6
move 12 from 7 to 4
move 2 from 1 to 8
move 5 from 9 to 7
move 7 from 5 to 6
move 1 from 1 to 4
move 1 from 9 to 8
move 1 from 4 to 7
move 1 from 8 to 9
move 5 from 7 to 9
move 2 from 7 to 5
move 2 from 6 to 3
move 5 from 2 to 7
move 1 from 7 to 8
move 1 from 1 to 6
move 3 from 5 to 1

97
aoc6.ipynb Normal file
View file

@ -0,0 +1,97 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "14be2365-970d-41a2-bc43-000c718aac46",
"metadata": {},
"source": [
"### Part 1"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "47f56d42-e07f-4fdc-a3a3-0cd97c09bde9",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1238"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc6_input.txt\", \"r\") as f:\n",
" read_str_before_packet = f.read(3)\n",
" while c := f.read(1):\n",
" read_str_before_packet += c\n",
" if len(set(read_str_before_packet[-4:])) == 4:\n",
" break\n",
"\n",
"len(read_str_before_packet)"
]
},
{
"cell_type": "markdown",
"id": "10e8a318-7517-4212-b619-ad1406f144e3",
"metadata": {},
"source": [
"#### Part 2"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "139b3b21-76a0-49d7-9533-caf170e18cb0",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3037"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc6_input.txt\", \"r\") as f:\n",
" read_str_before_marker = f.read(13)\n",
" while c := f.read(1):\n",
" read_str_before_marker += c\n",
" if len(set(read_str_before_marker[-14:])) == 14:\n",
" break\n",
"\n",
"len(read_str_before_marker)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

1
aoc6_input.txt Normal file
View file

@ -0,0 +1 @@
dcbcsbblhhgdgssmcmqccdwdvwdvvcfvcfvvpvmmwccdqddshhdppcfpfbbfggfjfvvhzhmmsqswsttcgtctggjllhnnqbnnnldlglplvlbvbzztpzzvpphshwwfhhgssvgsvvpfvfzznbznndqqtsqttnvtvqqqrgqrrgzzlqzzbvzbzmzffnbfnbffcggdcggqhqpqzpqzqbbqvbqbhhtzhhrrrprlrclrcrssqspqpbblggfvvbpvbbssvttsztzpzjjwffnpnfnrrqhqgqrrzqzbzzdpdjpplpclpptltztjtztqthtmmmpsmmpjpqpvvshhsfshhrvrdvdggwssdbbzbttlmlmpprmrmlrrmqrqsshjhjljzjnjllbbvjvnnppqbppqqfffrbfbdfbbqppmtppfttqddtzzwbblqqbddgwgqwqzwwpzwzjjbccdjdwwrggrmrtmrtmrrvpptwwcdcwwsdshhjjhwjwqjwwqsshrrbsblssphspsjpssnsmsqswqwfwjwccdvccrqqnsqnsnwsnsmnmccvcqqfjjfljfljfjgjffjvffvjvhjhfhrfrlrrtpphbhwbbvmmnpndnlljdjfjsffvccnhchwhddrccljllmnnhmnmpnnhtnthnhvnhnwnqqjmmgzzvssphhjljbjwjbwwdnwwdvvzpvvhccvjjlclrrppgjgsshghvvzjvvpvvbjjqhjqqfcqffchcmmvdvtddftdtppfnppcnpnznwwpdpjpnpttlbbmmqfqmffqnfnbffbrbgbwggsmsbbfgbbfbzbtzbbvmmdlmlrlnlwwbswsjjpjhhwqwzqznqzqvvwccwvwwcbbpvvwcvcvzzhzchzccbnccjlljsjbjdbbvqbvvfdfgdfggzfzlzmzrznnqsnncmnnljjtcjcfftrthtrhrgrvvjggzpggrcrpcppggdfggpmmwnmnlmlglvvmjvvddsmsjsnjssqffffctczcjzjjlbbhpbbfdbdzbbsjbjnjbbqqjbqjbjjhwhssmvsschhhwppbjppllprpjrppdpfpgpjptjtptplpnptnptpjjmcmnnnhnjhjlhjlhjlhlwwhwmwjjbhhlfffrbbgvvqwvwswtstmmmfpmfpffmcfcrrqsqzqjjjnpnnztnznddlwdldsdbssstzstswwjtttmmwmsmwssvswszsjzsjjsffmccmfccqzzvpmbbbsqffgzdqbjtzhlqdzhlpwghlstcrcrffrnbwjnqgmbmpgttfmsswdqctlrpdnlsgnlldvbfpwtcptvbwftzcnbbscrrcpnwtmllcvsrmwzzlsdmfctdcwsqdlsnzgfpmzrnswhbqjhstztzzmzpcttsgsggnlhvjmcbbrhgqhsfmglpcbdvmmmnfbtbfrqbpcmttjtnwvznbshwrmznnsvpjqjntlzspljnbwtjcqztsfcqlrggrpzjgjsvqqcrmrjmzwdsshqfhbtfmlwmfvtbcgdmjgtcnphfmfmjlbjzrvjslccftnwcchgdwjnlthlwgldjwqwgdptdjdmzdrrzcdpbfrtdgcspjtqdqvzswwdwrhggdrqjjgwwrbwhhlrpqmszvlvjfqptncjlscvzbgzgmsttlbhbfrctnsphjcrcwlhcgrcrsjbrjvptgfbjgjrvtzmnhpzcgptbmrgvstsltnctjphsjdwpdqblfswzfhgjbpfrptlmhfwcpdlzqccgtdvbzhwngrhlqftmlhjprscflgzpflvvpfsjmlnmbzsrlrshvnsqrhhlqdlzhrcbjjjfrbqcdspwsmltcrtlbdnbnvhbbwgqdcncsztbfwztzdbqgcrnvndmpstpncbwvtctzdpmcpvrgqvjjztfwpvjtdqlvcvdpfzgcghsmbcwtzztmqwdpsprgsmfhphqsqmflrjdqzjscgzlnvcwcrlmpdscnhqpqjfdbdftqgttwntdbpnshdwnmwsrslfgnzlnwwwqgdbfnthhqtvbzsqgzjhhghtmvvfhlmlpbghnsvlttzsjlgndhdqmqqfdlqnbfscsnnqzcdwzdlqcnstcbsffghftqvwrsshgwmlnprhdnnwslwfwtmtfzdjwpmlvvdhjvdwrhvdsmpgrdpnqsjpqmhttrmdwllrmnbznwjwvvpjnnbnfzbdnhjbqqrnzgdqbspbqtwdpgsbwpzfdbpvzfjpsgmztnzrpvvhwlfscfvfpfblvplgdbhvjjpdjtnwrmvpjsphvglpsntvwtqwqvprcgwjltddpjngvmzfzhmqnnwglbzsbrcztpplpsmgmcfgzgpbtgsjrfvdzzcsthznvdpbwvdlcgdhncsjdvpcbbmtrqczctjljdfghsrvrsfjglqqhjttfdhqdqwhzhqrggsjwlldrntwmmbftgqjhpvvctpbtgltnttlhdqbsbwcqmctwlsnhmhncpmnzsllmjhcgnlfgvpcqrwzvsstgwbvjtnrlbblclzdrcwddrwnptqzgwdwtgrfwffpzjmwbqfmmrcfzfzjbwsslbhggtwtcrlhffzgfgrtljgnznnlgzwfmtwwqzhlthvpfclrtmrqfzrggbctzfsmjhrtwzpfrnhwwprnbwmvwvmvnzqpggmzgslctqbqdtvhgzjwzsnblqzmcpnpwllzhvzzmfqzfjlrsrcnjzqdzbpjftljtzvvmrjszvqllnhhgnrnqttnwlvllphjtnmlwqhcvmbsvnwtcdmhsmhdcwqwtvggcqfpdsrsscmhcvfzvdnffrfhdfmgbsghdbpwdwrdmlvsnzwcfchcqvccszdqrbnfvrpbftcwnjmczwgqzmtlmrthlhtjpmchltcmcqwgfgshtvtpmcmpbmlnjmhnpdsljjmjzddnlgtnjqztzsqqlhtqcscjvjncjvfcvsgjhqgzrmtjjcgvvmwswffmlcvlhqhbvrldrvbrfmmqcnqmfzlsghvclrdbsvcbqspgbzmjnlrdhvncnbcfmdlqrssggsmlwwglcjjzmcdwcnrgvvmgjcfbzlncmgqtllgldbdztbtfcjczqtjjlnpqmrgtjsmrbscvqlgqghfbgwccgwrjrzrsbbrqnjcqhllsqmrjtzmjnndwwmdjfhspjpgdcjjpdvwrsgjcfnpllnnnccvnfvqbpddgvbgbsbczmbzrbclczljdmbhpgmhwlqvnjzjwzzfjmsmcchjrqrtmhwlgjsptctlbtdnrqgntcvngcrqdqptfmhbvlhrqchdtwdwbrbqwtswzcrrfndldwmjbczppzrnncvvqsmpvvqcnsvhprhlmrhnjbwdvrbbwwdtmzrqttschrztgjcshlhfbmhmwrrmwgmfshpdhjwgdmcfdvqrmmwgmzbrlgbfltvlzmvqbgvhppdzglqbdlrhjnntnfvtmzjqccmqdbpjqphfggmjqdrndhclcfvqsjrsbcgdhcrbjsdjmwrzvpfpcjwjfdltztfzgmlzqzmztpvbflppgnhdzssznngfjggczdtdmcczjzfsnflpwqrbggmqdbbprfptzcdqvhrvszzjqqjlrlrdpwcnzhvgfhpcdbbgsfmtnszwbhwcdwdghqqctwqlqrlqbdwfvjnhcpmzchqfrwzhzgslzhncmrlrpzcjczvzwcvwcldbmscfqnnqnwwvrpfvjswqmhgmhgnmfzpsjmdhbpvsftccttvdpcdzcnzswqmtrwbctpbgmzrvrrshjjgdqsqrwfpcmsbvqhccvjqpztlttwjjdtbmwslschpqjjllvjcjwtmrtvvwdzglstvtpndmmzcpgqsvqgfdtqdjdctsbsbmqzqhtczhgqgwbdlrhjrwcmtbzfndsbnpnhmsdhtghwwzvtdwtscdnwzmrjrsrjvvbvrpbszchwbltrjbcqmlhqnzcfbhjqnsjghlnlbsrgzrrzfvslwpbqmgfswhgjdsdfrzsdhvdqvqfbcbvmbfhjfpzwlbspcbnvrgpfnmjbwbsnpqpqhjpsnwrlcmfhpdmjbvpnctcfqgdmwzblsnr

217
aoc7.ipynb Normal file
View file

@ -0,0 +1,217 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "34af346b-bcec-4d44-b3d9-4f3fa2caeb14",
"metadata": {},
"source": [
"#### Part 1"
]
},
{
"cell_type": "code",
"execution_count": 121,
"id": "45e4c72c-1ce9-4012-9937-ac0f0d4db3c6",
"metadata": {},
"outputs": [],
"source": [
"from dataclasses import dataclass, field\n",
"from queue import SimpleQueue"
]
},
{
"cell_type": "code",
"execution_count": 122,
"id": "a54cd000-15b6-4257-abe5-000df7ed59c5",
"metadata": {},
"outputs": [],
"source": [
"@dataclass\n",
"class File:\n",
" name: str\n",
" size: int\n",
"\n",
"\n",
"@dataclass\n",
"class Dir:\n",
" name: str\n",
" files: list[File] = field(default_factory=list)\n",
" subdirs: 'list[Dir]' = field(default_factory=list)\n",
" parent: 'Dir' = None\n",
" _cached_size: int = None\n",
" _cached_path: str = None\n",
" \n",
" @property\n",
" def size(self) -> int:\n",
" if self._cached_size is None:\n",
" self._cached_size = 0\n",
" for file in self.files:\n",
" self._cached_size += file.size\n",
" for subdir in self.subdirs:\n",
" self._cached_size += subdir.size\n",
" return self._cached_size\n",
" \n",
" @property\n",
" def path(self) -> str:\n",
" if self._cached_path is None:\n",
" if self.parent is None:\n",
" self._cached_path = self.name\n",
" else:\n",
" self._cached_path = f\"{self.parent.path}{self.name}/\"\n",
" self._cached_path = self._cached_path.replace(\"//\", \"/\")\n",
" return self._cached_path"
]
},
{
"cell_type": "code",
"execution_count": 123,
"id": "6303fecb-3618-493d-b6fb-e9c1858af90e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"('/', 44795677, 1, 8)"
]
},
"execution_count": 123,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"with open(\"aoc7_input.txt\", \"r\") as f:\n",
" root = Dir(name=\"/\")\n",
" next(f)\n",
" pwd = root\n",
" for line in f:\n",
" match line.strip().split():\n",
" case [\"$\", \"cd\", \"..\"]:\n",
" pwd = pwd.parent\n",
" case [\"$\", \"cd\", cd]:\n",
" for subdir in pwd.subdirs:\n",
" if subdir.name == cd:\n",
" pwd = subdir\n",
" break\n",
" else:\n",
" raise AttributeError(f\"Folder '{cd}' not found in current dir!\")\n",
" case [\"$\", \"ls\"]:\n",
" ...\n",
" case [\"dir\", dirname]:\n",
" pwd.subdirs.append(Dir(name=dirname, parent=pwd))\n",
" case [filesize, filename]:\n",
" pwd.files.append(File(name=filename, size=int(filesize)))\n",
"\n",
"root.name, root.size, len(root.files), len(root.subdirs)"
]
},
{
"cell_type": "code",
"execution_count": 124,
"id": "8ed82a45-dd7c-4a8f-b087-bc741148da47",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1391690"
]
},
"execution_count": 124,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"traversible, traversed, requested = SimpleQueue(), set(), []\n",
"traversible.put(root)\n",
"\n",
"while not traversible.empty():\n",
" dir: Dir = traversible.get()\n",
" if dir.path in traversed:\n",
" continue\n",
" if dir.size <= 100000:\n",
" requested.append(dir)\n",
" for subdir in dir.subdirs:\n",
" traversible.put(subdir)\n",
" traversed.add(dir.path)\n",
"\n",
"cumm_sum = sum(map(lambda x: x.size, requested))\n",
"cumm_sum"
]
},
{
"cell_type": "markdown",
"id": "a61f8782-d7f6-4908-b5b0-e7aacfec455b",
"metadata": {},
"source": [
"#### Part 2"
]
},
{
"cell_type": "code",
"execution_count": 133,
"id": "22bbbeea-0e73-4d05-8637-09cbc6112a7b",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"179 dirs\n"
]
},
{
"data": {
"text/plain": [
"('dqbnbl', '/hmw/tsrqvpbq/dqbnbl/', 5469168)"
]
},
"execution_count": 133,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"traversible, flat_file_list = SimpleQueue(), []\n",
"traversible.put(root)\n",
"\n",
"while not traversible.empty():\n",
" dir: Dir = traversible.get()\n",
" flat_file_list.append(dir)\n",
" for subdir in dir.subdirs:\n",
" traversible.put(subdir)\n",
" traversed.add(dir.path)\n",
"\n",
"print(len(flat_file_list), \"dirs\")\n",
"\n",
"space_left = 70000000 - root.size\n",
"flat_file_list.sort(key=lambda x: space_left - x.size, reverse=True)\n",
"big_enough = filter(lambda x: space_left + x.size > 30000000, flat_file_list)\n",
"needed_dir = next(big_enough)\n",
"needed_dir.name, needed_dir.path, needed_dir.size"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

1008
aoc7_input.txt Normal file

File diff suppressed because it is too large Load diff

176
aoc8.ipynb Normal file
View file

@ -0,0 +1,176 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "44a4d803-d75a-4954-9395-f496f05cfa3c",
"metadata": {},
"source": [
"#### Part 1"
]
},
{
"cell_type": "code",
"execution_count": 82,
"id": "472462b7-896e-4993-80c4-996f318c0c44",
"metadata": {},
"outputs": [],
"source": [
"with open(\"aoc8_input.txt\", \"r\") as f:\n",
" forest = []\n",
" for line in f:\n",
" forest.append([*map(int, line.strip())])\n",
"\n",
"W, H = len(forest[0]), len(forest)"
]
},
{
"cell_type": "code",
"execution_count": 83,
"id": "828ee197-c184-4826-afc4-3700b0e97762",
"metadata": {},
"outputs": [],
"source": [
"def get_row(row):\n",
" return forest[row]\n",
"\n",
"def get_col(col):\n",
" return list(map(lambda row: row[col], forest))\n",
"\n",
"def is_visible(x: int, y:int) -> bool:\n",
" v = forest[x][y]\n",
" r, c = get_row(x), get_col(y)\n",
" \n",
" rlp = r[:y] + [0]\n",
" rrp = r[y+1:] + [0]\n",
" cup = c[:x] + [0]\n",
" cdp = c[x+1:] + [0]\n",
" \n",
" return max(rlp) >= v and max(rrp) >= v and max(cup) >= v and max(cdp) >= v"
]
},
{
"cell_type": "code",
"execution_count": 84,
"id": "92c923a5-b93f-4492-8ac0-afc98ebd0205",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"1818"
]
},
"execution_count": 84,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"c = 0\n",
"total = W * H\n",
"\n",
"for x in range(1, len(forest)-1):\n",
" for y in range(1, len(forest[x])-1):\n",
" c += int(is_visible(x, y))\n",
"\n",
"total - c"
]
},
{
"cell_type": "markdown",
"id": "34161fd4-966e-4536-a338-17835748f372",
"metadata": {},
"source": [
"#### Part 2"
]
},
{
"cell_type": "code",
"execution_count": 85,
"id": "25132b83-3c45-46e0-80df-89ebb8a431a8",
"metadata": {},
"outputs": [],
"source": [
"def calculate_scenic_score(x: int, y: int) -> int:\n",
" v = forest[x][y]\n",
" r, c = get_row(x), get_col(y)\n",
" \n",
" \n",
" rlp = r[:y][::-1]\n",
" rrp = r[y+1:]\n",
" cup = c[:x][::-1]\n",
" cdp = c[x+1:]\n",
" \n",
" ssl, ssr, ssu, ssd = 0, 0, 0, 0\n",
" for t in rlp:\n",
" ssl += 1\n",
" if t >= v:\n",
" break\n",
" for t in rrp:\n",
" ssr += 1\n",
" if t >= v:\n",
" break\n",
" for t in cup:\n",
" ssu += 1\n",
" if t >= v:\n",
" break\n",
" for t in cdp:\n",
" ssd += 1\n",
" if t >= v:\n",
" break\n",
" \n",
" return ssl * ssr * ssu * ssd"
]
},
{
"cell_type": "code",
"execution_count": 86,
"id": "54b7e07c-4e3c-4f3b-bab8-588d11117639",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"368368"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"highest_scenic_score = 0\n",
"\n",
"for x in range(1, len(forest)-1):\n",
" for y in range(1, len(forest[x])-1):\n",
" sscore = calculate_scenic_score(x, y)\n",
" if sscore > highest_scenic_score:\n",
" highest_scenic_score = sscore\n",
"\n",
"highest_scenic_score"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}

99
aoc8_input.txt Normal file
View file

@ -0,0 +1,99 @@
200200221023111313131033314121142013103432145142351212334232423210101340410243413011333312111010010
021002023301222221234134021422342024344555521535143232341414552024224120114233210330203002020100112
120000123021210023111321143114331115334535223455511513445233523154411102203411040133312002213001021
110211312303200204232110124204135453554533435152342542252215415141133330323032234114310011301232202
112002122201001100330432244432552555524445123151222142521452233321152332132412434434431321322021220
000131233030332102140440124221314455255431113413445553414144524134315351524134030112312012102102122
011002120310213142402320144522121125454423123245535451115134412543215113433312403430132101003202030
001221312201314442411333454131552331253553254425236334643151355314514413411344034432330410221101023
133033302114012204213054544541124453214232545523665466356466451514332142121512400041213432211332332
122103100320433433403313515121232352332442555253656542336644235234542522322522414400320014312110331
220032121143103434234531224315451255225362634256634623342624242245654341134514413144333113211200033
320112113344013332224131114231235263526556625325625352254643224563365551253353323542200003301120011
130332114433413215333445212514445445656665256554333534422554442522234433415533124353022320300112030
122220320003402342433443415465352622564252264442264334335624365224645544545412124352220434440211220
012123032311134245212342233263346563632453535355553473445564362634252543555515242444423232000444220
210332422344222154315435122245243633424643346345734336333746422324336263624544151122442021330341202
122113144440445232235222443563362625543565533465377647363543377645634552632254214531354231413432430
312340402310532324322313244522226622547366756445444754767335355365264622465662241215332253310001232
203342203201331433144542522354633356376457563745333765735577477354743263423666625212251354244021004
023132211325442531332565334564256663665357767653737436565453774766335532544656254552332354313323032
104344140125552254523443534436547653753334746356364664565677777637444474643245425325454224440231203
030303323422144551254256535247737377634445575474654433333453643564664344462332353234553115322142242
043342223454513255464263333566337576377476354884845654658465735544446646436232534263314313142020101
340311214411551345423466343646644336367654787858788857666654635337366537645634644263323112331404131
040141315333331565455545334767475747755574585547567756844746644445646736447635456236413253453410130
211021153443415666656253646443465373878486485664464485545486846643475567536535465634262415153200040
434443334231526223353563373464374574547886487867474546748668788886554566336675234542522151345414431
342100553111533623655466757467553555676668887764575574556755884875687334634675256256443425223423211
421145141552463255552236436455476686566587654558577848647854485587448337355756554555544211113112433
401034232152434624233754647737667758845867866675595798957488447876578774367337742646625521543244120
201414142512656264345465456536564477766677986565767776589758477664747866666435364642236343442335143
422042442525465325256445643735574646548578959977866889666586787677748745536646677524242544332243420
101531424154626224664754337344565457557999965875599965977796778866568855445766577565632633451545144
111515354125252635577747557658555488765757696767797558565755699985844788764347763523465333315513212
222334234142233522754645544788567846579566995878775676667979868685866578655574543564453254615121150
121552233464445256557546467767485865866888757989977669966767877786686475874646454752632664243132511
412242332564644335747746348878865677677797755798669796798699855757865564547645373677564252625352445
104135225262634344357677645645458796767865979969889676688676788669777674757634454746666526341145313
021542323626266573437334685574765967759968767697666876767887775889896866845887736736426556541522241
321245255565266675757675486554868969567677786789686889669988776968557656488476534636744443443445532
424153123565322534465577464547665888797687899787966868666667897595997786576655333657432563645515114
151513345354454444763668544475487669995769769878776696968966788666679588686556634737544644543232332
315411214333624753546345646876778875556666766899787967667988799866697798768788653774352466325322155
411515135354235576553778556478657685968679689776697889878966888788686556488744645555636235464132151
521535123365535747465567756884789758877668899777979788877786896957896655744848765333672323354342345
511122245466262643344764588545559786677866787999989789989769786875585659588677463454335226643415231
234355522634365636744684556586586576767676868898988888987788888877768767654646777776645642226512141
113123464223654555566666486667798785887896678897787899778677766996769787745467865757755656543512345
513251343243554753654655574645569758987667887877878998789898989677659987488676836733553556554225344
514313564242345475335768454478576556889868687997999987778988866675979779845785867656464634654245123
114315542426623675675378664848688856798777688977789877988898769769667968885864643357435456442515251
342223563236537773664686558445968779787887987788777777899877867865678669767686535536743642245412355
125543254543547353647388564555887588899766978788778797797796898997787999888766547554567344424443422
235522554554262346774664445787579599869688998989778778978989968998575857577865454747575353226552114
222421136654623646474466478475666768686777899887878779887688896658596779765485853765563356364225314
521231534444644737467764858748655998796879877877788879799986898965697856444748453437553352232525543
451421316463534654736364878868555996777987969978898798976796968858967778666788533743354325346223354
353521254635223475773456867765596786879787787769889887896999898885688596454456655466765442452131244
112452332645434776643548885574558878789797669769989989886877966757566586444578445673434665652431423
125112515242255354574555588568695879785886989867778677698879979576678878668587547744623644323213555
222335123454333544773645644774469985799577787667779799699876685666756857858446357667422332624342332
342124352633564466565447655564575889567797869876686996679999868665879886844677564455723264641334552
211531121363532576364535865484865759689798698998996686966767965765789787447464533667726322444223531
003112555432534436636776465475555776887557956877687879969697585659596546865447775565562326263355343
433244413454525566563634447454784577659787856568996976596789778896764874668454673456462646455545115
315114535444536635475346535567864558579958679557799758766667597987857466754537555645552424625323424
041544243435426366744535764674465545875655656695956899997569789788477547755346553676234364525135211
110125213453624243247556736654454474595787967599557857997699578855767558775435554762633446551353134
230513132216566245267463366654684755868756978975659588575959655686655788733345435522656542222543322
042134352115436525535436657767864645756586865777685969969787676584458468744346376522324323225232212
113011555414226244554676353335845564485568555689599656977797776777868787473376444245355443123441231
141222553351554636564756467565656675455484874698998587887767666457458846465776554544333612224555323
410201213345143434422573347343756574748746464486554485756685477655667634334766422236535313341542224
400013155121116452255553534765374544884448574876457458645878446585657476536357256436654223345343132
142320132432156443246333547553474375466866456765867768748787675644755677446563663223424341524352200
130310433221343524424456477364543647448885475465487864674454548867635637545422424333245424354220221
104443025533452125362252625375463664447488646447874885476567646456653665465543643663511122334514003
302020415314212533664642446555554345445458887778858887685645576353536647674424342553325334543032421
241431045353353251642363462546445336355737566757557674865573447644353353564422462552323432524142311
123213233322144323666345645436644754537635574357377674465747755476333656624223243445125521412332331
012331042212144212425325652566536457633744775665435737646677453634637335562564643341411132411032042
312330023343231454516256365325363757435647543374644573757667446466553456424326532235455225410011222
330440423204155515131264636336326536353437335474474464535536754457526344465446535213522513202431334
111010303340451214252454445262262654354536464545434674354557674362552463364322545323344220103312142
011012340310414525221212256242445654336566374374366636534765356655652454533664444453134140113204011
230024312112245355233251252646423364546365646735756334573543653656365434363633141223321213032042131
031001023032240425233144214253446244556226622634747362226456645266342264223215113131540112130410110
322123043034044225552242443355356433432465646225242242422346453346634325254325435535313321413201023
022331002231110112224233354325624225342363424426633436565344545533465463152555421312331102120410200
013020314334233240543141441351342432435423252532545655664253435662546145412112135314414140233322202
023101011114024240134343343214355543453244325544366633232356362353335431215322232434231302030012200
121203223241323132430512521115213312263253263242264335335446352453314333354413113210133333212120303
102030123234100043232214342352345452215246465634534464364425653323345231332311444434220444330131120
000331303323044244144032522114521112125142214553424464423124453113211413324230342333130021200000221
121203123313224230334312325441234431451535345453515132125413445443323514321330302200100022013232311
000221331111234212331404233225332533323225131525322111443344452254442544201223424140243032213101301
010202021330012103042021024434411545123253214353525251521434235541535344240243403200122322133122101
121102231211003113342040440404003344542241345133131133414435235243325441120032344431223311313111221
011210032333020312123124101444102341443212553521355222414135533333310320012002223342012031112321112