From c94555fda1f4fb505d2a5c1d9dcfb1f6ed014804 Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Mon, 10 Dec 2018 13:13:29 +0100 Subject: [PATCH] Implement day 10. This implementation is stupid but it works. --- 2018/inputs/10.txt | 338 ++++++++++++++++++++++++++++++++++++ 2018/src/day10.rs | 113 +++++++++++- 2018/src/samples/10.out.txt | 8 + 2018/src/samples/10.txt | 31 ++++ 4 files changed, 484 insertions(+), 6 deletions(-) create mode 100644 2018/inputs/10.txt create mode 100644 2018/src/samples/10.out.txt create mode 100644 2018/src/samples/10.txt diff --git a/2018/inputs/10.txt b/2018/inputs/10.txt new file mode 100644 index 0000000..4057aa4 --- /dev/null +++ b/2018/inputs/10.txt @@ -0,0 +1,338 @@ +position=< 11063, 22004> velocity=<-1, -2> +position=< 32870, -21613> velocity=<-3, 2> +position=< 43767, 22003> velocity=<-4, -2> +position=< 32865, -10705> velocity=<-3, 1> +position=< 21984, -43419> velocity=<-2, 4> +position=< 43775, 11100> velocity=<-4, -1> +position=< 43770, -43425> velocity=<-4, 4> +position=< 32881, 22004> velocity=<-3, -2> +position=< 32899, 11102> velocity=<-3, -1> +position=< 43764, 11098> velocity=<-4, -1> +position=< 43805, 32912> velocity=<-4, -3> +position=< 54680, -32516> velocity=<-5, 3> +position=< 32851, 11107> velocity=<-3, -1> +position=< 54696, 22012> velocity=<-5, -2> +position=< 43794, 43816> velocity=<-4, -4> +position=<-54388, -43427> velocity=< 5, 4> +position=<-43465, 43815> velocity=< 4, -4> +position=< 11036, 32916> velocity=<-1, -3> +position=< 43798, 54726> velocity=<-4, -5> +position=<-10722, 54727> velocity=< 1, -5> +position=< 32897, -54331> velocity=<-3, 5> +position=< 11043, -32520> velocity=<-1, 3> +position=< 32868, -10706> velocity=<-3, 1> +position=<-10760, 54718> velocity=< 1, -5> +position=<-43449, -21611> velocity=< 4, 2> +position=< 43751, 11105> velocity=<-4, -1> +position=<-21625, 43817> velocity=< 2, -4> +position=< 54685, 54723> velocity=<-5, -5> +position=< 54711, -43418> velocity=<-5, 4> +position=<-54375, 32914> velocity=< 5, -3> +position=< 21939, 32908> velocity=<-2, -3> +position=<-43477, -10703> velocity=< 4, 1> +position=< 54699, 22012> velocity=<-5, -2> +position=<-54372, 43819> velocity=< 5, -4> +position=< 32841, -21609> velocity=<-3, 2> +position=<-32533, 43816> velocity=< 3, -4> +position=<-54399, 54722> velocity=< 5, -5> +position=<-21649, -21613> velocity=< 2, 2> +position=< 43767, 11107> velocity=<-4, -1> +position=<-21636, 11106> velocity=< 2, -1> +position=< 21964, -10705> velocity=<-2, 1> +position=< 54663, -10712> velocity=<-5, 1> +position=< 32865, 43818> velocity=<-3, -4> +position=< 21992, 22009> velocity=<-2, -2> +position=< 32881, -54331> velocity=<-3, 5> +position=<-32553, -32516> velocity=< 3, 3> +position=<-54381, 54723> velocity=< 5, -5> +position=<-32572, 32908> velocity=< 3, -3> +position=< 43764, -54327> velocity=<-4, 5> +position=<-43482, -32519> velocity=< 4, 3> +position=<-43494, -54325> velocity=< 4, 5> +position=< 11060, -21612> velocity=<-1, 2> +position=<-54350, -10707> velocity=< 5, 1> +position=<-32568, 54719> velocity=< 3, -5> +position=<-43458, 11104> velocity=< 4, -1> +position=<-32548, -54328> velocity=< 3, 5> +position=<-32589, 54725> velocity=< 3, -5> +position=< 43786, 32911> velocity=<-4, -3> +position=< 21940, -32521> velocity=<-2, 3> +position=< 32860, -54323> velocity=<-3, 5> +position=<-54363, -21610> velocity=< 5, 2> +position=< 32846, 54720> velocity=<-3, -5> +position=<-54396, -32517> velocity=< 5, 3> +position=<-32560, 22006> velocity=< 3, -2> +position=<-32549, -10706> velocity=< 3, 1> +position=< 54711, -21613> velocity=<-5, 2> +position=<-21676, -10704> velocity=< 2, 1> +position=< 32878, 11099> velocity=<-3, -1> +position=< 32886, -10710> velocity=<-3, 1> +position=<-21628, 54719> velocity=< 2, -5> +position=< 43802, 54723> velocity=<-4, -5> +position=<-43485, -21608> velocity=< 4, 2> +position=<-10719, -10703> velocity=< 1, 1> +position=< 11043, -21617> velocity=<-1, 2> +position=<-54343, -54328> velocity=< 5, 5> +position=<-10746, -21614> velocity=< 1, 2> +position=<-54399, -54326> velocity=< 5, 5> +position=< 43794, 32913> velocity=<-4, -3> +position=< 21984, -32519> velocity=<-2, 3> +position=< 43770, 43813> velocity=<-4, -4> +position=< 32878, -21616> velocity=<-3, 2> +position=< 21965, -43424> velocity=<-2, 4> +position=<-10746, -32519> velocity=< 1, 3> +position=< 11088, -54328> velocity=<-1, 5> +position=<-32541, -10710> velocity=< 3, 1> +position=< 32873, -10703> velocity=<-3, 1> +position=< 32846, -10706> velocity=<-3, 1> +position=< 11087, 32916> velocity=<-1, -3> +position=< 54667, -21610> velocity=<-5, 2> +position=< 21984, -10707> velocity=<-2, 1> +position=< 11065, -10708> velocity=<-1, 1> +position=< 54708, -54332> velocity=<-5, 5> +position=<-54362, -43418> velocity=< 5, 4> +position=<-32549, 11106> velocity=< 3, -1> +position=< 54684, -10705> velocity=<-5, 1> +position=<-54347, -54331> velocity=< 5, 5> +position=< 43765, -21613> velocity=<-4, 2> +position=< 11082, 54725> velocity=<-1, -5> +position=< 11050, -10703> velocity=<-1, 1> +position=< 21948, -32514> velocity=<-2, 3> +position=<-21648, -32519> velocity=< 2, 3> +position=<-43474, 54727> velocity=< 4, -5> +position=<-54343, -43418> velocity=< 5, 4> +position=< 11031, -43425> velocity=<-1, 4> +position=< 11076, 32909> velocity=<-1, -3> +position=< 11059, -54325> velocity=<-1, 5> +position=<-43493, -54327> velocity=< 4, 5> +position=< 54694, -32518> velocity=<-5, 3> +position=<-54391, -54324> velocity=< 5, 5> +position=<-21660, -32521> velocity=< 2, 3> +position=< 54699, -10706> velocity=<-5, 1> +position=<-54383, 11106> velocity=< 5, -1> +position=<-10755, 54723> velocity=< 1, -5> +position=<-10720, -21608> velocity=< 1, 2> +position=<-21631, -54332> velocity=< 2, 5> +position=<-54378, 32910> velocity=< 5, -3> +position=<-10759, -10712> velocity=< 1, 1> +position=< 43786, -32519> velocity=<-4, 3> +position=<-32570, 54718> velocity=< 3, -5> +position=<-32540, -43423> velocity=< 3, 4> +position=<-21632, -21616> velocity=< 2, 2> +position=<-10718, -32522> velocity=< 1, 3> +position=< 11060, 11103> velocity=<-1, -1> +position=<-43446, -43427> velocity=< 4, 4> +position=<-21660, 43820> velocity=< 2, -4> +position=< 43773, -43422> velocity=<-4, 4> +position=<-10735, 22007> velocity=< 1, -2> +position=< 32846, 43820> velocity=<-3, -4> +position=<-10779, 54720> velocity=< 1, -5> +position=<-54394, -43423> velocity=< 5, 4> +position=<-10747, 32917> velocity=< 1, -3> +position=<-10755, 32917> velocity=< 1, -3> +position=< 54680, -32515> velocity=<-5, 3> +position=< 11079, 32916> velocity=<-1, -3> +position=< 43803, 54727> velocity=<-4, -5> +position=< 11082, 32915> velocity=<-1, -3> +position=< 54710, 32908> velocity=<-5, -3> +position=< 54652, -10711> velocity=<-5, 1> +position=<-10750, 22012> velocity=< 1, -2> +position=< 43758, 32909> velocity=<-4, -3> +position=<-10759, 54721> velocity=< 1, -5> +position=<-32541, 11105> velocity=< 3, -1> +position=<-54349, 54724> velocity=< 5, -5> +position=<-43442, -54331> velocity=< 4, 5> +position=<-32577, -32519> velocity=< 3, 3> +position=<-54399, -21611> velocity=< 5, 2> +position=< 21952, -21617> velocity=<-2, 2> +position=< 11087, -10710> velocity=<-1, 1> +position=< 21994, -54323> velocity=<-2, 5> +position=< 11076, -21614> velocity=<-1, 2> +position=< 11064, -32515> velocity=<-1, 3> +position=<-43476, 11107> velocity=< 4, -1> +position=< 32869, -32514> velocity=<-3, 3> +position=< 11036, 32911> velocity=<-1, -3> +position=<-32541, 43819> velocity=< 3, -4> +position=<-10767, 43815> velocity=< 1, -4> +position=< 43746, 22008> velocity=<-4, -2> +position=<-10775, 11103> velocity=< 1, -1> +position=<-32585, -32521> velocity=< 3, 3> +position=<-54359, 32916> velocity=< 5, -3> +position=< 54652, 11099> velocity=<-5, -1> +position=<-32549, -54323> velocity=< 3, 5> +position=< 43775, -10703> velocity=<-4, 1> +position=< 32877, -54326> velocity=<-3, 5> +position=< 11036, -43422> velocity=<-1, 4> +position=< 54702, 22010> velocity=<-5, -2> +position=< 32867, 43816> velocity=<-3, -4> +position=< 43772, 22007> velocity=<-4, -2> +position=<-10742, 54719> velocity=< 1, -5> +position=< 54696, -10712> velocity=<-5, 1> +position=< 11071, -21613> velocity=<-1, 2> +position=< 43797, 54720> velocity=<-4, -5> +position=< 21965, -32514> velocity=<-2, 3> +position=< 54691, 54725> velocity=<-5, -5> +position=< 21965, 22010> velocity=<-2, -2> +position=<-10723, 43821> velocity=< 1, -4> +position=< 54672, 43814> velocity=<-5, -4> +position=< 43775, 54726> velocity=<-4, -5> +position=<-54351, -10707> velocity=< 5, 1> +position=< 21976, -10703> velocity=<-2, 1> +position=<-43474, -43424> velocity=< 4, 4> +position=<-43489, 11101> velocity=< 4, -1> +position=<-10755, -32513> velocity=< 1, 3> +position=<-54362, 32916> velocity=< 5, -3> +position=<-21655, -43424> velocity=< 2, 4> +position=< 43791, -32513> velocity=<-4, 3> +position=< 21960, 22009> velocity=<-2, -2> +position=<-54351, 11102> velocity=< 5, -1> +position=< 54707, -32514> velocity=<-5, 3> +position=< 21985, -32517> velocity=<-2, 3> +position=< 32862, 11100> velocity=<-3, -1> +position=< 32874, 32914> velocity=<-3, -3> +position=<-21636, -54332> velocity=< 2, 5> +position=< 21961, 54720> velocity=<-2, -5> +position=<-54394, -43423> velocity=< 5, 4> +position=< 21948, -21616> velocity=<-2, 2> +position=<-32584, -21614> velocity=< 3, 2> +position=< 32886, 22008> velocity=<-3, -2> +position=<-21627, -32522> velocity=< 2, 3> +position=<-43460, -32517> velocity=< 4, 3> +position=< 54696, -32519> velocity=<-5, 3> +position=<-32560, -32522> velocity=< 3, 3> +position=<-32578, 54718> velocity=< 3, -5> +position=<-54399, 54723> velocity=< 5, -5> +position=<-43470, 22003> velocity=< 4, -2> +position=< 11036, 11104> velocity=<-1, -1> +position=<-10760, -43427> velocity=< 1, 4> +position=<-54387, -21611> velocity=< 5, 2> +position=<-32530, -21608> velocity=< 3, 2> +position=< 43799, 32908> velocity=<-4, -3> +position=<-10763, -32513> velocity=< 1, 3> +position=<-54378, 43813> velocity=< 5, -4> +position=<-54394, -54325> velocity=< 5, 5> +position=< 43796, -21611> velocity=<-4, 2> +position=< 54675, 54725> velocity=<-5, -5> +position=<-32589, -32513> velocity=< 3, 3> +position=<-21684, -54330> velocity=< 2, 5> +position=< 43780, -10708> velocity=<-4, 1> +position=<-43449, -54329> velocity=< 4, 5> +position=<-54343, 43819> velocity=< 5, -4> +position=< 32898, 54722> velocity=<-3, -5> +position=< 21976, -21612> velocity=<-2, 2> +position=< 54668, 54718> velocity=<-5, -5> +position=< 11044, -10712> velocity=<-1, 1> +position=< 11063, -32522> velocity=<-1, 3> +position=< 11071, -43423> velocity=<-1, 4> +position=< 54704, 54727> velocity=<-5, -5> +position=< 54651, 11101> velocity=<-5, -1> +position=< 54656, -43418> velocity=<-5, 4> +position=< 54696, -10711> velocity=<-5, 1> +position=< 32899, 54718> velocity=<-3, -5> +position=<-21672, -54328> velocity=< 2, 5> +position=< 54684, 32910> velocity=<-5, -3> +position=<-54367, 11099> velocity=< 5, -1> +position=< 11075, 11102> velocity=<-1, -1> +position=<-32554, 22008> velocity=< 3, -2> +position=< 54712, -10703> velocity=<-5, 1> +position=<-10743, 11100> velocity=< 1, -1> +position=< 11076, 43820> velocity=<-1, -4> +position=< 32881, -43427> velocity=<-3, 4> +position=<-32577, -43426> velocity=< 3, 4> +position=< 32870, 54727> velocity=<-3, -5> +position=<-32536, 43822> velocity=< 3, -4> +position=<-32573, 22012> velocity=< 3, -2> +position=< 32873, -10711> velocity=<-3, 1> +position=<-21655, -54325> velocity=< 2, 5> +position=< 43791, 43819> velocity=<-4, -4> +position=<-54388, 22003> velocity=< 5, -2> +position=< 54712, 32908> velocity=<-5, -3> +position=<-43491, -32517> velocity=< 4, 3> +position=< 21960, 11106> velocity=<-2, -1> +position=< 32886, 11100> velocity=<-3, -1> +position=<-10767, 43819> velocity=< 1, -4> +position=<-10739, -21615> velocity=< 1, 2> +position=<-21624, 54722> velocity=< 2, -5> +position=< 32841, 54725> velocity=<-3, -5> +position=<-32549, -43421> velocity=< 3, 4> +position=< 11079, -21617> velocity=<-1, 2> +position=<-54378, 43813> velocity=< 5, -4> +position=< 32889, -21614> velocity=<-3, 2> +position=< 11064, 32915> velocity=<-1, -3> +position=<-54349, 32914> velocity=< 5, -3> +position=< 43779, -10706> velocity=<-4, 1> +position=<-54387, 22009> velocity=< 5, -2> +position=< 21981, -32520> velocity=<-2, 3> +position=<-43493, -32517> velocity=< 4, 3> +position=<-43470, 11101> velocity=< 4, -1> +position=<-32549, -32514> velocity=< 3, 3> +position=< 21952, 32916> velocity=<-2, -3> +position=< 54675, -21613> velocity=<-5, 2> +position=<-54367, -21608> velocity=< 5, 2> +position=<-10720, 32912> velocity=< 1, -3> +position=<-54399, -54327> velocity=< 5, 5> +position=< 11050, -21613> velocity=<-1, 2> +position=< 32886, -43420> velocity=<-3, 4> +position=< 21962, -10708> velocity=<-2, 1> +position=<-32584, 11103> velocity=< 3, -1> +position=< 43748, 32913> velocity=<-4, -3> +position=<-32565, -10703> velocity=< 3, 1> +position=< 21984, -32520> velocity=<-2, 3> +position=<-10768, -32513> velocity=< 1, 3> +position=< 32843, 43813> velocity=<-3, -4> +position=< 21965, -54331> velocity=<-2, 5> +position=<-32581, -10705> velocity=< 3, 1> +position=<-10739, 32910> velocity=< 1, -3> +position=< 54709, 32917> velocity=<-5, -3> +position=<-54378, 22012> velocity=< 5, -2> +position=< 43748, 11098> velocity=<-4, -1> +position=<-21647, -10712> velocity=< 2, 1> +position=< 11058, -10706> velocity=<-1, 1> +position=< 11087, -54323> velocity=<-1, 5> +position=< 32898, -10708> velocity=<-3, 1> +position=<-54387, 54718> velocity=< 5, -5> +position=< 32889, 11104> velocity=<-3, -1> +position=< 43794, -10710> velocity=<-4, 1> +position=<-32569, -32513> velocity=< 3, 3> +position=< 21996, 11098> velocity=<-2, -1> +position=<-21679, -43422> velocity=< 2, 4> +position=<-32553, -43424> velocity=< 3, 4> +position=<-10761, -32522> velocity=< 1, 3> +position=<-54372, 54723> velocity=< 5, -5> +position=< 21953, 11104> velocity=<-2, -1> +position=< 11047, 22003> velocity=<-1, -2> +position=<-21639, 32917> velocity=< 2, -3> +position=<-43444, 32911> velocity=< 4, -3> +position=< 54653, 11103> velocity=<-5, -1> +position=< 43791, 54724> velocity=<-4, -5> +position=<-21672, -21610> velocity=< 2, 2> +position=<-54367, 11106> velocity=< 5, -1> +position=< 32866, 22004> velocity=<-3, -2> +position=< 32874, 43819> velocity=<-3, -4> +position=<-32533, 43820> velocity=< 3, -4> +position=<-21648, 22010> velocity=< 2, -2> +position=<-43493, -21616> velocity=< 4, 2> +position=< 43763, 43813> velocity=<-4, -4> +position=<-54359, 54720> velocity=< 5, -5> +position=< 43794, 43814> velocity=<-4, -4> +position=< 54653, -54327> velocity=<-5, 5> +position=<-10739, 11099> velocity=< 1, -1> +position=<-32577, 22008> velocity=< 3, -2> +position=< 54696, -32518> velocity=<-5, 3> +position=< 11076, 54722> velocity=<-1, -5> +position=<-10776, -32522> velocity=< 1, 3> +position=<-54358, 32912> velocity=< 5, -3> +position=< 11087, -10712> velocity=<-1, 1> +position=< 43758, -21613> velocity=<-4, 2> +position=< 54693, -54328> velocity=<-5, 5> +position=<-21628, 43820> velocity=< 2, -4> +position=<-54343, 54725> velocity=< 5, -5> +position=< 21940, -54331> velocity=<-2, 5> +position=<-43492, -43427> velocity=< 4, 4> +position=< 21986, 43816> velocity=<-2, -4> +position=< 11060, -10704> velocity=<-1, 1> +position=< 54696, 11106> velocity=<-5, -1> +position=< 32876, 32913> velocity=<-3, -3> +position=< 43787, 22007> velocity=<-4, -2> +position=<-32586, 22008> velocity=< 3, -2> +position=< 32899, -10703> velocity=<-3, 1> diff --git a/2018/src/day10.rs b/2018/src/day10.rs index 6511175..4dedc4f 100644 --- a/2018/src/day10.rs +++ b/2018/src/day10.rs @@ -1,25 +1,126 @@ +use std::i32; +use std::collections::HashSet; +use std::io::BufRead; +use std::io::BufReader; use std::io::Read; +use itertools::Itertools; +use itertools::MinMaxResult; +use regex::Regex; + use common::Solution; #[derive(Default)] -pub struct Day10 {} +pub struct Day10 { + points: Vec<(i32, i32)>, + speeds: Vec<(i32, i32)>, +} impl Day10 { pub fn new() -> Self { Default::default() } + + fn read_inputs(&mut self, input: &mut Read) { + let reader = BufReader::new(input); + let matcher = Regex::new(r"position=<\s*(-?\d+),\s*(-?\d+)> velocity=<\s*(-?\d+),\s*(-?\d+)>").unwrap(); + + for line in reader.lines() { + let line = line.unwrap(); + let groups = matcher.captures(&line).unwrap(); + + self.points.push((groups[1].parse().unwrap(), groups[2].parse().unwrap())); + self.speeds.push((groups[3].parse().unwrap(), groups[4].parse().unwrap())); + } + } + + fn print_state(&self) -> String { + let points: HashSet<_> = self.points.iter().collect(); + let (xmin, xmax) = match self.points.iter().map(|&(x, _)| x).minmax() { + MinMaxResult::MinMax(x, y) => (x, y), + _ => unreachable!(), + }; + let (ymin, ymax) = match self.points.iter().map(|&(_, y)| y).minmax() { + MinMaxResult::MinMax(x, y) => (x, y), + _ => unreachable!(), + }; + + let mut buffer = String::with_capacity(((xmax + 1 - xmin) * (ymax + 1 - ymin)) as usize); + + for y in ymin..=ymax { + for x in xmin..=xmax { + let c = if points.contains(&(x, y)) { '#' } else { '.' }; + buffer.push(c); + } + + buffer.push('\n'); + } + + buffer + } + + fn run(&mut self, time_step: i32) { + for ((x, y), (dx, dy)) in self.points.iter_mut().zip(self.speeds.iter()) { + *x += dx * time_step; + *y += dy * time_step; + } + } + + fn height(&self) -> i32 { + match self.points.iter().map(|&(_, y)| y).minmax() { + MinMaxResult::MinMax(x, y) => { y - x + 1 } + _ => panic!("Input does not make sense."), + } + } } impl Solution for Day10 { - fn part1(&mut self, _input: &mut Read) -> String { - unimplemented!() + fn part1(&mut self, input: &mut Read) -> String { + self.read_inputs(input); + let mut prev = i32::MAX; + let mut height = self.height(); + while height < prev { + prev = height; + self.run(1); + height = self.height(); + } + self.run(-1); + self.print_state() } - fn part2(&mut self, _input: &mut Read) -> String { - unimplemented!() + fn part2(&mut self, input: &mut Read) -> String { + self.read_inputs(input); + let mut prev = i32::MAX; + let mut height = self.height(); + let mut steps = -1; + while height < prev { + steps += 1; + prev = height; + self.run(1); + height = self.height(); + } + format!("{}", steps) } } #[cfg(test)] -mod tests {} +mod tests { + use common::Solution; + use day10::Day10; + + const SAMPLE_INPUT: &[u8] = include_bytes!("samples/10.txt"); + + #[test] + fn sample_part1() { + let mut instance = Day10::new(); + let result = instance.part1(&mut SAMPLE_INPUT); + let correct = include_str!("samples/10.out.txt"); + assert_eq!(correct, &result); + } + + #[test] + fn sample_part2() { + let mut instance = Day10::new(); + assert_eq!("3", instance.part2(&mut SAMPLE_INPUT)); + } +} diff --git a/2018/src/samples/10.out.txt b/2018/src/samples/10.out.txt new file mode 100644 index 0000000..d9c58d5 --- /dev/null +++ b/2018/src/samples/10.out.txt @@ -0,0 +1,8 @@ +#...#..### +#...#...#. +#...#...#. +#####...#. +#...#...#. +#...#...#. +#...#...#. +#...#..### diff --git a/2018/src/samples/10.txt b/2018/src/samples/10.txt new file mode 100644 index 0000000..e499c03 --- /dev/null +++ b/2018/src/samples/10.txt @@ -0,0 +1,31 @@ +position=< 9, 1> velocity=< 0, 2> +position=< 7, 0> velocity=<-1, 0> +position=< 3, -2> velocity=<-1, 1> +position=< 6, 10> velocity=<-2, -1> +position=< 2, -4> velocity=< 2, 2> +position=<-6, 10> velocity=< 2, -2> +position=< 1, 8> velocity=< 1, -1> +position=< 1, 7> velocity=< 1, 0> +position=<-3, 11> velocity=< 1, -2> +position=< 7, 6> velocity=<-1, -1> +position=<-2, 3> velocity=< 1, 0> +position=<-4, 3> velocity=< 2, 0> +position=<10, -3> velocity=<-1, 1> +position=< 5, 11> velocity=< 1, -2> +position=< 4, 7> velocity=< 0, -1> +position=< 8, -2> velocity=< 0, 1> +position=<15, 0> velocity=<-2, 0> +position=< 1, 6> velocity=< 1, 0> +position=< 8, 9> velocity=< 0, -1> +position=< 3, 3> velocity=<-1, 1> +position=< 0, 5> velocity=< 0, -1> +position=<-2, 2> velocity=< 2, 0> +position=< 5, -2> velocity=< 1, 2> +position=< 1, 4> velocity=< 2, 1> +position=<-2, 7> velocity=< 2, -2> +position=< 3, 6> velocity=<-1, -1> +position=< 5, 0> velocity=< 1, 0> +position=<-6, 0> velocity=< 2, 0> +position=< 5, 9> velocity=< 1, -2> +position=<14, 7> velocity=<-2, 0> +position=<-3, 6> velocity=< 2, -1>