diff options
author | Oscar Najera <hi@oscarnajera.com> | 2022-12-10 18:44:41 +0100 |
---|---|---|
committer | Oscar Najera <hi@oscarnajera.com> | 2022-12-10 18:44:41 +0100 |
commit | 5e1f67166cc7607b2b45396a210462ec62b0433e (patch) | |
tree | 9ec465ad707161b1aec263602986c29ae8f9dc80 /AoC2022/10/solver.el | |
parent | f414e9a4a26d74402a569ddcb1ba964394267899 (diff) | |
download | scratch-5e1f67166cc7607b2b45396a210462ec62b0433e.tar.gz scratch-5e1f67166cc7607b2b45396a210462ec62b0433e.tar.bz2 scratch-5e1f67166cc7607b2b45396a210462ec62b0433e.zip |
[AoC2022] ELisp 10-1
Diffstat (limited to 'AoC2022/10/solver.el')
-rw-r--r-- | AoC2022/10/solver.el | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/AoC2022/10/solver.el b/AoC2022/10/solver.el new file mode 100644 index 0000000..5a8b6f8 --- /dev/null +++ b/AoC2022/10/solver.el @@ -0,0 +1,49 @@ +;;; solver.el --- Day 10 -*- lexical-binding: t; -*- +;; +;; Copyright (C) 2022 Óscar Nájera +;; +;; Author: Óscar Nájera <hi@oscarnajera.com> +;; Maintainer: Óscar Nájera <hi@oscarnajera.com> +;; 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 |