AOC, day 8, part 2

<?php

$input = file_get_contents('./d8input1.txt', true);

$map = array();

foreach(preg_split("/((\r?\n)|(\r\n?))/", $input) as $line) {
	if(strlen($line) > 2) {
		$map[] = str_split($line);
	}
}

$msz = sizeof($map);
$ant = array();
for($i=0;$i<$msz;$i++) {
	for($j=0;$j<$msz;$j++) {
		$char = $map[$i][$j];
		if($char == ".") {
			continue;
		}
		$ant[$char][] = array($i, $j);
	}
}

$nod = array();
foreach($ant as $char) {
	$csz = sizeof($char);
	for($i=0;$i<$csz-1;$i++) {
		for($j=$i+1;$j<$csz;$j++) {
			$x1 = $char[$i][0];
			$y1 = $char[$i][1];
			$x2 = $char[$j][0];
			$y2 = $char[$j][1];
			$nod[$x1][$y1] = 1;
			$nod[$x2][$y2] = 1;
			$xdiff = $x2 - $x1;
			$ydiff = $y2 - $y1;
			// roll x left
			$xtmp = $x1;
			$ytmp = $y1;
			while(0 <= $xtmp 
			&& $xtmp < $msz 
			&& 0 <= $ytmp 
			&& $ytmp < $msz) {
				$nod[$xtmp][$ytmp] = 1;
				$xtmp -= $xdiff;
				$ytmp -= $ydiff;
			}
			// roll x right
			$xtmp = $x2;
			$ytmp = $y2;
			while(0 <= $xtmp 
			&& $xtmp < $msz 
			&& 0 <= $ytmp 
			&& $ytmp < $msz) {
				$nod[$xtmp][$ytmp] = 1;
				$xtmp += $xdiff;
				$ytmp += $ydiff;
			}
		}
	}
}

$total = array_sum(array_map("count", $nod));
print($total."\n");

?>