mirror of
https://github.com/correl/advent-of-code.git
synced 2024-11-25 03:00:04 +00:00
Day 8, Part 2
This commit is contained in:
parent
308d83c0f4
commit
ff6e5d2ad4
1 changed files with 56 additions and 0 deletions
|
@ -4108,3 +4108,59 @@ number of characters in memory for string values =(0 + 3 + 7 + 1 =
|
|||
#+RESULTS[acaa7a9432ace3b411d0bfcd4c61620b43ce21c5]:
|
||||
: 1350
|
||||
|
||||
** Part 2
|
||||
Now, let's go the other way. In addition to finding the number of
|
||||
characters of code, you should now *encode each code representation as
|
||||
a new string* and find the number of characters of the new encoded
|
||||
representation, including the surrounding double quotes.
|
||||
|
||||
For example:
|
||||
|
||||
- =""= encodes to ="\"\""=, an increase from =2= characters to =6=.
|
||||
- ="abc"= encodes to ="\"abc\""=, an increase from =5= characters to
|
||||
=9=.
|
||||
- ="aaa\"aaa"= encodes to ="\"aaa\\\"aaa\""=, an increase from =10=
|
||||
characters to =16=.
|
||||
- ="\x27"= encodes to ="\"\\x27\""=, an increase from =6= characters
|
||||
to =11=.
|
||||
|
||||
Your task is to find *the total number of characters to represent the
|
||||
newly encoded strings* minus *the number of characters of code in each
|
||||
original string literal*. For example, for the strings above, the
|
||||
total encoded length (=6 + 9 + 16 + 11 = 42=) minus the characters in
|
||||
the original code representation (=23=, just like in the first part of
|
||||
this puzzle) is =42 - 23 = 19=.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
#+BEGIN_SRC emacs-lisp :var input=8-input :exports both
|
||||
(defun day8/encode-string (string-literal)
|
||||
(format "\"%s\""
|
||||
(-reduce-from
|
||||
(lambda (acc replacement)
|
||||
(s-replace (car replacement)
|
||||
(cdr replacement)
|
||||
acc))
|
||||
string-literal
|
||||
'(("\\" . "\\\\")
|
||||
("\"" . "\\\"")))))
|
||||
|
||||
(ert-deftest day8/encode-string ()
|
||||
(should (string-equal "\"\\\"\\\"\""
|
||||
(day8/encode-string "\"\"")))
|
||||
(should (string-equal "\"\\\"abc\\\"\""
|
||||
(day8/encode-string "\"abc\"")))
|
||||
(should (string-equal "\"\\\"aaa\\\\\\\"aaa\\\"\""
|
||||
(day8/encode-string "\"aaa\\\"aaa\"")))
|
||||
(should (string-equal "\"\\\"\\\\x27\\\"\""
|
||||
(day8/encode-string "\"\\x27\""))))
|
||||
|
||||
(let* ((code-strings (split-string input "\n" t))
|
||||
(encoded-values (-map #'day8/encode-string code-strings)))
|
||||
(- (-sum (-map #'length encoded-values))
|
||||
(-sum (-map #'length code-strings))))
|
||||
#+END_SRC
|
||||
|
||||
#+RESULTS[bb50e3c25f6d0d1247acdefae2e5c755c90fe7a7]:
|
||||
: 2085
|
||||
|
||||
|
|
Loading…
Reference in a new issue