aboutsummaryrefslogtreecommitdiff
path: root/2020
diff options
context:
space:
mode:
Diffstat (limited to '2020')
-rw-r--r--2020/twoFancy.nim70
1 files changed, 70 insertions, 0 deletions
diff --git a/2020/twoFancy.nim b/2020/twoFancy.nim
new file mode 100644
index 0000000..a16ef06
--- /dev/null
+++ b/2020/twoFancy.nim
@@ -0,0 +1,70 @@
+import os, strutils, terminal
+
+let input = paramStr(1)
+var unofficial, official: string
+var unofficialCount, officialCount: int = 0
+var length: int = 20
+
+for line in lines(input):
+ var frequency: int = 0
+ var unofficialPass, officialPass, unofficialValidity, officialValidity: string
+ let
+ entry: seq[string] = split(line, {'-', ' ', ':'})
+ min: int = parseInt(entry[0])
+ max: int = parseInt(entry[1])
+ letter: char = entry[2][0]
+ pass: string = entry[4]
+
+ if len(pass) > length:
+ length = len(pass)
+
+ for char in pass:
+ if char == letter:
+ inc(frequency)
+ if frequency < min:
+ unofficialPass.add(ansiForegroundColorCode(fgBlue) & $char)
+ elif char == letter and frequency > max:
+ unofficialPass.add(ansiForegroundColorCode(fgRed) & $char)
+ else:
+ unofficialPass.add(ansiForegroundColorCode(fgGreen) & $char)
+ else:
+ unofficialPass.add(ansiForegroundColorCode(fgDefault) & $char)
+ unofficialPass.add(ansiForegroundColorCode(fgDefault))
+ if min <= frequency and frequency <= max:
+ inc(unofficialCount)
+ unofficialValidity = ansiForegroundColorCode(fgGreen) & "VALID (" & $frequency & ")" & ansiForegroundColorCode(fgDefault)
+ elif frequency < min:
+ unofficialValidity = ansiForegroundColorCode(fgBlue) & "TOO FEW (" & $frequency & " < " & $min & ")" & ansiForegroundColorCode(fgDefault)
+ elif frequency > max:
+ unofficialValidity = ansiForegroundColorCode(fgRed) & "TOO MANY (" & $frequency & " > " & $max & ")" & ansiForegroundColorCode(fgDefault)
+
+ for i in 0..len(pass)-1:
+ if i == min-1:
+ if pass[min-1] == letter:
+ officialPass.add(ansiForegroundColorCode(fgGreen))
+ else:
+ officialPass.add(ansiForegroundColorCode(fgRed))
+ elif i == max-1:
+ if pass[max-1] == letter:
+ officialPass.add(ansiForegroundColorCode(fgGreen))
+ else:
+ officialPass.add(ansiForegroundColorCode(fgRed))
+ else:
+ officialPass.add(ansiForegroundColorCode(fgDefault))
+ officialPass.add(pass[i])
+ if pass[min-1] == letter xor pass[max-1] == letter:
+ inc(officialCount)
+ officialValidity = ansiForegroundColorCode(fgGreen) & "VALID (XOR)" & ansiForegroundColorCode(fgDefault)
+ elif pass[min-1] == letter and pass[max-1] == letter:
+ officialValidity = ansiForegroundColorCode(fgRed) & "INVALID (AND)" & ansiForegroundColorCode(fgDefault)
+ else:
+ officialValidity = ansiForegroundColorCode(fgBlue) & "INVALID (NOT)" & ansiForegroundColorCode(fgDefault)
+
+ unofficial.add(alignLeft($min & "-" & $max, 6) & ansiStyleCode(1) & $letter & ansiStyleCode(0) & ": " & unofficialPass & repeat(" ", length+2 - len(pass)) & ansiStyleCode(1) & unofficialValidity & ansiStyleCode(0) & "\n")
+ official.add(alignLeft($min & "-" & $max, 6) & ansiStyleCode(1) & $letter & ansiStyleCode(0) & ": " & unofficialPass & repeat(" ", length+2 - len(pass)) & ansiStyleCode(1) & officialValidity & ansiStyleCode(0) & "\n")
+
+unofficial.add("TOTAL VALID PASSWORDS (The Sled Rental Place Down The Street Policy): " & $unofficialCount & "\n")
+official.add("TOTAL VALID PASSWORDS (The Official Toboggan Corporate Policy): " & $officialCount)
+
+echo unofficial
+echo official