Day 3 part 2
[?]
Aug 19, 2018, 1:10 AM
PKG2KEMHDOSJSLO6NCJOOWRLIW2P4NYBD3LVYIQLAOQOUDNS3LFACDependencies
- [2]
XBZHQ672Day 1 solution
Change contents
- file addition: day3p2.rs[2.7]
use std::f64;use std::i64;use std::env;use std::collections::HashMap;fn spiral_ring(c: i64) -> i64 {let f = c as f64;((f.sqrt() + 1.0) / 2.0).ceil() as i64}fn ring_diagonals(n: i64) -> [i64; 4] {let s = (n * 2 - 1).pow(2);let d = n - 1;[s - 6 * d, s - 4 * d, s - 2 * d, s]}fn spiral_coords(c: i64) -> (i64, i64) {let n = spiral_ring(c);let d = ring_diagonals(n);let md = n - 1;for i in [0,1,2,3].iter() {if d[*i] >= c {match *i {0 => return (md, c + md - d[*i]),1 => return (d[*i] - md - c, md),2 => return (-md, d[*i] - md - c),3 => return (md + c - d[*i], -md),_ => panic!("Index larger than array!")}}}panic!("Unreachable")}fn main() {let args : Vec<String> = env::args().collect();match i64::from_str_radix(&args[1], 10) {Result::Ok(c) => {let mut m = HashMap::new();m.insert((0,0),1);let mut i = 2;loop {let (x,y) = spiral_coords(i);let neighbours = [(x+1,y), (x+1,y+1), (x,y+1), (x-1,y+1),(x-1,y), (x-1,y-1), (x,y-1), (x+1,y-1)];let mut sum = 0;for n in neighbours.iter() {sum += match m.get(n) {Some(ex) => *ex,None => 0}}m.insert((x,y),sum);if sum > c {println!("{}", sum);break;}i += 1;}},Result::Err(e) => println!("{}", e),}}