;;; solver.el --- Day 10 -*- lexical-binding: t; -*- ;; ;; Copyright (C) 2022 Óscar Nájera ;; ;; Author: Óscar Nájera ;; Maintainer: Óscar Nájera ;; Created: December 10, 2022 ;; Modified: December 10, 2022 ;; ;; This file is not part of GNU Emacs. ;; ;;; Commentary: ;; ;; Day 10 ;; ;;; Code: (require 'f) (require 'subr-x) (require 'cl-lib) (require 'ert) (defsubst solver-probe (cycle register) (when (memq cycle '(20 60 100 140 180 220)) (* cycle register))) (let ((register 1) (cycle 1) measures) (dolist (instruction (split-string (f-read "input") "\n")) (cl-incf cycle) (let ((step1 (solver-probe cycle register)) ;; the noop default (step2 ;; addx takes 2 cycles (when (string-prefix-p "addx" instruction) (cl-incf cycle) (cl-incf register (string-to-number (cadr (split-string instruction)))) (solver-probe cycle register)))) (when-let ((probe (or step1 step2))) (push probe measures)))) (list (reverse measures) (apply #'+ measures) cycle)) (provide 'solver) ;;; solver.el ends here