From 581e6ab565f53e4b4b715a76d5c2fb8399fc73b5 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Fri, 15 Dec 2017 14:58:34 -0500 Subject: Day 11 https://www.redblobgames.com/grids/hexagons/#coordinates-cube --- 2017/src/bin/day11.rs | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 2017/src/bin/day11.rs (limited to '2017/src') diff --git a/2017/src/bin/day11.rs b/2017/src/bin/day11.rs new file mode 100644 index 0000000..174f950 --- /dev/null +++ b/2017/src/bin/day11.rs @@ -0,0 +1,42 @@ +use std::io::{self, Read}; + +#[derive(Debug, Clone, Copy)] +struct Hex(i32, i32, i32); + +impl Hex { + fn mov(self, dir: &str) -> Self { + let Hex(x, y, z) = self; + match dir { + "n" => Hex(x, y + 1, z - 1), + "ne" => Hex(x + 1, y, z - 1), + "se" => Hex(x + 1, y - 1, z), + "s" => Hex(x, y - 1, z + 1), + "sw" => Hex(x - 1, y, z + 1), + "nw" => Hex(x - 1, y + 1, z), + _ => unimplemented!(), + } + } +} + +fn solve1(input: &str) -> i32 { + let mut hex = Hex(0, 0, 0); + for dir in input.split(',') { + hex = hex.mov(dir); + } + (hex.0.abs() + hex.1.abs() + hex.2.abs()) / 2 +} + +fn main() { + let mut input = String::new(); + io::stdin().read_to_string(&mut input).unwrap(); + + println!("Part 1: {}", solve1(input.trim())); +} + +#[test] +fn part1() { + assert_eq!(3, solve1("ne,ne,ne")); + assert_eq!(0, solve1("ne,ne,sw,sw")); + assert_eq!(2, solve1("ne,ne,s,s")); + assert_eq!(3, solve1("se,sw,se,sw,sw")); +} -- cgit 1.4.1 class='form'>
path: root/www/git.causal.agency/cgit/scan-tree.c (unfollow)
Commit message (Collapse)Author
2021-01-27Set para and sect for mdocJune McEnroe
Copied from the OpenBSD defaults.
2021-01-26Use First state to match keyword at beginning of lineJune McEnroe
Otherwise keywords at the beginnings of lines with preceeding whitespace are not matched.
2021-01-25Install vi on Linux and nvi on macOSJune McEnroe
2021-01-25Use vi and lessJune McEnroe
I haven't used neovim in a couple weeks by now, so I may as well commit this.
2021-01-20Use mtags for sh in source-filterJune McEnroe
2021-01-20Generate tags for sh files in mtagsJune McEnroe
Only matches functions declared at the beginnings of lines, but I'm fine with that.
2021-01-20Add messy sh lexerJune McEnroe
Surprisingly seems to work for everything I looked at in my repos.
2021-01-20Add all target to git.causal.agency MakefileJune McEnroe
2021-01-20Remove Lua supportJune McEnroe
Lua support is unused and the dlsym fwrite/write hacks horrify me. Clean it up.
2021-01-20Fix tests for diff spansJune McEnroe
2021-01-20Avoid matching ':' in make tagsJune McEnroe
Otherwise a :: rule includes one of the ':'s in the tag name.
2021-01-19Prefer tag matches not preceded by [[:alnum:]]June McEnroe
Otherwise the "id" in "void" matches for "void id".
2021-01-19Escape \ and / in mtags search patternsJune McEnroe
2021-01-20Use mtags in source-filterJune McEnroe
2021-01-19Add mtags to generate tags for make and mdocJune McEnroe
2021-01-19Map tags to IDs using only [[:alnum:]-._]June McEnroe
2021-01-19Don't use a pager if reading standard inputJune McEnroe
2021-01-19Support BSD make syntax and match *.amJune McEnroe
These don't really go together, but...
2021-01-19Match tab following escaped newline in make assignmentsJune McEnroe
Otherwise it ends up going into Shell state.
2021-01-18Allow matching lexers using first input lineJune McEnroe