aboutsummaryrefslogtreecommitdiffstats
path: root/AoC2022/10/solver.el
diff options
context:
space:
mode:
authorOscar Najera <hi@oscarnajera.com>2022-12-10 18:44:41 +0100
committerOscar Najera <hi@oscarnajera.com>2022-12-10 18:44:41 +0100
commit5e1f67166cc7607b2b45396a210462ec62b0433e (patch)
tree9ec465ad707161b1aec263602986c29ae8f9dc80 /AoC2022/10/solver.el
parentf414e9a4a26d74402a569ddcb1ba964394267899 (diff)
downloadscratch-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.el49
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