diff options
Diffstat (limited to 'prog/aoc/23')
-rwxr-xr-x | prog/aoc/23/5/1.py | 82 | ||||
-rw-r--r-- | prog/aoc/23/5/in.txt | 33 | ||||
-rwxr-xr-x | prog/aoc/23/6/1.py | 32 | ||||
-rw-r--r-- | prog/aoc/23/6/in.txt | 2 | ||||
-rwxr-xr-x | prog/aoc/23/7/1.py | 84 | ||||
-rw-r--r-- | prog/aoc/23/7/in.txt | 5 | ||||
-rwxr-xr-x | prog/aoc/23/8/1.py | 43 | ||||
-rw-r--r-- | prog/aoc/23/8/1.txt | 9 | ||||
-rw-r--r-- | prog/aoc/23/8/2.txt | 5 | ||||
-rw-r--r-- | prog/aoc/23/8/3.txt | 10 |
10 files changed, 305 insertions, 0 deletions
diff --git a/prog/aoc/23/5/1.py b/prog/aoc/23/5/1.py new file mode 100755 index 0000000..a64ee26 --- /dev/null +++ b/prog/aoc/23/5/1.py @@ -0,0 +1,82 @@ +#!/usr/bin/python3 +seeds = [] +maps = [] +from os import getenv +file = open("/root/dl/input5") +if getenv("IN") != None: + file = open("in.txt") +seeds.extend([x for x in map(int, file.readline().strip().split(": ")[1].split(" "))]) +file.readline().strip() +def read_map(): + l = file.readline() + # s = l.split("-")[0] # ne rabimo + # d = l.split("-")[2].split(" ")[0] # ne rabimo + l = file.readline() + v = [] + while l != "\n" and l != "": + v.append((int(l.strip().split(" ")[0]), int(l.strip().split(" ")[1]), int(l.strip().split(" ")[2]))) + l = file.readline() + maps.append(sorted(v, key=lambda x: x[1])) + if l == "": + return False + return True +while read_map(): + pass +def get_next_step(target, steps): # možnost izboljšave z bisekcijo + def helper(): + for index in range(len(steps)): + if index+1 == len(steps): + return steps[index] + if steps[index+1][1] > target: + return steps[index] + r = helper() + # print("r", r) + if r[1] > target: + return target + if r[1] + r[2] - 1 < target: + return target + return r[0]+target-r[1] +locations = {} +for s in seeds: + l = get_next_step(s, maps[0]) + # print("l", l) + for m in maps[1:]: + l = get_next_step(l, m) + # print("l", l) + locations[s] = l +print(min(locations.items(), key=lambda x: x[1])[1]) +from interval import interval, inf +semena = interval() +for i in range(len(seeds)//2): + semena |= interval([seeds[2*i], seeds[2*i]+seeds[2*i+1]]) +# print(semena) +def celoštevilski_komplement(intervala): + r = interval() + for i in range(len(intervala)): + if i == 0: + if intervala[i][0] == -inf: + continue + r |= interval([-inf, intervala[i][0]-1]) + if i+1 == len(intervala): + if intervala[i][1] == inf: + continue + r |= interval([intervala[i][1]+1, inf]) + if i != 0: + r |= interval([intervala[i-1][1]+1, intervala[i][0]-1]) + return r +def go_deeper(m, vhod): + r = interval() + porabljeni_sources = interval() + for m in m: + source = interval([m[1], m[1]+m[2]]) + # print("source", source, "!source", celoštevilski_komplement(source)) + # print("m", m, "source", source, "source^C", celoštevilski_komplement(source)) + r |= (source & vhod) + m[0] - m[1] + porabljeni_sources |= source + vhod &= celoštevilski_komplement(porabljeni_sources) + r |= vhod + # print("go_deeper r", r) + return r +for i in range(len(maps)): + semena = go_deeper(maps[i], semena) +print(semena[0][0]) diff --git a/prog/aoc/23/5/in.txt b/prog/aoc/23/5/in.txt new file mode 100644 index 0000000..f756727 --- /dev/null +++ b/prog/aoc/23/5/in.txt @@ -0,0 +1,33 @@ +seeds: 79 14 55 13 + +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4 diff --git a/prog/aoc/23/6/1.py b/prog/aoc/23/6/1.py new file mode 100755 index 0000000..1539b09 --- /dev/null +++ b/prog/aoc/23/6/1.py @@ -0,0 +1,32 @@ +#!/usr/bin/python3 +timestr = input().split(":")[1] +time = timestr.split(" ") +try: + while True: + time.remove("") +except: + pass +time = [x for x in map(int, time)] +distancestr = input().split(":")[1] +distance = distancestr.split(" ") +try: + while True: + distance.remove("") +except: + pass +distance = [x for x in map(int, distance)] +product = 1 +for i in range(len(time)): + ways = 0 + for j in range(time[i]): + if (time[i]-j)*j > distance[i]: + ways += 1 + product *= ways +print(product) +ways = 0 +t = int(timestr.replace(" ", "")) +d = int(distancestr.replace(" ", "")) +for j in range(t): + if (t-j)*j > d: + ways += 1 +print(ways) diff --git a/prog/aoc/23/6/in.txt b/prog/aoc/23/6/in.txt new file mode 100644 index 0000000..28f5ae9 --- /dev/null +++ b/prog/aoc/23/6/in.txt @@ -0,0 +1,2 @@ +Time: 7 15 30 +Distance: 9 40 200 diff --git a/prog/aoc/23/7/1.py b/prog/aoc/23/7/1.py new file mode 100755 index 0000000..e1d66da --- /dev/null +++ b/prog/aoc/23/7/1.py @@ -0,0 +1,84 @@ +#!/usr/bin/python3 +from functools import cmp_to_key +hands = [] +try: + while True: + hands.append(input().split(" ")) +except EOFError: + pass +alphabet = ["A", "K", "Q", "J", "T", "9", "8", "7", "6", "5", "4", "3", "2"]; +def level(a): + if len(set(a)) == 1: + return 6 + if len(set(a)) == 2: + if a.count(a[0]) == 1 or a.count(a[0]) == 4: + return 5 + return 4 + if len(set(a)) == 3: + if a.count(list(set(a))[0]) == 3 or a.count(list(set(a))[1]) == 3 or a.count(list(set(a))[2]) == 3: + return 3 + return 2 + if len(set(a)) == 5: + return 0 + return 1 +def compar(a, b): + a = a[0] + b = b[0] + if level(a) > level(b): + return 1 + if level(b) > level(a): + return -1 + for i in range(len(a)): + if alphabet.index(a[i]) < alphabet.index(b[i]): + return 1 + if alphabet.index(b[i]) < alphabet.index(a[i]): + return -1 + return 0 +hands.sort(key=cmp_to_key(compar)) +i = 1 +s = 0 +for h in hands: + print(h, level(h[0])) + s += int(h[1])*i + i += 1 +print(s) +alphabet = ["A", "K", "Q", "T", "9", "8", "7", "6", "5", "4", "3", "2", "J"]; +def level(a): + r = set(a)-set(["J"]) + if len(r) == 0 or len(r) == 1: + return 6 + if len(r) == 5: + return 0 + if len(r) == 2: + c2 = a.count("J")+a.count(list(r)[0]) + c1 = a.count("J")+a.count(list(r)[1]) + if c1 == 4 or c2 == 4: + return 5 + return 4 + if len(r) == 3: + l = a.count("J") + if l+a.count(list(set(r))[0]) == 3 or l+a.count(list(set(r))[1]) == 3 or l+a.count(list(set(r))[2]) == 3: + return 3 + return 2 + return 1 +def compar(a, b): + a = a[0] + b = b[0] + if level(a) > level(b): + return 1 + if level(b) > level(a): + return -1 + for i in range(len(a)): + if alphabet.index(a[i]) < alphabet.index(b[i]): + return 1 + if alphabet.index(b[i]) < alphabet.index(a[i]): + return -1 + return 0 +hands.sort(key=cmp_to_key(compar)) +i = 1 +s = 0 +for h in hands: + print(h, level(h[0])) + s += int(h[1])*i + i += 1 +print(s) diff --git a/prog/aoc/23/7/in.txt b/prog/aoc/23/7/in.txt new file mode 100644 index 0000000..e3500c3 --- /dev/null +++ b/prog/aoc/23/7/in.txt @@ -0,0 +1,5 @@ +32T3K 765 +T55J5 684 +KK677 28 +KTJJT 220 +QQQJA 483 diff --git a/prog/aoc/23/8/1.py b/prog/aoc/23/8/1.py new file mode 100755 index 0000000..9ff0113 --- /dev/null +++ b/prog/aoc/23/8/1.py @@ -0,0 +1,43 @@ +#!/usr/bin/python3 +inst = input() +input() +graph = {} +try: + while True: + a = input().split(" = ") + graph[a[0]] = a[1].replace("(", "").replace(")", "").split(", ") +except EOFError: + pass +cur = "AAA" +runs = 0 +while True: + for d in inst: + if cur == "ZZZ": + break + if d == "L": + cur = graph[cur][0] + else: + cur = graph[cur][1] + runs += 1 + else: + continue + break +print(runs) +r = [] +for s in [x for x in graph if x[2] == "A"]: + runs = 0 + while True: + for d in inst: + if s[2] == "Z": + break + if d == "L": + s = graph[s][0] + else: + s = graph[s][1] + runs += 1 + else: + continue + break + r.append(runs) +from math import lcm +print(lcm(*r)) diff --git a/prog/aoc/23/8/1.txt b/prog/aoc/23/8/1.txt new file mode 100644 index 0000000..9029a1b --- /dev/null +++ b/prog/aoc/23/8/1.txt @@ -0,0 +1,9 @@ +RL + +AAA = (BBB, CCC) +BBB = (DDD, EEE) +CCC = (ZZZ, GGG) +DDD = (DDD, DDD) +EEE = (EEE, EEE) +GGG = (GGG, GGG) +ZZZ = (ZZZ, ZZZ) diff --git a/prog/aoc/23/8/2.txt b/prog/aoc/23/8/2.txt new file mode 100644 index 0000000..7d1b58d --- /dev/null +++ b/prog/aoc/23/8/2.txt @@ -0,0 +1,5 @@ +LLR + +AAA = (BBB, BBB) +BBB = (AAA, ZZZ) +ZZZ = (ZZZ, ZZZ) diff --git a/prog/aoc/23/8/3.txt b/prog/aoc/23/8/3.txt new file mode 100644 index 0000000..5b3fa58 --- /dev/null +++ b/prog/aoc/23/8/3.txt @@ -0,0 +1,10 @@ +LR + +11A = (11B, XXX) +11B = (XXX, 11Z) +11Z = (11B, XXX) +22A = (22B, XXX) +22B = (22C, 22C) +22C = (22Z, 22Z) +22Z = (22B, 22B) +XXX = (XXX, XXX) |