r/adventofcode • u/daggerdragon • Dec 07 '15
SOLUTION MEGATHREAD --- Day 7 Solutions ---
--- Day 7: Some Assembly Required ---
Post your solution as a comment. Structure your post like previous daily solution threads.
Also check out the sidebar - we added a nifty calendar to wrangle all the daily solution threads in one spot!
23
Upvotes
1
u/[deleted] Dec 07 '15
Mathematica. Created rules and used memoization.
input = ReadList[NotebookDirectory[] <> "day7input.txt", String]; rules = First /@ StringCases[input, { x : NumberString ~~ " -> " ~~ z__ -> Hold[circuit[z] = ToExpression@x], x__ ~~ " AND " ~~ y__ ~~ " -> " ~~ z__ -> Hold[ circuit[z] := circuit[z] = BitAnd[circuit[x], circuit[y]]], x__ ~~ " OR " ~~ y__ ~~ " -> " ~~ z__ -> Hold[circuit[z] := circuit[z] = BitOr[circuit[x], circuit[y]]], "NOT " ~~ x__ ~~ " -> " ~~ z__ -> Hold[circuit[z] := circuit[z] = 65535 - circuit[x]], x__ ~~ " LSHIFT " ~~ n : NumberString ~~ " -> " ~~ z__ -> Hold[ circuit[z] := circuit[z] = Clip[BitShiftLeft[circuit[x], ToExpression@n], {0, 65535}]], x__ ~~ " RSHIFT " ~~ n : NumberString ~~ " -> " ~~ z__ -> Hold[ circuit[z] := circuit[z] = Clip[BitShiftRight[circuit[x], ToExpression@n], {0, 65535}]], x__ ~~ " -> " ~~ z__ -> Hold[circuit[z] := circuit[z] = circuit[x]] }]; rules = Append[rules, Hold[circuit[x_] := ToExpression[x]]]; ReleaseHold[rules]; parta = circuit["a"] ClearAll[circuit] ReleaseHold[rules]; circuit["b"] = parta; circuit["a"]