het werkt ofzo

This commit is contained in:
BasGremmen 2023-12-03 19:49:37 +01:00
parent 0bacf9bf89
commit 933af159cd
2 changed files with 211 additions and 6 deletions

View File

@ -18,12 +18,13 @@
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 5,
"id": "1e6ac084-5bf9-43f7-a7a6-8c8e20066159",
"metadata": {},
"outputs": [],
"source": [
"import re "
"import re \n",
"import numpy as np"
]
},
{
@ -44,7 +45,7 @@
},
{
"cell_type": "code",
"execution_count": 213,
"execution_count": 2,
"id": "98412978-4434-4461-8255-fde982948f26",
"metadata": {},
"outputs": [
@ -54,7 +55,7 @@
"55834"
]
},
"execution_count": 213,
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
@ -79,7 +80,7 @@
},
{
"cell_type": "code",
"execution_count": 215,
"execution_count": 3,
"id": "66632939-dc5e-44ba-b740-868c20cabe8c",
"metadata": {},
"outputs": [
@ -89,7 +90,7 @@
"53221"
]
},
"execution_count": 215,
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
@ -201,6 +202,122 @@
" total += max(color_dict['red']) * max(color_dict['green']) * max(color_dict['blue'])\n",
"total"
]
},
{
"cell_type": "markdown",
"id": "95831680-6f23-404b-97e6-0411c59f6bdf",
"metadata": {},
"source": [
"## Puzzel 3"
]
},
{
"cell_type": "code",
"execution_count": 104,
"id": "3f70dc72-b4e4-4f65-87ac-d1222a01c8aa",
"metadata": {},
"outputs": [],
"source": [
"data = open('data/puzzle_3.txt', 'r').readlines()"
]
},
{
"cell_type": "code",
"execution_count": 113,
"id": "91a632d1-6262-4c28-bb17-45352c60c16e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"517021"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_list = [re.sub('\\n', '', line) for line in data]\n",
"data_list = [re.sub('[^\\d\\.]', 'X', line) for line in data_list]\n",
"total = 0\n",
"for line_number, line in enumerate(data_list):\n",
" matches = re.findall('\\d+', line)\n",
" for number in matches:\n",
" match = re.search(number, line)\n",
" surrounding_string = \"\"\n",
" start, end = match.span()\n",
" if start > 0:\n",
" start -= 1\n",
" if end <= len(line):\n",
" end += 1\n",
" if line_number != 0:\n",
" surrounding_string += data_list[line_number-1][start:end]\n",
" surrounding_string += line[start:end]\n",
" if line_number != len(data_list)-1:\n",
" surrounding_string += data_list[line_number+1][start:end]\n",
" if 'X' in surrounding_string:\n",
" total += int(match.group())\n",
" line = re.sub(match.group(), len(match.group())*'.', line, 1)\n",
" match = re.search('\\d+', line) \n",
"total"
]
},
{
"cell_type": "code",
"execution_count": 138,
"id": "4b239c25-3a43-459e-9669-aa9834571733",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"81296995"
]
},
"execution_count": 138,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_list = [re.sub('\\n', '', line) for line in data]\n",
"asterisks = []\n",
"numbers = []\n",
"for line_number, line in enumerate(data_list):\n",
" match = re.search('(\\*)|(\\d+)', line)\n",
" while match is not None:\n",
" x, y = match.span()\n",
" if match.group() == '*':\n",
" asterisks.append({'x_pos': x, 'line_number': line_number})\n",
" else:\n",
" numbers.append({'x_start':x, 'x_end': y, 'line_number': line_number, 'number': int(match.group())})\n",
" line = re.sub('(\\*)|(\\d+)', len(match.group())*'.', line, 1)\n",
" match = re.search('(\\*)|(\\d+)', line)\n",
" \n",
"for asterisk in asterisks:\n",
" asterisk_numbers = []\n",
" for number in numbers:\n",
" if number['line_number'] == asterisk['line_number']:\n",
" if number['x_end'] == asterisk['x_pos']:\n",
" asterisk_numbers.append(number['number'])\n",
" continue\n",
" if number['x_start']-1 == asterisk['x_pos']:\n",
" asterisk_numbers.append(number['number'])\n",
" continue\n",
" \n",
" if (number['line_number']+1 == asterisk['line_number']) or (number['line_number']-1 == asterisk['line_number']):\n",
" if asterisk['x_pos'] in [num for num in range(number['x_start']-1, number['x_end']+1)]:\n",
" asterisk_numbers.append(number['number'])\n",
"\n",
" asterisk['numbers'] = asterisk_numbers\n",
"total = 0\n",
"for asterisk in asterisks:\n",
" if len(asterisk['numbers']) == 2:\n",
" total+= asterisk['numbers'][0] * asterisk['numbers'][1]\n",
"total"
]
}
],
"metadata": {

View File

@ -5,6 +5,7 @@ Laten we beginnen met de imports
```python
import re
import numpy as np
```
## Puzzel 1
@ -105,3 +106,90 @@ total
66027
## Puzzel 3
```python
data = open('data/puzzle_3.txt', 'r').readlines()
```
```python
data_list = [re.sub('\n', '', line) for line in data]
data_list = [re.sub('[^\d\.]', 'X', line) for line in data_list]
total = 0
for line_number, line in enumerate(data_list):
matches = re.findall('\d+', line)
for number in matches:
match = re.search(number, line)
surrounding_string = ""
start, end = match.span()
if start > 0:
start -= 1
if end <= len(line):
end += 1
if line_number != 0:
surrounding_string += data_list[line_number-1][start:end]
surrounding_string += line[start:end]
if line_number != len(data_list)-1:
surrounding_string += data_list[line_number+1][start:end]
if 'X' in surrounding_string:
total += int(match.group())
line = re.sub(match.group(), len(match.group())*'.', line, 1)
match = re.search('\d+', line)
total
```
517021
```python
data_list = [re.sub('\n', '', line) for line in data]
asterisks = []
numbers = []
for line_number, line in enumerate(data_list):
match = re.search('(\*)|(\d+)', line)
while match is not None:
x, y = match.span()
if match.group() == '*':
asterisks.append({'x_pos': x, 'line_number': line_number})
else:
numbers.append({'x_start':x, 'x_end': y, 'line_number': line_number, 'number': int(match.group())})
line = re.sub('(\*)|(\d+)', len(match.group())*'.', line, 1)
match = re.search('(\*)|(\d+)', line)
for asterisk in asterisks:
asterisk_numbers = []
for number in numbers:
if number['line_number'] == asterisk['line_number']:
if number['x_end'] == asterisk['x_pos']:
asterisk_numbers.append(number['number'])
continue
if number['x_start']-1 == asterisk['x_pos']:
asterisk_numbers.append(number['number'])
continue
if (number['line_number']+1 == asterisk['line_number']) or (number['line_number']-1 == asterisk['line_number']):
if asterisk['x_pos'] in [num for num in range(number['x_start']-1, number['x_end']+1)]:
asterisk_numbers.append(number['number'])
asterisk['numbers'] = asterisk_numbers
total = 0
for asterisk in asterisks:
if len(asterisk['numbers']) == 2:
total+= asterisk['numbers'][0] * asterisk['numbers'][1]
total
```
81296995