From 70fbb19f3ef77137f8f1e4188650d78e7c0e8415 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Wed, 25 Dec 2019 18:36:19 -0800 Subject: [PATCH] d22 p1 --- 2019/22.rkt | 55 ++++++++++++++++++++++++++++ 2019/22.rktd | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+) create mode 100644 2019/22.rkt create mode 100644 2019/22.rktd diff --git a/2019/22.rkt b/2019/22.rkt new file mode 100644 index 0000000..2160e07 --- /dev/null +++ b/2019/22.rkt @@ -0,0 +1,55 @@ +#lang br +(require racket/file rackunit) + +(define (stack cards) + (reverse cards)) + +(define (cut n cards) + (define-values (head tail) + (split-at cards (match n + [(? positive?) n] + [_ (- (length cards) (abs n))]))) + (append tail head)) + +(define (increment n cards) + (define len (length cards)) + (define vec (make-vector len)) + (for ([(card idx) (in-indexed cards)]) + (vector-set! vec (modulo (* idx n) len) card)) + (vector->list vec)) + +(define (run program [deck-size 10]) + (for/fold ([cards (range deck-size)]) + ([ln (in-list (string-split program "\n"))]) + (match (string-split ln) + [(list "cut" (app string->number num)) (cut num cards)] + [(list _ _ "increment" (app string->number num)) (increment num cards)] + [_ (stack cards)]))) + +(check-equal? + (run "deal with increment 7 +deal into new stack +deal into new stack") + '(0 3 6 9 2 5 8 1 4 7)) + +(check-equal? + (run "cut 6 +deal with increment 7 +deal into new stack") + '(3 0 7 4 1 8 5 2 9 6)) + +(check-equal? + (run "deal into new stack +cut -2 +deal with increment 7 +cut 8 +cut -4 +deal with increment 7 +cut 3 +deal with increment 9 +deal with increment 3 +cut -1") + '(9 2 5 8 1 4 7 0 3 6)) + +;; 1 +(check-eq? (index-of (run (file->string "22.rktd") 10007) 2019) 4086) diff --git a/2019/22.rktd b/2019/22.rktd new file mode 100644 index 0000000..ed33bee --- /dev/null +++ b/2019/22.rktd @@ -0,0 +1,100 @@ +cut -135 +deal with increment 38 +deal into new stack +deal with increment 29 +cut 120 +deal with increment 30 +deal into new stack +cut -7198 +deal into new stack +deal with increment 59 +cut -8217 +deal with increment 75 +cut 4868 +deal with increment 29 +cut 4871 +deal with increment 2 +deal into new stack +deal with increment 54 +cut 777 +deal with increment 40 +cut -8611 +deal with increment 3 +cut -5726 +deal with increment 57 +deal into new stack +deal with increment 41 +deal into new stack +cut -5027 +deal with increment 12 +cut -5883 +deal with increment 45 +cut 9989 +deal with increment 14 +cut 6535 +deal with increment 18 +cut -5544 +deal with increment 29 +deal into new stack +deal with increment 64 +deal into new stack +deal with increment 41 +deal into new stack +deal with increment 6 +cut 4752 +deal with increment 8 +deal into new stack +deal with increment 26 +cut -6635 +deal with increment 10 +deal into new stack +cut -3830 +deal with increment 48 +deal into new stack +deal with increment 39 +cut -4768 +deal with increment 65 +deal into new stack +cut -5417 +deal with increment 15 +cut -4647 +deal into new stack +cut -3596 +deal with increment 17 +cut -3771 +deal with increment 50 +cut 1682 +deal into new stack +deal with increment 20 +deal into new stack +deal with increment 22 +deal into new stack +deal with increment 3 +cut 8780 +deal with increment 52 +cut 7478 +deal with increment 9 +cut -8313 +deal into new stack +cut 742 +deal with increment 19 +cut 9982 +deal into new stack +deal with increment 68 +cut 9997 +deal with increment 23 +cut -240 +deal with increment 54 +cut -7643 +deal into new stack +deal with increment 6 +cut -3493 +deal with increment 74 +deal into new stack +deal with increment 75 +deal into new stack +deal with increment 40 +cut 596 +deal with increment 6 +cut -4957 +deal into new stack \ No newline at end of file