From 5e1f67166cc7607b2b45396a210462ec62b0433e Mon Sep 17 00:00:00 2001 From: Oscar Najera Date: Sat, 10 Dec 2022 18:44:41 +0100 Subject: [AoC2022] ELisp 10-1 --- AoC2022/10/solver.el | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 AoC2022/10/solver.el (limited to 'AoC2022/10/solver.el') 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 +;; 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 -- cgit v1.2.3