S'identifier - S'inscrire - Contact

CommunityWiki
Jam session in wikilandia

Emacs Avent of Code Day 2

Source :

First question of day 2: You start on key 5 on a keypad as shown below. With instructions to go up, down, left or right. Ignore instructions that would take you off the keypad.1 2 3 4 5 6 7 8 9The example input provided for the four numbers is shown below. At the end of each line you’ll end up on the key which is part of the answer. In this example the correct answer is 1985.ULL RRDDD LURDL UUUUDCode:(let ((pos 5) (code nil) (instructions '((U L L) (R R D D D) (L U R D L) (U U U U D)))) (dolist (instruction instructions) (dolist (move instruction) (case move ((U) (when (> pos 3) (setq pos (- pos 3)))) ((D) (when (< pos 7) (setq pos (+ pos 3)))) ((L) (when (not (= (mod pos 3) 1)) (setq pos (- pos 1)))) ((R) (when (> (mod pos 3) 0) (setq pos (+ pos 1)))))) (push pos code)) (reverse code))For the second star, I was too lazy to figure out how to compute the next position and decided to implement tables instead: 1 2 3 4 5 6 7 8 9 A B C DGiven a direction, I just list all the possible positions and the results. It’s crude, but it works.(let ((pos 5) (code nil) (instructions '((U L L) (R R D D D) (L U R D L) (U U U U D)))) (dolist (instruction instructions) (dolist (move instruction) (setq pos (funcall move pos))) (push pos code)) (reverse code))

(defun U (pos) (case pos ((3) 1) ((6) 2) ((7) 3) ((8) 4) ((A) 6) ((B) 7) ((C) 8) ((D) 'B) (t pos)))

(defun D (pos) (case pos ((1) 3) ((2) 6) ((3) 7) ((4) 8) ((6) 'A) ((7) 'B) ((8) 'C) ((B) 'D) (t pos)))

(defun L (pos) (case pos ((6) 5) ((3) 2) ((7) 6) ((B) 'A) ((4) 3) ((8) 7) ((C) 'B) ((9) 8) (t pos)))

(defun R (pos) (case pos ((5) 6) ((2) 3) ((6) 7) ((A) 'B) ((3) 4) ((7) 8) ((B) 'C) ((8) 9) (t pos)))Tags: Emacs Advent of Code

le 03.12.16 à 01:13 dans Mind - Version imprimable
Article précédent - Commenter - Article suivant -