162 lines
3.6 KiB
Plaintext
162 lines
3.6 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 160,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"raw_warehouse = []\n",
|
|
"raw_route = []\n",
|
|
"reading_map = True\n",
|
|
"with open('testinput','r') as infile:\n",
|
|
" for line in data:\n",
|
|
" line = line.strip()\n",
|
|
" if reading_map:\n",
|
|
" if len(line) >0:\n",
|
|
" raw_warehouse.append(list(line))\n",
|
|
" else:\n",
|
|
" reading_map = False\n",
|
|
" else:\n",
|
|
" for char in line:\n",
|
|
" if char in \"<>v^\":\n",
|
|
" raw_route.append(char)\n",
|
|
"\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 161,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"warehouse=np.array(raw_warehouse)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 162,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"conv_direction = {\n",
|
|
" '<' : np.array([0,-1]),\n",
|
|
" '>' : np.array([0,1]),\n",
|
|
" '^' : np.array([-1,0]),\n",
|
|
" 'v' : np.array([1,0])\n",
|
|
"}"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 163,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def in_bounds(pos,warehouse):\n",
|
|
" return pos[0] >= 0 and pos[0]<len(warehouse) and pos[1] >= 0 and pos[1] < len(warehouse[pos[0]])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 164,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def next_pos(pos,direction,warehouse):\n",
|
|
" return tuple(np.array(pos) + conv_direction[direction])\n",
|
|
" # return newpos if in_bounds(newpos,warehouse) else None\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 165,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def can_move(pos,direction,warehouse):\n",
|
|
" new_pos = next_pos(pos,direction,warehouse)\n",
|
|
" if in_bounds(new_pos,warehouse):\n",
|
|
" match warehouse[new_pos]:\n",
|
|
" case '.':\n",
|
|
" return True\n",
|
|
" case '#':\n",
|
|
" return False\n",
|
|
" case 'O':\n",
|
|
" # Find next wall in that direction and look for at least on free space\n",
|
|
" cursor = new_pos\n",
|
|
" \n",
|
|
" \n",
|
|
"\n",
|
|
" return False\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 166,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"def get_locations(warehouse,target='@'):\n",
|
|
" return list(zip(*np.where(warehouse==target)))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 167,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"False"
|
|
]
|
|
},
|
|
"execution_count": 167,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"can_move(get_locations(warehouse)[0],'<',warehouse)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "pdf",
|
|
"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.12.7"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|