Solve AOC Day 2.2
This commit is contained in:
@@ -1,12 +1,19 @@
|
||||
(defun countChar [char str]
|
||||
(count (str.split "") (lambda [c] ?(= c char))))
|
||||
|
||||
(defun parsePasswordCheck [:String ruleStr]
|
||||
(defun parsePasswordCheck1 [:String ruleStr]
|
||||
(let [[min max letter]
|
||||
(.split (ruleStr.replace " " "-") "-")]
|
||||
(lambda [password] (<= (Std.parseInt min) (countChar letter password) (Std.parseInt max)))))
|
||||
|
||||
(defun validateInputLine [:String line]
|
||||
(defun parsePasswordCheck2 [:String ruleStr]
|
||||
(let [[a b letter]
|
||||
(.split (ruleStr.replace " " "-") "-")
|
||||
aIdx (- (Std.parseInt a) 1)
|
||||
bIdx (- (Std.parseInt b) 1)]
|
||||
(lambda [password] (= 1 (countChar letter (+ (.charAt password aIdx) (.charAt password bIdx)))))))
|
||||
|
||||
(defun validateInputLine [:String line ruleParser]
|
||||
(let [[rule password]
|
||||
(line.split ": ")]
|
||||
((parsePasswordCheck rule) password)))
|
||||
((ruleParser rule) password)))
|
@@ -14,14 +14,22 @@
|
||||
(throw "trioWithSum is broken")))
|
||||
|
||||
// Day 2
|
||||
(unless (Passwords.validateInputLine "1-3 a: abcde")
|
||||
(throw "validateInputLine is broken"))
|
||||
(when (Passwords.validateInputLine "1-3 b: cdefg")
|
||||
(throw "validateInputLine is broken"))
|
||||
(unless (Passwords.validateInputLine "2-9 c: ccccccccc")
|
||||
(throw "validateInputLine is broken"))
|
||||
(print (map (Util.readLines "src/year2020/inputs/day2-1.txt") Passwords.validateInputLine))
|
||||
)
|
||||
(unless (Passwords.validateInputLine "1-3 a: abcde" Passwords.parsePasswordCheck1)
|
||||
(throw "parsePasswordCheck1 is broken"))
|
||||
(when (Passwords.validateInputLine "1-3 b: cdefg" Passwords.parsePasswordCheck1)
|
||||
(throw "parsePasswordCheck1 is broken"))
|
||||
(unless (Passwords.validateInputLine "2-9 c: ccccccccc" Passwords.parsePasswordCheck1)
|
||||
(throw "parsePasswordCheck1 is broken"))
|
||||
(unless (= 655 (count (map (Util.readLines "src/year2020/inputs/day2-1.txt") (.bind Passwords.validateInputLine _ Passwords.parsePasswordCheck1)) (lambda [v] v)))
|
||||
(throw "parsePasswordCheck1 is broken"))
|
||||
(unless (Passwords.validateInputLine "1-3 a: abcde" Passwords.parsePasswordCheck2)
|
||||
(throw "parsePasswordCheck2 is broken"))
|
||||
(when (Passwords.validateInputLine "1-3 b: cdefg" Passwords.parsePasswordCheck2)
|
||||
(throw "parsePasswordCheck2 is broken"))
|
||||
(when (Passwords.validateInputLine "2-9 c: ccccccccc" Passwords.parsePasswordCheck2)
|
||||
(throw "parsePasswordCheck2 is broken"))
|
||||
(unless (= 673 (count (map (Util.readLines "src/year2020/inputs/day2-1.txt") (.bind Passwords.validateInputLine _ Passwords.parsePasswordCheck2)) (lambda [v] v)))
|
||||
(throw "parsePasswordCheck2 is broken")))
|
||||
|
||||
(defun :kiss.List<Int> pairWithSum [sum :kiss.List<Int> numbers]
|
||||
// Put the numbers in a map for random access. This gives an O(n) solution
|
||||
|
@@ -50,7 +50,7 @@ class Kiss {
|
||||
// Helpful aliases
|
||||
k.defAlias("print", Symbol("Prelude.print"));
|
||||
k.defAlias("map", Symbol("Lambda.map"));
|
||||
k.defAlias("filter", Symbol("Lambda.filter"));
|
||||
k.defAlias("filter", Symbol("Lambda.filter")); // TODO use truthy as the default filter function
|
||||
k.defAlias("has", Symbol("Lambda.has"));
|
||||
k.defAlias("count", Symbol("Lambda.count"));
|
||||
|
||||
|
Reference in New Issue
Block a user