+\r
+mind :: !FootballField !Home !(!BrainInput, !Void) -> (!BrainOutput, !Void)\r
+mind field home (x=:{me,others}, mm) = (fix {px=pp2 cp.px (m 2.5), py=up cp.py (m 3.5)} (m 1.0)) (x, mm)\r
+ where\r
+ (comparator, pp1, pp2, targetsig) = if (home == West) ((<), (-), (+), (\w.w)) ((>), (+), (-), (~))\r
+ sf = sortBy (\x y.comparator x.pos.px y.pos.px) others\r
+ (cp, up) = closestPos (zip2 [1..] sf) (pp1 me.pos.px xWidthFootballer) {px=targetsig (scale 0.5 field.flength), py=(m 0.0)} comparator\r
+ \r
+closestPos :: [(Int, Footballer)] Metre Position (Metre Metre -> Bool) -> (Position, (Metre Metre -> Metre))\r
+closestPos [] _ d _ = (d, (+))\r
+closestPos [(i, x):xs] p d c\r
+| c p x.pos.px = (x.pos, if (i rem 2 == 0) (+) (-))\r
+| otherwise = closestPos xs p d c\r