From c85e82ee45d661ff20e07d1a55f365c8b184b142 Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sat, 3 Dec 2016 22:28:54 -0500 Subject: Day 1 part 2 --- src/bin/day01.rs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/bin/day01.rs b/src/bin/day01.rs index ed2d845..a198e64 100644 --- a/src/bin/day01.rs +++ b/src/bin/day01.rs @@ -1,7 +1,8 @@ +use std::collections::HashSet; use std::io::{self, Read}; use std::ops::{Add, Mul}; -#[derive(Clone, Copy)] +#[derive(Clone, Copy, PartialEq, Eq, Hash)] struct Point(i32, i32); impl Point { @@ -26,20 +27,14 @@ impl Add for Point { } } -impl Mul for Point { - type Output = Self; - - fn mul(self, rhs: i32) -> Self { - Point(self.0 * rhs, self.1 * rhs) - } -} - fn main() { let mut input = String::new(); io::stdin().read_to_string(&mut input).unwrap(); let mut position = Point(0, 0); let mut direction = Point(0, -1); + let mut visited = HashSet::new(); + let mut collision = None; for instruction in input.trim().split(", ") { let (turn, count) = instruction.split_at(1); @@ -51,8 +46,16 @@ fn main() { } let count: i32 = count.parse().unwrap(); - position = position + direction * count; + for _ in 0..count { + position = position + direction; + if !visited.insert(position) && collision.is_none() { + collision = Some(position); + } + } } println!("Part 1: {}", position.distance(Point(0, 0))); + if let Some(point) = collision { + println!("Part 2: {}", point.distance(Point(0, 0))); + } } -- cgit 1.4.1 l/log/irc.c'>
Commit message (Expand)Author
2018-11-28Add NetBSD.mkJune McEnroe
2018-11-28Make use of config.mk and add Darwin.mkJune McEnroe
2018-11-27Rename project catgirlJune McEnroe
2018-11-27Add M-m key to insert a blank lineJune McEnroe
2018-10-28Add notification with notify-sendJune McEnroe
2018-10-28Use const char *argv[] signaturesJune McEnroe
2018-10-23Fix verbose view name in man pageJune McEnroe
2018-10-22Add more URL schemesJune McEnroe
2018-10-22Rework status lineJune McEnroe
2018-10-22Rename status and verbose tagsJune McEnroe
2018-09-16Revert "Race parallel connects"June McEnroe
2018-09-16Race parallel connectsJune McEnroe
2018-09-15Call tls_error when tls_connect_socket failsJune McEnroe
2018-09-15Try successive getaddrinfo resultsJune McEnroe
2018-09-15Render README from chatte.7June McEnroe
2018-09-14Factor out uiPrompt to call on nick changeJune McEnroe
2018-09-14Run test binaries with set -e and semicolonsJune McEnroe
2018-09-14Fail target when any test binary failsJune McEnroe
2018-09-14Run tests in default targetJune McEnroe
2018-09-14Add termEvent testsJune McEnroe
2018-09-14Check width of entire next word including codesJune McEnroe
2018-09-14Remove word handling from formatParseJune McEnroe
2018-09-14Apply consecutive formatting codes at onceJune McEnroe
2018-09-14Add tests for formatParseJune McEnroe
2018-09-13Preview with nick in input windowJune McEnroe
2018-09-13Never send PRIVMSG to TagStatus or TagVerboseJune McEnroe
2018-09-13Move color selection to format.cJune McEnroe
2018-09-13Fix len for format->split at end of stringJune McEnroe
2018-09-13Avoid uninitialized x in uiReadJune McEnroe
2018-09-13Add IRCDefault to colors enumJune McEnroe
2018-09-13Return a format->split even at the end of the stringJune McEnroe
2018-09-13Fix weird tab-complete after commaJune McEnroe
2018-09-13Rewrite UI againJune McEnroe
2018-09-12Add note about C-oJune McEnroe
2018-09-12Use formatParse split to position input cursorJune McEnroe
2018-09-12Factor out IRC formatting parsingJune McEnroe
2018-09-11Add /help equivalent to /manJune McEnroe
2018-09-11Don't render every PM as a pingJune McEnroe
2018-09-11Add urlOpenMatchJune McEnroe
2018-09-10Depend on man.sh for chroot.tar targetJune McEnroe
2018-09-10Set LESSSECURE=1 in man.shJune McEnroe
2018-09-10Add /man commandJune McEnroe
2018-09-10Install man page in chrootJune McEnroe
2018-09-10Install man pageJune McEnroe
2018-09-10Split keys into subsections and document colorsJune McEnroe
2018-09-10Add "blank" lines to chatte.1June McEnroe
2018-09-10Document key bindings in chatte.1June McEnroe
2018-09-08Document slash commands in chatte.1June McEnroe