From 87d3d263d726a447d48fac7a6d2013b88a36f32f Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 5 Dec 2016 10:59:01 -0800 Subject: [PATCH] langify --- 2016/day05-input.rkt | 2 ++ 2016/day05.rkt | 34 ++++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 2016/day05-input.rkt diff --git a/2016/day05-input.rkt b/2016/day05-input.rkt new file mode 100644 index 0000000..c888270 --- /dev/null +++ b/2016/day05-input.rkt @@ -0,0 +1,2 @@ +#lang aoc-racket/2016/day05 +ojvtpuvg \ No newline at end of file diff --git a/2016/day05.rkt b/2016/day05.rkt index 3454698..3668599 100644 --- a/2016/day05.rkt +++ b/2016/day05.rkt @@ -1,15 +1,25 @@ -#lang br +#lang br/quicklang (require openssl/md5) -(define key "ojvtpuvg") +(define (read-syntax path port) + (strip-bindings + #`(module mod "day05.rkt" + (solve-part-a #,(string-trim (port->string port)))))) +(module+ reader (provide read-syntax)) -(let loop ([idx 0][password-cs empty]) - (cond - [(= 8 (length password-cs)) - (apply string-append (reverse password-cs))] - [else - (define this-key (format "~a~a" key idx)) - (define next-hash (md5 (open-input-string this-key))) - (if (string-prefix? next-hash "00000") - (loop (add1 idx) (cons (substring next-hash 5 6) password-cs)) - (loop (add1 idx) password-cs))])) +(provide #%module-begin) + +(define (solve-part-a key) + (display "part a solution: ") + (for*/fold ([password-cs empty]) + ([idx (in-naturals)] + [this-key (in-value (format "~a~a" key idx))] + #:break (= 8 (length password-cs))) + (define this-hash (md5 (open-input-string this-key))) + (if (string-prefix? this-hash "00000") + (let ([next-str (substring this-hash 5 6)]) + (display next-str) + (cons next-str password-cs)) + password-cs)) + (displayln "")) +(provide solve-part-a)