From 023d056bc8f639b6da378b2f3206b281b65d2918 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 15 Dec 2019 17:15:51 -0800 Subject: [PATCH] d14 (stuck) --- 2019/14.rkt | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2019/14.rktd | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 2019/14.rkt create mode 100644 2019/14.rktd diff --git a/2019/14.rkt b/2019/14.rkt new file mode 100644 index 0000000..903b01c --- /dev/null +++ b/2019/14.rkt @@ -0,0 +1,61 @@ +#lang br +(require racket/file rackunit) + +(define ore? number?) + +(define (make-reactor reax-output proc-or-ore [t (current-thread)]) + (let ([r (thread (λ () + (define reax 0) + (define reax-formula (match proc-or-ore + [(? ore? ore) ore] + [proc proc])) + (let loop ([supply 0]) + (match (thread-receive) + ['ore + (thread-send t (match reax-formula + [(? ore? ore) (* ore reax)] + [_ 0])) + (loop supply)] + ['reset + (set! reax 0) + (loop 0)] + [amt (let inner ([supply supply]) + (cond + [(< supply amt) + (set! reax (add1 reax)) + (unless (ore? reax-formula) + (reax-formula)) + (inner (+ supply reax-output))] + [else (loop (- supply amt))]))]))))]) + (λ (arg) + (thread-send r arg) + (when (eq? arg 'ore) + (thread-receive))))) + + +(define A (make-reactor 10 10)) +#|(A 7) +(A 7) +(A 7) +(A 7) +(check-eq? (A 'ore) 30) +(A 'reset) +|# + +(define B (make-reactor 1 1)) +#|(B 7) +(B 7) +(B 7) +(B 7) +(check-eq? (B 'ore) 28) +(B 'reset) +|# + +(define C (make-reactor 1 (λ () (A 7) (B 1)))) +(define D (make-reactor 1 (λ () (A 7) (C 1)))) +(define E (make-reactor 1 (λ () (A 7) (D 1)))) +(define FUEL (make-reactor 1 (λ () (A 7) (E 1)))) +(FUEL 1) +(A 'ore) +(A 'ore) +(A 'ore) \ No newline at end of file diff --git a/2019/14.rktd b/2019/14.rktd new file mode 100644 index 0000000..ecbfd9c --- /dev/null +++ b/2019/14.rktd @@ -0,0 +1,60 @@ +1 FVBHS, 29 HWPND => 4 CPXDX +5 TNWDG, 69 VZMS, 1 GXSD, 48 NCLZ, 3 RSRZ, 15 HWPND, 25 SGPK, 2 SVCQ => 1 FUEL +1 PQRLB, 1 TWPMQ => 4 QBXC +9 QBXC => 7 RNHQ +12 VZMS => 6 MGQRZ +6 QBVG, 10 XJWX => 6 BWLZ +4 MVGN => 6 BHZH +2 LKTWD => 7 FVBHS +2 BWFK => 7 TFPQ +15 VZBJ, 9 TSVN, 2 BWLZ => 2 TNWDG +10 KVFL, 2 BWLZ, 1 VGSBF => 4 KBFJV +12 TXCR, 2 JMBG => 4 DCFD +5 VMDT, 6 JKPFT, 3 RJKJD => 7 LGWM +1 LDFGW => 2 DHRBP +129 ORE => 8 LDFGW +9 DNVRJ => 8 BMNGX +7 NLPB => 6 NCLZ +1 VMDT, 6 DCFD => 9 SGRXC +1 LDFGW, 2 VRHFB => 8 QHGQC +10 VGSBF, 5 WVMG, 6 BWLZ => 3 BWFK +4 KVFL, 1 TSVN => 6 SVCQ +2 VZBJ, 3 SWJZ => 3 QZLC +5 JMBG, 1 PQRLB => 3 CJLH +13 LKTWD, 6 TFPQ => 3 WVRXR +20 QHGQC, 10 NSPVD => 5 VGSBF +5 TFPQ, 1 DHRBP, 2 KVFL => 8 NLPB +2 KBFJV, 1 CJLH, 20 RNHQ, 1 BWLZ, 13 MNBK, 1 BHZH, 1 PKRJF => 8 RSRZ +154 ORE => 2 VRHFB +2 NHRCK => 7 DNVRJ +2 VRHFB, 4 XJWX => 4 NHRCK +1 TFPQ, 12 JMBG => 5 MNBK +8 TMFS => 2 VZMS +175 ORE => 2 TMFS +1 LBZN, 2 SWJZ, 3 VGSBF => 8 BLDN +7 KFJD, 5 WVRXR, 5 RJKJD => 6 MVGN +3 RJKJD, 1 TXCR => 8 KVFL +3 QHGQC, 1 MGQRZ, 10 VGSBF => 8 LKTWD +178 ORE => 1 XJWX +1 QBXC, 1 BWFK => 6 TSVN +1 NHRCK, 2 DHRBP => 4 VZBJ +1 LDFGW, 2 NHRCK, 10 BWLZ => 8 TWPMQ +28 TWPMQ => 4 RJKJD +10 SVCQ, 1 KVFL => 6 CZNMG +3 VZMS, 3 MGQRZ => 3 WVMG +19 MGQRZ => 8 KFJD +3 WVMG => 6 PQRLB +31 SVCQ, 1 TXCR => 8 VMDT +20 KFJD, 5 CPXDX, 2 BLDN, 2 PQWJX, 12 TFPQ, 2 BHZH, 2 MVGN => 9 SGPK +7 QZLC => 8 JMBG +1 PQRLB => 1 HWPND +9 VMDT, 5 CZNMG, 3 CPXDX, 1 MVGN, 8 VSMTK, 2 SGRXC, 1 MNBK, 8 LGWM => 7 GXSD +2 NSPVD => 8 QBVG +20 CZNMG => 4 PQWJX +1 LDFGW => 4 NSPVD +16 KBFJV, 22 BLDN => 2 VSMTK +10 BWLZ => 9 LBZN +1 BWLZ => 3 SWJZ +1 HWPND => 9 TXCR +12 CJLH, 9 LGWM, 3 BHZH => 6 PKRJF +5 BMNGX => 7 JKPFT \ No newline at end of file