Browse Source

Manual day 23

master
Chris Smith 6 years ago
parent
commit
2bbc7480cc
2 changed files with 81 additions and 0 deletions
  1. 49
    0
      23.py
  2. 32
    0
      data/23.txt

+ 49
- 0
23.py View File

@@ -0,0 +1,49 @@
1
+def part_one():
2
+    # Part one: manually translated to Python
3
+    mul, a, b, c, d, e, f, g, h = 0, 0, 84, 84, 0, 0, 0, 0 , 0                  # set b 84
4
+                                                                                # set c b
5
+    if a != 0:                                                                  # jnz a 2
6
+                                                                                # jnz 1 5
7
+        b *= 100
8
+        mul += 1                                                                # mul b 100
9
+        b += 100000                                                             # sub b -100000
10
+        c = b                                                                   # set c b
11
+        c += 17000                                                              # sub c -17000
12
+
13
+    while True:
14
+        f = 1                                                                   # set f 1
15
+        d = 2                                                                   # set d 2
16
+        while True:
17
+            e = 2                                                               # set e 2
18
+            while True:
19
+                g = d                                                           # set g d
20
+                g *= e
21
+                mul += 1                                                        # mul g e
22
+                g -= b                                                          # sub g b
23
+                if g == 0:                                                      # jnz g 2
24
+                    f = 0                                                       # set f 0
25
+                e += 1                                                          # sub e -1
26
+                g = e                                                           # set g e
27
+                g -= b                                                          # sub g b
28
+                if g == 0: break                                                # jnz g -8
29
+            d += 1                                                              # sub d -1
30
+            g = d                                                               # set g d
31
+            g -= b                                                              # sub g b
32
+            if g == 0: break                                                    # jnz g -13
33
+        if f == 0:                                                              # jnz f 2
34
+            h += 1                                                              # sub h -1
35
+        g = b                                                                   # set g b
36
+        g -= c                                                                  # sub g c
37
+        if g == 0: break                                                        # jnz g 2
38
+                                                                                # jnz 1 3
39
+        b += 17                                                                 # sub b -17
40
+                                                                                # jnz 1 -23
41
+    return mul
42
+
43
+
44
+def part_two():
45
+    # Part two: manually optimised and a little golfed... Turns out it's counting non-primes in a certain range.
46
+    return sum(1 for b in range(108400, 125401, 17) if any(b % d == 0 for d in range(2, int(b**0.5)+1)))
47
+
48
+print(f'Part one: {part_one()}')
49
+print(f'Part two: {part_two()}')

+ 32
- 0
data/23.txt View File

@@ -0,0 +1,32 @@
1
+set b 84
2
+set c b
3
+jnz a 2
4
+jnz 1 5
5
+mul b 100
6
+sub b -100000
7
+set c b
8
+sub c -17000
9
+set f 1
10
+set d 2
11
+set e 2
12
+set g d
13
+mul g e
14
+sub g b
15
+jnz g 2
16
+set f 0
17
+sub e -1
18
+set g e
19
+sub g b
20
+jnz g -8
21
+sub d -1
22
+set g d
23
+sub g b
24
+jnz g -13
25
+jnz f 2
26
+sub h -1
27
+set g b
28
+sub g c
29
+jnz g 2
30
+jnz 1 3
31
+sub b -17
32
+jnz 1 -23

Loading…
Cancel
Save