This commit is contained in:
2020-12-01 16:34:57 -07:00
parent f033b0cf7b
commit c34956b5ea
2 changed files with 17 additions and 11 deletions

View File

@@ -1,17 +1,16 @@
(defun main []
// Day 1
// TODO implement unless
(let [p (pairWithSum 2020 [1721 979 366 299 675 1456])]
(when !(and (has p 1721) (has p 299))
(unless (and (has p 1721) (has p 299))
(throw "pairWithSum is broken")))
(let [[a b] (pairWithSum 2020 (readInts "src/year2020/inputs/day1-1.txt"))]
(when !(= 545379 (* a b))
(unless (= 545379 (* a b))
(throw "pairWithSum is broken")))
(let [t (trioWithSum 2020 [1721 979 366 299 675 1456])]
(when !(and (has t 675) (has t 366) (has t 979))
(unless (and (has t 675) (has t 366) (has t 979))
(throw "trioWithSum is broken")))
(let [[a b c] (trioWithSum 2020 (readInts "src/year2020/inputs/day1-1.txt"))]
(when !(= 257778836 (* a b c))
(unless (= 257778836 (* a b c))
(throw "trioWithSum is broken"))))
(defun readLines [file]

View File

@@ -48,13 +48,20 @@ class Macros {
macros["_eq"] = foldMacro("Prelude.areEqual");
macros["when"] = (wholeExp:ReaderExp, args:Array<ReaderExp>, k) -> {
wholeExp.checkNumArgs(2, null, "(when [condition] [body...])");
CallExp(Symbol("if").withPosOf(wholeExp), [
args[0],
function bodyIf(formName:String, negated:Bool, wholeExp:ReaderExp, args:Array<ReaderExp>, k) {
wholeExp.checkNumArgs(2, null, '($formName [condition] [body...])');
var condition = if (negated) {
CallExp(Symbol("not").withPosOf(args[0]), [args[0]]).withPosOf(args[0]);
} else {
args[0];
}
return CallExp(Symbol("if").withPosOf(wholeExp), [
condition,
CallExp(Symbol("begin").withPosOf(wholeExp), args.slice(1)).withPosOf(wholeExp)
]).withPos(args[0].pos);
};
]).withPosOf(wholeExp);
}
macros["when"] = bodyIf.bind("when", false);
macros["unless"] = bodyIf.bind("unless", true);
macros["cond"] = cond;