diff --git a/solutions/10/README.md b/solutions/10/README.md new file mode 100644 index 0000000..c37adf0 --- /dev/null +++ b/solutions/10/README.md @@ -0,0 +1,11 @@ +# 10 + +The first one is really easy. Just sort, make the diff and count. + +
+ Solutions +
    +
  1. 2475
  2. +
  3. 442136281481216
  4. +
+
diff --git a/solutions/10/data.txt b/solutions/10/data.txt new file mode 100644 index 0000000..de682dd --- /dev/null +++ b/solutions/10/data.txt @@ -0,0 +1,107 @@ +48 +171 +156 +51 +26 +6 +80 +62 +65 +82 +130 +97 +49 +31 +142 +83 +75 +20 +154 +119 +56 +114 +92 +33 +140 +74 +118 +1 +96 +44 +128 +134 +121 +64 +158 +27 +17 +101 +59 +12 +89 +88 +145 +167 +11 +3 +39 +43 +105 +16 +170 +63 +111 +2 +108 +21 +146 +77 +45 +52 +32 +127 +147 +76 +58 +37 +86 +129 +57 +133 +120 +163 +138 +161 +139 +71 +9 +141 +168 +164 +124 +157 +95 +25 +38 +69 +87 +155 +135 +15 +102 +70 +34 +42 +24 +50 +68 +169 +10 +55 +117 +30 +81 +151 +100 +162 +148 diff --git a/solutions/10/medium.txt b/solutions/10/medium.txt new file mode 100644 index 0000000..be5c492 --- /dev/null +++ b/solutions/10/medium.txt @@ -0,0 +1,31 @@ +28 +33 +18 +42 +31 +14 +46 +20 +48 +47 +24 +23 +49 +45 +19 +38 +39 +11 +1 +32 +25 +35 +8 +17 +7 +9 +4 +2 +34 +10 +3 \ No newline at end of file diff --git a/solutions/10/python/main.py b/solutions/10/python/main.py new file mode 100644 index 0000000..af3dc94 --- /dev/null +++ b/solutions/10/python/main.py @@ -0,0 +1,54 @@ +from os.path import join, dirname +from typing import List, Optional, Set, Tuple +from itertools import combinations, count +from math import floor, prod + + +def parse(s: str) -> List[int]: + numbers: List[int] = sorted(map(int, s.strip().split('\n'))) + numbers.insert(0, 0) # The wall + numbers.append(numbers[-1] + 3) # Phone itself + return numbers + + +def diff(l: List[int]) -> List[int]: + return [ + l[x] - l[x-1] + for x in range(1, len(l)) + ] + + +def calc(d: List[int]) -> int: + one = d.count(1) + three = d.count(3) + return one * three + + +def find_valid_permutations(d: List[int]) -> int: + i = 0 + l = len(d) + slices: List[int] = [] + while i < l: + if d[i] != 3: + try: + n = d.index(3, i + 1) # Find the next three + diff = n - i + if diff > 1: + slices.append(diff) + i = n + continue + except: + pass + i += 1 + return prod([ + 2**(s-1) - floor(s/4) + for s in slices + ]) + + +data = join(dirname(__file__), '../data.txt') +with open(data) as f: + numbers: List[int] = parse(f.read()) + d = diff(numbers) + print(calc(d)) + print(find_valid_permutations(d)) diff --git a/solutions/10/test.txt b/solutions/10/test.txt new file mode 100644 index 0000000..cd1b40b --- /dev/null +++ b/solutions/10/test.txt @@ -0,0 +1,11 @@ +16 +10 +15 +5 +1 +11 +7 +19 +6 +12 +4 \ No newline at end of file