Compare commits

...

5 Commits

Author SHA1 Message Date
magical 831d8e4f23 day 10 python rewrite
pass around an iterator of X states instead of using a callback and
global variables.
2022-12-09 22:01:24 -08:00
magical 4ea896feeb day 10 python 2022-12-09 22:01:20 -08:00
magical 2888e82c6b day 8 ivy part 2 i think this actually works 2022-12-09 21:22:18 -08:00
magical a635d3f5db day 8 ivy part 2 wip 2022-12-09 21:21:52 -08:00
magical bfcffc614c day 8 part 2 alternate python solution
although it's shorter, i'm not sure if i like the way the count function
was factored out
2022-12-08 22:34:03 -08:00
5 changed files with 443 additions and 0 deletions

View File

@ -15,3 +15,94 @@ sample
+/, vis4 sample
+/, vis4 input
op pady a = -1, a, -1
op padx a = transp pady transp a
op pad a = pady padx a
A = pad sample
i = 3 3
d = 1 0
op i slice d =
t = A[i[1];i[2]]
t < 0: 0 rho 0
t, (i+d) slice d
A
A[3;3]
i slice d
i slice -d
op empty v = 0 == rho v
# takes from v while v[i] is less than x
op x shorter v =
empty v: v
(and\ x > v) sel v
# returns 1 if any v[i] blocks x
op x blocked v =
empty v: 0
or/ x <= v
v = 1 2 3 4 3 2 5 6 1 2 3
5 shorter v
0 shorter 1 2 3
# takes from v while v[i] is less than v[0]
op shorter2 v =
x = v[1]
v = 1 flip v
v, +/ (and\ transp x > v)
#shorter2 transp (1, rho v) rho v
#shorter2 3 3 rho flip iota 9
""
sample
"-"
op x viewDistance v = (x blocked v) + rho x shorter v
op viewDistance v = v[1] viewDistance 1 drop v
viewDistance 1 2 3
viewDistance 5 1 2 3
viewDistance 5 5
op p score A =
x = p[1]
y = p[2]
e = A[y;x]
row = A[y]
col = A[;x]
n = 1
n = n * e viewDistance flip (x-1) take row
n = n * e viewDistance x drop row
n = n * e viewDistance flip (y-1) take col
n = n * e viewDistance y drop col
n
op i loopY A =
i[2] > (rho A)[2]: 0
(i score A) max (i + 0 1) loopY A
op i loopX A =
i[1] > (rho A)[1]: 0
(i loopY A) max (i + 1 0) loopX A
op solve A = 1 1 loopX A
1 1 score sample
2 2 score sample
3 4 score sample
solve sample
1 1 score sample; 1 2 score sample; 1 3 score sample; 1 4 score sample; 1 5 score sample
2 1 score sample; 2 2 score sample; 2 3 score sample; 2 4 score sample; 2 5 score sample
solve input

29
day08/sol2b.py 100644
View File

@ -0,0 +1,29 @@
data = []
for line in open("input"):
data.append(list(map(int, line.strip())))
def count(top, ii, jj):
n = 0
for i in ii:
for j in jj:
n += 1
if data[i][j] >= top:
return n
return n
scores = []
for ii in range(len(data)):
for jj in range(len(data[ii])):
top = data[ii][jj]
a = count(top, [ii], range(jj+1, len(data[ii])))
b = count(top, [ii], reversed(range(0, jj)))
c = count(top, range(ii+1, len(data)), [jj])
d = count(top, reversed(range(0, ii)), [jj])
#print(ii,jj,a,b,c,d)
score = a*b*c*d
scores.append(score)
#print(visible)
#print(sum(sum(x) for x in visible))
print(max(scores))

138
day10/input 100644
View File

@ -0,0 +1,138 @@
addx 1
addx 5
noop
addx -1
noop
addx 3
addx 29
addx -1
addx -21
addx 5
noop
addx -20
addx 21
addx 2
addx 8
addx -1
noop
noop
noop
noop
addx 6
addx -1
addx -37
addx 40
addx -10
addx -25
addx 5
addx 2
addx 5
noop
noop
noop
addx 21
addx -20
addx 2
noop
addx 3
addx 2
addx -5
addx 12
addx 3
noop
addx 2
addx 3
addx -2
addx -37
addx 1
addx 5
addx 3
addx -2
addx 2
addx 29
addx -22
addx 13
noop
addx -8
addx -6
addx 7
addx 2
noop
addx 7
addx -2
addx 5
addx 2
addx -26
addx -11
noop
noop
addx 6
addx 1
addx 1
noop
addx 4
addx 5
noop
noop
addx -2
addx 3
noop
addx 2
addx 5
addx 2
addx -22
addx 27
addx -1
addx 1
addx 5
addx 2
noop
addx -39
addx 22
noop
addx -15
addx 3
addx -2
addx 2
addx -2
addx 9
addx 3
noop
addx 2
addx 3
addx -2
addx 2
noop
noop
noop
addx 5
addx -17
addx 24
addx -7
addx 8
addx -36
addx 2
addx 3
addx 33
addx -32
addx 4
addx 1
noop
addx 5
noop
noop
addx 20
addx -15
addx 4
noop
addx 1
noop
addx 4
addx 6
addx -30
addx 30
noop
noop
noop
noop
noop

146
day10/sample 100644
View File

@ -0,0 +1,146 @@
addx 15
addx -11
addx 6
addx -3
addx 5
addx -1
addx -8
addx 13
addx 4
noop
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx -35
addx 1
addx 24
addx -19
addx 1
addx 16
addx -11
noop
noop
addx 21
addx -15
noop
noop
addx -3
addx 9
addx 1
addx -3
addx 8
addx 1
addx 5
noop
noop
noop
noop
noop
addx -36
noop
addx 1
addx 7
noop
noop
noop
addx 2
addx 6
noop
noop
noop
noop
noop
addx 1
noop
noop
addx 7
addx 1
noop
addx -13
addx 13
addx 7
noop
addx 1
addx -33
noop
noop
noop
addx 2
noop
noop
noop
addx 8
noop
addx -1
addx 2
addx 1
noop
addx 17
addx -9
addx 1
addx 1
addx -3
addx 11
noop
noop
addx 1
noop
addx 1
noop
noop
addx -13
addx -19
addx 1
addx 3
addx 26
addx -30
addx 12
addx -1
addx 3
addx 1
noop
noop
noop
addx -9
addx 18
addx 1
addx 2
noop
noop
addx 9
noop
noop
noop
addx -1
addx 2
addx -37
addx 1
addx 3
noop
addx 15
addx -21
addx 22
addx -6
addx 1
noop
addx 2
addx 1
noop
addx -10
noop
noop
addx 20
addx 1
addx 2
addx 2
addx -6
addx -11
noop
noop
noop

39
day10/sol.py 100644
View File

@ -0,0 +1,39 @@
import itertools
import time
def run(input):
x = 1
for line in input:
ins = line.strip()
if ins == "noop":
yield x
else: # addx <num>
yield x
yield x
x += int(line.split()[1])
def signal(xs):
t = 0
for cycle, x in enumerate(xs, start=1):
if cycle % 40 == 20:
signal_strength = cycle * x
t += signal_strength
return t
def render(xs):
xs = iter(xs)
while True:
img = []
for pos, x in enumerate(itertools.islice(xs, 40)):
visible = x-1 <= pos <= x+1
img.append(' #'[visible])
if not img: return
yield ''.join(img)
xs = list(run(open("input")))
print(signal(xs))
img = render(xs)
for line in img:
print(line)
time.sleep(.1)