# Advent of Code template by @MathisHammel # TODO # - Make a snapshot of the file when a submission is correct # - Display the rank when submission is accepted # - Utility function to rotate/flip a 2D array # - Cycle length detector/extrapolator to make loops faster # - Put examples in cache # - Warning if DAY is not the current day import os import requests from aoc_secrets import AOC_COOKIE # Put your session cookie in this variable YEAR = '2024' def get_input(day): cache_file = f'inputs/day{day}.txt' if os.path.isfile(cache_file): print('Reading from cache file') return open(cache_file).read() print('Fetching from the web') req = requests.get(f'https://adventofcode.com/{YEAR}/day/{day}/input', headers={'cookie':'session='+AOC_COOKIE}) if "Please don't repeatedly request" in req.text: print('Error: Problem not open yet.') return None with open(cache_file, 'w') as fo: fo.write(req.text) return req.text def get_example(day, offset=0): req = requests.get(f'https://adventofcode.com/{YEAR}/day/{day}', headers={'cookie':'session='+AOC_COOKIE}) return req.text.split('
')[offset+1].split('')[0].replace('','').replace('','').replace('>', '>').replace('<', '<')
def submit(day, answer, level=1, skip_confirm=False):
if not skip_confirm:
input(f'You are about to submit the follwing answer:\n>>>>>>>>>>>>>>>>> {answer}\nPress enter to continue or Ctrl+C to abort.')
data = {
'level': str(level),
'answer': str(answer)
}
response = requests.post(f'https://adventofcode.com/{YEAR}/day/{day}/answer', headers={'cookie':'session='+AOC_COOKIE}, data=data)
if 'You gave an answer too recently' in response.text:
print('VERDICT : TOO MANY REQUESTS')
elif 'not the right answer' in response.text:
if 'too low' in response.text:
print('VERDICT : WRONG (TOO LOW)')
elif 'too high' in response.text:
print('VERDICT : WRONG (TOO HIGH)')
else:
print('VERDICT : WRONG (UNKNOWN)')
elif 'seem to be solving the right level.' in response.text:
print('VERDICT : INVALID LEVEL')
if level == 1:
print('Retrying on level 2')
submit(day, 2, answer, skip_confirm=True)
else:
print('Retrying on next day')
submit(day + 1, 1, answer, skip_confirm=True)
else:
print('VERDICT : OK !')
def ints(s):
return list(map(int, s.split()))
DIR4 = ((-1, 0), (0, 1), (1, 0), (0, -1)) #Clockwise URDL
DIR8 = ((-1,0), (-1,1), (0,1), (1,1), (1,0), (1,-1), (0,-1), (-1,-1)) # Clockwise from U
# Assembler interpreter
'''
prog = s.splitlines()
pc = 0
regs = []
while 0 <= pc < len(prog):
op = prog[pc]
if op == 1:
...
elif op == 2:
...
else:
assert False
pc += 1
'''
# Graphs
'''
import networkx as nx
G = nx.Graph()
# G.add_edge(5, 1)
nx.shortest_path(G, 1, 5)
'''
'''^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^'''
DAY = 0/0
s = get_input(DAY)
#s = get_example(DAY)
import collections
import math
ans = 0
ls = s.splitlines()
#for l in ls:
submit(DAY, ans)