Skip to content

Instantly share code, notes, and snippets.

@sotolf2
Created January 3, 2020 11:08
Show Gist options
  • Save sotolf2/55c746bda56729406541910511b33d54 to your computer and use it in GitHub Desktop.
Save sotolf2/55c746bda56729406541910511b33d54 to your computer and use it in GitHub Desktop.
#lang racket
(require threading)
(define (get-input)
(file->lines "day8.txt"))
(define (str-len str)
(if (= 0 (string-length str))
0
(string-length (read (open-input-string str)))))
(define (code-len str)
(string-length str))
(define (string-length-difference str)
(- (code-len str) (str-len str)))
(define (part1)
(~>>
(get-input)
(map string-length-difference)
(foldl + 0)))
(define (reencode str)
(~s str))
(define (encode-diff str)
(- (code-len (reencode str)) (code-len str)))
(define (part2)
(~>>
(get-input)
(map encode-diff)
(foldl + 0)))
(module+ test
(require rackunit)
(require rackunit/text-ui)
(define part-1
(test-suite
"Part 1"
(check-equal? 1 1 "basic")
(check-equal? (str-len "\"\"") 0 "String length \"\"")
(check-equal? (code-len "\"\"") 2 "Code length \"\"")
(check-equal? (string-length-difference "\"\"") 2 "Difference \"\"")
(check-equal? (str-len "\"abc\"") 3 "String length \"abc\"")
(check-equal? (code-len "\"abc\"") 5 "Code length \"abc\"")
(check-equal? (string-length-difference "\"abc\"") 2 "Difference \"abc\"")
(check-equal? (str-len "\"aaa\\\"aaa\"") 7 "String length \"aaa\"aaa\"")
(check-equal? (code-len "\"aaa\\\"aaa\"") 10 "Code length \"aaa\"aaa\"")
(check-equal? (string-length-difference "\"aaa\\\"aaa\"") 3 "Difference \"aaa\"aaa\"")
(check-equal? (str-len "\"\\x27\"") 1 "String length \"\x27\"")
(check-equal? (code-len "\"\\x27\"") 6 "Code length \"\x27\"")
(check-equal? (string-length-difference "\"\\x27\"") 5 "Difference \"\x27\"")
(check-equal? (part1) 1371 "Part1 from input")
))
(define part-2
(test-suite
"Part 2"
(check-equal? 1 1 "basic")
(check-equal? (reencode "") "\"\"" "Reencode ")
(check-equal? (encode-diff "\"\"") 4 "Encode diff ")
(check-equal? (reencode "abc") "\"abc\"" "Reencode abc")
(check-equal? (encode-diff "\"abc\"") 4 "Encode diff abc")
(check-equal? (reencode "aaa\"aaa") "\"aaa\\\"aaa\"" "Reencode aaa\"aaa")
(check-equal? (encode-diff "\"aaa\\\"aaa\"") 6 "Encode diff aaa\"aaa")
(check-equal? (part2) 2117 "Part2 from input")
))
(run-tests part-1)
(run-tests part-2))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment