aboutsummaryrefslogtreecommitdiffstats
path: root/day06/solution.nim
diff options
context:
space:
mode:
Diffstat (limited to 'day06/solution.nim')
-rw-r--r--day06/solution.nim39
1 files changed, 39 insertions, 0 deletions
diff --git a/day06/solution.nim b/day06/solution.nim
new file mode 100644
index 0000000..ce3ccd0
--- /dev/null
+++ b/day06/solution.nim
@@ -0,0 +1,39 @@
1import std/strutils
2import std/sequtils
3import std/tables
4
5proc solve(message: string, nUniq: int): int =
6 var cntUniq = initCountTable[char]()
7
8 # init found
9 var uniq = 0
10 for c in message[0 ..< nUniq]:
11 cntUniq.inc(c)
12 if cntUniq[c] == 1:
13 uniq += 1
14
15 let pairs = zip(
16 message[0 ..< message.len()-nUniq],
17 message[nUniq ..< message.len()])
18
19 for i, pair in pairs:
20 if uniq == nUniq:
21 return i+nUniq
22
23 cntUniq.inc(pair[0], -1)
24 if cntUniq[pair[0]] == 0:
25 # we lost one uniq number in sequence
26 uniq -= 1
27
28 cntUniq.inc(pair[1])
29 if cntUniq[pair[1]] == 1:
30 # we found new uniq number in sequence
31 uniq += 1
32
33 assert(false)
34 return -1
35
36let content = readFile("./input.txt").strip()
37
38echo solve(content, 4)
39echo solve(content, 14)