Refactor 2023 day 2: parse each line into a single hash table

quickdudley
Aug 27, 2024, 9:58 PM
PUGKJMPLL5M2BBKP572VUX6SNYVMBACJXH5EE4SKA4DQHXDQS52AC

Dependencies

Change contents

  • replacement in 2023/day2.lisp at line 83
    [2.2908][2.2908:2970]()
    (current-grab (make-hash-table))
    (grabs nil))
    [2.2908]
    [2.2970]
    (grab (make-hash-table)))
  • replacement in 2023/day2.lisp at line 87
    [2.3129][2.3129:3335]()
    (unless (equalp ":" (next-token toks))
    (warn "Missing colon"))
    (loop for count = (let ((tok (next-token toks)))
    (if tok
    (parse-integer tok)))
    [2.3129]
    [2.3335]
    (unless (equalp ":" (next-token toks)) (warn "Missing colon"))
    (loop for
    count = (let ((tok (next-token toks)))
    (if tok
    (parse-integer tok)))
  • edit in 2023/day2.lisp at line 93
    [2.3401]
    [2.3401]
    for delim = (next-token toks)
  • replacement in 2023/day2.lisp at line 95
    [2.3436][2.3436:3681]()
    do (setf (gethash colour current-grab) count)
    (unless (equalp "," (next-token toks))
    (push current-grab grabs)
    (setf current-grab (make-hash-table))))
    (cons game-number (reverse grabs))))
    [2.3436]
    [2.3681]
    do (setf (gethash colour grab) (max (or (gethash colour grab) 0) count))
    (unless (or (equalp delim ";") (equalp delim ",") (not delim))
    (warn (format nil "Unrecognized delimiter: ~a" delim))))
    (cons game-number grab)))
  • replacement in 2023/day2.lisp at line 112
    [2.4017][2.4017:4068]()
    (if (all #'check-limit (cdr game))
    [2.4017]
    [2.4068]
    (if (check-limit (cdr game))