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

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
}