You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.5 KiB
54 lines
1.5 KiB
<?php |
|
|
|
include 'functions.php'; |
|
|
|
$rows = explode("\n", file_get_contents('input.txt')); |
|
|
|
// Make the list of asteroids coordinates |
|
$asteroids = array_flatten( |
|
array_filter( |
|
array_map(static function($row, $i) { |
|
return array_filter(array_map(static function($col, $j) use ($i) { |
|
if ($col === '#') { |
|
return sprintf('%s,%s', $i, $j); |
|
} |
|
|
|
return null; |
|
}, str_split($row), range(0, strlen($row)))); |
|
}, $rows, range(0, count($rows))) |
|
) |
|
); |
|
|
|
$asteroid_count = []; |
|
foreach ($asteroids as $asteroid_base) { |
|
$count = 0; |
|
foreach ($asteroids as $asteroid_target) { |
|
if ($asteroid_base === $asteroid_target) { |
|
continue; |
|
} |
|
|
|
$points_base = explode(',', $asteroid_base); |
|
$points_target = explode(',', $asteroid_target); |
|
|
|
$points = getPointsBetween($points_base[0], $points_base[1], $points_target[0], $points_target[1]); |
|
|
|
$add_point = true; |
|
foreach ($points as $point) { |
|
if ($point === $asteroid_base || $point === $asteroid_target) { |
|
continue; |
|
} |
|
if (in_array($point, $asteroids)) { |
|
$add_point = false; |
|
break; |
|
} |
|
} |
|
if ($add_point) { |
|
$count++; |
|
} |
|
} |
|
$asteroid_count[$asteroid_base] = $count; |
|
} |
|
|
|
arsort($asteroid_count); |
|
var_dump($asteroid_count); |
|
echo current($asteroid_count); |