diff --git a/2018/loc.svg b/2018/loc.svg
index 67599d4..5cf04f8 100644
--- a/2018/loc.svg
+++ b/2018/loc.svg
@@ -32,10 +32,10 @@ z
+" id="me9ddb36467" style="stroke:#000000;stroke-width:0.8;"/>
-
+
@@ -71,7 +71,7 @@ z
-
+
@@ -110,7 +110,7 @@ z
-
+
@@ -139,7 +139,7 @@ z
-
+
@@ -153,7 +153,7 @@ z
-
+
@@ -193,7 +193,7 @@ z
-
+
@@ -286,10 +286,10 @@ z
+" id="mb89a9b780e" style="stroke:#000000;stroke-width:0.8;"/>
-
+
@@ -302,7 +302,7 @@ L -3.5 0
-
+
@@ -316,7 +316,7 @@ L -3.5 0
-
+
@@ -331,7 +331,7 @@ L -3.5 0
-
+
@@ -346,7 +346,7 @@ L -3.5 0
-
+
@@ -361,7 +361,7 @@ L -3.5 0
-
+
@@ -577,7 +577,7 @@ z
-
-
-
+
diff --git a/2018/src/common.rs b/2018/src/common.rs
index 38be760..cccba75 100644
--- a/2018/src/common.rs
+++ b/2018/src/common.rs
@@ -1,11 +1,36 @@
use std::collections::HashMap;
+use std::fmt::Debug;
use std::hash::Hash;
use std::io;
use std::io::Read;
-use std::str::FromStr;
use std::ops::Add;
use std::ops::Sub;
-use std::fmt::Debug;
+use std::str::FromStr;
+
+/// Utility trait for things representing coordinates.
+///
+/// This is implemented by default for any simple pair-tuple
+pub trait Point {
+ type CoordType;
+
+ /// Compute the manhattan distance between this and another.
+ ///
+ /// The distance will always be >= 0.
+ fn manhattan(self, other: Self) -> Self::CoordType;
+}
+
+impl Point for (T, T)
+ where T: Add