try 2015 again
This commit is contained in:
parent
a172a101ab
commit
89a2e56002
@ -1,15 +1,19 @@
|
|||||||
import shared
|
import shared
|
||||||
import matrix
|
import matrix
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
|
|
||||||
def pt1(inp):
|
def part1(inp):
|
||||||
print(inp)
|
print(x)
|
||||||
|
for i in inp:
|
||||||
|
instruction, destination = i.split(" -> ")
|
||||||
|
print(instruction, destination)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
with open(shared.get_fname(7), "r") as f:
|
with open(shared.get_fname(7), "r") as f:
|
||||||
inp = [x.rstrip() for x in f.readlines()]
|
inp = [x.rstrip() for x in f.readlines()]
|
||||||
pt1(inp)
|
part1(inp)
|
||||||
#pt2(inp)
|
#pt2(inp)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
56
2015/python/day07.py
Normal file
56
2015/python/day07.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import shared
|
||||||
|
import matrix
|
||||||
|
from pprint import pprint
|
||||||
|
import numpy as np
|
||||||
|
import operator
|
||||||
|
|
||||||
|
OPS = {
|
||||||
|
'AND': operator.and_,
|
||||||
|
'OR': operator.or_,
|
||||||
|
'LSHIFT': operator.lshift,
|
||||||
|
'RSHIFT': operator.rshift,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def NOT(x):
|
||||||
|
return int(x) ^ 65535
|
||||||
|
|
||||||
|
|
||||||
|
def pt1(inp):
|
||||||
|
print(inp)
|
||||||
|
registers = {}
|
||||||
|
for i in inp:
|
||||||
|
inst, dest = i.split(" -> ")
|
||||||
|
if " " not in inst:
|
||||||
|
registers[dest] = inst
|
||||||
|
continue
|
||||||
|
inst = inst.split()
|
||||||
|
if inst[0] == "NOT":
|
||||||
|
registers[dest] = NOT(registers[inst[1]])
|
||||||
|
continue
|
||||||
|
a,op,b = inst
|
||||||
|
try:
|
||||||
|
a = int(a)
|
||||||
|
except ValueError:
|
||||||
|
a = int(registers[a])
|
||||||
|
try:
|
||||||
|
b = int(b)
|
||||||
|
except ValueError:
|
||||||
|
b = int(registers[b])
|
||||||
|
print(a,b)
|
||||||
|
registers[dest] = OPS[op](a,b)
|
||||||
|
|
||||||
|
#x,op,y = inst.split(" ")
|
||||||
|
|
||||||
|
|
||||||
|
pprint(registers)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with open(shared.get_fname(7), "r") as f:
|
||||||
|
inp = [x.rstrip() for x in f.readlines()]
|
||||||
|
pt1(inp)
|
||||||
|
#pt2(inp)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
161
2015/python/shared.py
Normal file
161
2015/python/shared.py
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
from contextlib import contextmanager
|
||||||
|
from timeit import default_timer
|
||||||
|
from pathlib import Path
|
||||||
|
import cProfile
|
||||||
|
import functools
|
||||||
|
import pstats
|
||||||
|
|
||||||
|
|
||||||
|
def profile(func):
|
||||||
|
@functools.wraps(func)
|
||||||
|
def inner(*args, **kwargs):
|
||||||
|
profiler = cProfile.Profile()
|
||||||
|
profiler.enable()
|
||||||
|
try:
|
||||||
|
retval = func(*args, **kwargs)
|
||||||
|
finally:
|
||||||
|
profiler.disable()
|
||||||
|
with open("profile.out", "w") as profile_file:
|
||||||
|
stats = pstats.Stats(profiler, stream=profile_file)
|
||||||
|
stats.print_stats()
|
||||||
|
return retval
|
||||||
|
|
||||||
|
return inner
|
||||||
|
|
||||||
|
|
||||||
|
spl = lambda y: [int(w) for w in y]
|
||||||
|
|
||||||
|
|
||||||
|
def minmax(l):
|
||||||
|
return min(l), max(l)
|
||||||
|
|
||||||
|
|
||||||
|
def load_rows(day):
|
||||||
|
return [row for row in load(day)]
|
||||||
|
|
||||||
|
|
||||||
|
def load(day):
|
||||||
|
path = Path(get_fname(day))
|
||||||
|
return path.read_text().rstrip().split("\n")
|
||||||
|
|
||||||
|
|
||||||
|
def get_fname(day: int) -> str:
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if sys.argv[-1] == "--sample":
|
||||||
|
return f"../samples/day{day:02}.txt"
|
||||||
|
else:
|
||||||
|
return f"../full/day{day:02}.txt"
|
||||||
|
|
||||||
|
|
||||||
|
#############
|
||||||
|
def load_char_matrix(f):
|
||||||
|
my_file = []
|
||||||
|
for line in f:
|
||||||
|
my_file.append(line.rstrip())
|
||||||
|
return [list(x) for x in my_file]
|
||||||
|
|
||||||
|
|
||||||
|
def load_file_char_matrix(name):
|
||||||
|
with open(name, "r") as f:
|
||||||
|
return load_char_matrix(f)
|
||||||
|
|
||||||
|
|
||||||
|
def load_int_matrix(f):
|
||||||
|
my_file = []
|
||||||
|
for line in f:
|
||||||
|
my_file.append(line.rstrip())
|
||||||
|
return [list(map(int, x)) for x in my_file]
|
||||||
|
|
||||||
|
|
||||||
|
def load_file_int_matrix(name):
|
||||||
|
with open(name, "r") as f:
|
||||||
|
return load_int_matrix(f)
|
||||||
|
|
||||||
|
|
||||||
|
def load_word_matrix(f):
|
||||||
|
my_file = []
|
||||||
|
for line in f:
|
||||||
|
my_file.append(line.rstrip())
|
||||||
|
return [x.split(" ") for x in my_file]
|
||||||
|
|
||||||
|
|
||||||
|
def load_file_word_matrix(name):
|
||||||
|
with open(name, "r") as f:
|
||||||
|
return load_word_matrix(f)
|
||||||
|
|
||||||
|
|
||||||
|
#############
|
||||||
|
|
||||||
|
|
||||||
|
def rotate(WHAT, times=1):
|
||||||
|
what = WHAT
|
||||||
|
for x in range(times):
|
||||||
|
what = list(zip(*what[::-1]))
|
||||||
|
return what
|
||||||
|
|
||||||
|
|
||||||
|
@contextmanager
|
||||||
|
def elapsed_timer():
|
||||||
|
start = default_timer()
|
||||||
|
elapser = lambda: default_timer() - start
|
||||||
|
yield lambda: elapser()
|
||||||
|
end = default_timer()
|
||||||
|
elapser = lambda: end - start
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def render_cubes(maxX,maxY,maxZ, my_cubes):
|
||||||
|
from mpl_toolkits.mplot3d import Axes3D
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from mpl_toolkits.mplot3d.art3d import Poly3DCollection
|
||||||
|
|
||||||
|
def cuboid_data(o, size=(1,1,1)):
|
||||||
|
X = [[[0, 1, 0], [0, 0, 0], [1, 0, 0], [1, 1, 0]],
|
||||||
|
[[0, 0, 0], [0, 0, 1], [1, 0, 1], [1, 0, 0]],
|
||||||
|
[[1, 0, 1], [1, 0, 0], [1, 1, 0], [1, 1, 1]],
|
||||||
|
[[0, 0, 1], [0, 0, 0], [0, 1, 0], [0, 1, 1]],
|
||||||
|
[[0, 1, 0], [0, 1, 1], [1, 1, 1], [1, 1, 0]],
|
||||||
|
[[0, 1, 1], [0, 0, 1], [1, 0, 1], [1, 1, 1]]]
|
||||||
|
X = np.array(X).astype(float)
|
||||||
|
for i in range(3):
|
||||||
|
X[:,:,i] *= size[i]
|
||||||
|
X += np.array(o)
|
||||||
|
return X
|
||||||
|
|
||||||
|
def plotCubeAt(positions,sizes=None,colors=None, **kwargs):
|
||||||
|
if not isinstance(colors,(list,np.ndarray)): colors=["C0"]*len(positions)
|
||||||
|
if not isinstance(sizes,(list,np.ndarray)): sizes=[(1,1,1)]*len(positions)
|
||||||
|
g = []
|
||||||
|
for p,s,c in zip(positions,sizes,colors):
|
||||||
|
g.append( cuboid_data(p, size=s) )
|
||||||
|
return Poly3DCollection(np.concatenate(g),
|
||||||
|
facecolors=np.repeat(colors,6, axis=0), **kwargs)
|
||||||
|
|
||||||
|
N1 = maxX
|
||||||
|
N2 = maxY
|
||||||
|
N3 = maxZ
|
||||||
|
ma = np.random.choice([0,1], size=(N1,N2,N3), p=[0.99, 0.01])
|
||||||
|
x,y,z = np.indices((N1,N2,N3))-.5
|
||||||
|
#positions = np.c_[x[ma==1],y[ma==1],z[ma==1]]
|
||||||
|
positions = np.c_[my_cubes]
|
||||||
|
colors= np.random.rand(len(positions),3)
|
||||||
|
|
||||||
|
fig = plt.figure()
|
||||||
|
ax = fig.add_subplot(projection='3d')
|
||||||
|
ax.set_aspect('equal')
|
||||||
|
|
||||||
|
pc = plotCubeAt(positions, colors=colors,edgecolor="k")
|
||||||
|
ax.add_collection3d(pc)
|
||||||
|
|
||||||
|
ax.set_xlim([0,maxX])
|
||||||
|
ax.set_ylim([0,maxY])
|
||||||
|
ax.set_zlim([0,maxZ])
|
||||||
|
#plotMatrix(ax, ma)
|
||||||
|
#ax.voxels(ma, edgecolor="k")
|
||||||
|
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
def get_fname(day: int) -> str:
|
|
||||||
import sys
|
|
||||||
|
|
||||||
if sys.argv[-1] == "--sample":
|
|
||||||
return f"samples/day{day:02}.txt"
|
|
||||||
else:
|
|
||||||
return f"full/day{day:02}.txt"
|
|
||||||
|
|
||||||
|
|
||||||
def load_file_char_matrix(name):
|
|
||||||
with open(name, "r") as f:
|
|
||||||
my_file = []
|
|
||||||
for line in f:
|
|
||||||
my_file.append(line.rstrip())
|
|
||||||
return [list(x) for x in my_file]
|
|
||||||
|
|
||||||
|
|
||||||
def load_file_int_matrix(name):
|
|
||||||
with open(name, "r") as f:
|
|
||||||
my_file = []
|
|
||||||
for line in f:
|
|
||||||
my_file.append(line.rstrip())
|
|
||||||
return [list(map(int, x)) for x in my_file]
|
|
||||||
|
|
||||||
|
|
||||||
def load_file_word_matrix(name):
|
|
||||||
with open(name, "r") as f:
|
|
||||||
my_file = []
|
|
||||||
for line in f:
|
|
||||||
my_file.append(line.rstrip())
|
|
||||||
return [x.split(" ") for x in my_file]
|
|
0
2022/full/day19.txt
Normal file
0
2022/full/day19.txt
Normal file
27
2022/python/day19.py
Normal file
27
2022/python/day19.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import matrix
|
||||||
|
import shared
|
||||||
|
import itertools
|
||||||
|
import functools
|
||||||
|
|
||||||
|
# @shared.profile
|
||||||
|
def part1(rows):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# @shared.profile
|
||||||
|
def part2(rows):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
rows = [row for row in shared.load_rows(19)]
|
||||||
|
with shared.elapsed_timer() as elapsed:
|
||||||
|
part1(rows)
|
||||||
|
print("🕒", elapsed())
|
||||||
|
with shared.elapsed_timer() as elapsed:
|
||||||
|
part2(rows)
|
||||||
|
print("🕒", elapsed())
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
0
2022/samples/day19.txt
Normal file
0
2022/samples/day19.txt
Normal file
Loading…
Reference in New Issue
Block a user