eh bored again
This commit is contained in:
parent
4960ab9dfe
commit
8566841ccc
|
@ -1,12 +1,13 @@
|
||||||
list = File.read!("input.txt")
|
list = File.read!("input.txt")
|
||||||
|> String.split("\n")
|
|> String.split(~r/\R/)
|
||||||
|> Enum.map(&String.to_integer/1)
|
|> Enum.map(&String.to_integer/1)
|
||||||
|
|
||||||
ans1 = list
|
ans1 = list
|
||||||
|> Enum.sum()
|
|> Enum.sum()
|
||||||
IO.puts(ans1)
|
IO.puts(ans1)
|
||||||
|
|
||||||
reducer = fn i, {current, seen} -> frequency = current + i
|
reducer = fn i, {current, seen} ->
|
||||||
|
frequency = current + i
|
||||||
if MapSet.member?(seen, frequency) do
|
if MapSet.member?(seen, frequency) do
|
||||||
{:halt, frequency}
|
{:halt, frequency}
|
||||||
else
|
else
|
||||||
|
|
45
2018/01/01.py
Normal file
45
2018/01/01.py
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
with open("input.txt") as f:
|
||||||
|
lines = f.read().splitlines()
|
||||||
|
|
||||||
|
freqs = [int(line) for line in lines]
|
||||||
|
print("Part 1:", sum(freqs))
|
||||||
|
|
||||||
|
## what follows is a O(n log n) solution using modulos to avoid cycling manually.
|
||||||
|
## personally i just did it in elixir with Stream.cycle()...
|
||||||
|
|
||||||
|
from itertools import accumulate
|
||||||
|
sums = [0] + list(accumulate(freqs))
|
||||||
|
seen = set()
|
||||||
|
|
||||||
|
# check first cycle
|
||||||
|
for s in sums:
|
||||||
|
if s in seen:
|
||||||
|
ans2 = s
|
||||||
|
seen.add(s)
|
||||||
|
|
||||||
|
# check if last element is 0 (can't do mod 0)
|
||||||
|
tail = sums[-1]
|
||||||
|
if tail == 0:
|
||||||
|
ans2 = 0
|
||||||
|
|
||||||
|
# calculate mapping of all mods and indexes
|
||||||
|
sums = sums[:-1] # the last sum is part of the next iteration -- we start at 0
|
||||||
|
from collections import defaultdict
|
||||||
|
mods = defaultdict(list)
|
||||||
|
for i, s in enumerate(sums):
|
||||||
|
mods[s % tail].append((i,s))
|
||||||
|
|
||||||
|
mini, mind, minf = None, None, None
|
||||||
|
for m in mods.values():
|
||||||
|
ss = list(sorted(m, key = lambda t: t[1])) # sort by second element of tuple
|
||||||
|
for i in range(1,len(ss)):
|
||||||
|
diff = ss[i][1] - ss[i-1][1]
|
||||||
|
index = ss[i-1][0] if tail > 0 else ss[i][0]
|
||||||
|
freq = ss[i][1] if tail > 0 else ss[i-1][1]
|
||||||
|
if mind is None or diff < mind or (diff == mind and index < mini):
|
||||||
|
mini = index
|
||||||
|
mind = diff
|
||||||
|
minf = freq
|
||||||
|
|
||||||
|
ans2 = minf
|
||||||
|
print("Part 2:", ans2)
|
26
2018/03/03.py
Normal file
26
2018/03/03.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
with open("input.txt") as f:
|
||||||
|
lines = f.read().splitlines()
|
||||||
|
|
||||||
|
import re
|
||||||
|
claims = [[*map(int, re.findall(r'\d+', line))] for line in lines]
|
||||||
|
|
||||||
|
from collections import Counter
|
||||||
|
fabric = Counter(
|
||||||
|
(i,j)
|
||||||
|
for id, x, y, width, height in claims
|
||||||
|
for i in range(x,x+width)
|
||||||
|
for j in range(y,y+height)
|
||||||
|
)
|
||||||
|
|
||||||
|
ans1 = sum(1 for c in fabric.values() if c > 1) # more than 1 claim
|
||||||
|
print("Part 1:",ans1)
|
||||||
|
|
||||||
|
ans2 = next(
|
||||||
|
id
|
||||||
|
for id, x, y, width, height in claims
|
||||||
|
if all(fabric[(i,j)] == 1
|
||||||
|
for i in range(x,x+width)
|
||||||
|
for j in range(y,y+height)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
print("Part 2:",ans2)
|
1323
2018/03/input.txt
Normal file
1323
2018/03/input.txt
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue