Skip to content

Commit 85bc114

Browse files
committed
day03 completed
1 parent fdeb536 commit 85bc114

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

2021/day03.nim

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
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

0 commit comments

Comments
 (0)