File tree 1 file changed +86
-0
lines changed
1 file changed +86
-0
lines changed Original file line number Diff line number Diff line change
1
+ include prelude
2
+ import sugar
3
+
4
+ var
5
+ countOnes: array [12 , int ]
6
+ n: int
7
+
8
+ for line in " 2021/input03.txt" .lines:
9
+ inc n
10
+ for i, c in line:
11
+ if c == '1' :
12
+ inc countOnes[i]
13
+
14
+ echo countOnes
15
+ echo n
16
+
17
+ var gamma, epsilon: string
18
+ for k in countOnes:
19
+ if k > 500 :
20
+ gamma &= " 1"
21
+ epsilon &= " 0"
22
+ else :
23
+ gamma &= " 0"
24
+ epsilon &= " 1"
25
+
26
+ echo parseBinInt (gamma)* parseBinInt (epsilon)
27
+
28
+ # part 2
29
+ let
30
+ binNums = " 2021/input03.txt" .lines.toSeq
31
+ testNums = """
32
+ 00100
33
+ 11110
34
+ 10110
35
+ 10111
36
+ 10101
37
+ 01111
38
+ 00111
39
+ 11100
40
+ 10000
41
+ 11001
42
+ 00010
43
+ 01010 """ .splitLines.toSeq
44
+
45
+ func lifeSupport (nums: seq [string ], oxy= true ): int =
46
+ var
47
+ nums = nums # idiomatic
48
+ i = 0
49
+ zeros, ones: seq [int ]
50
+ while nums.len > 1 :
51
+ zeros = @ [] # zeros, ones = @[] does not work
52
+ ones = @ []
53
+ for j, num in nums:
54
+ if num[i] == '1' :
55
+ ones.add j
56
+ else :
57
+ zeros.add j
58
+ # dump ones
59
+ # dump zeros
60
+ if oxy:
61
+ if ones.len >= zeros.len:
62
+ nums = collect:
63
+ for j in ones:
64
+ nums[j]
65
+ else :
66
+ nums = collect:
67
+ for j in zeros:
68
+ nums[j]
69
+ else :
70
+ if zeros.len <= ones.len:
71
+ nums = collect:
72
+ for j in zeros:
73
+ nums[j]
74
+ else :
75
+ nums = collect:
76
+ for j in ones:
77
+ nums[j]
78
+ inc i
79
+ # debugEcho nums
80
+ assert nums.len == 1
81
+ return parseBinInt (nums[0 ])
82
+
83
+ func solve2 (nums: seq [string ]): int =
84
+ lifeSupport (nums)* lifeSupport (nums, false )
85
+ echo solve2 testNums
86
+ echo solve2 binNums
You can’t perform that action at this time.
0 commit comments