61 lines
1.5 KiB
PHP
61 lines
1.5 KiB
PHP
|
<?php
|
||
|
|
||
|
$cups = array_map('intval', str_split(file_get_contents('input.txt')));
|
||
|
$min = min($cups);
|
||
|
$max = max($cups);
|
||
|
|
||
|
$current_index = 0;
|
||
|
|
||
|
for ($i = 0; $i < 100; $i++) {
|
||
|
$current_cup = $cups[$current_index];
|
||
|
|
||
|
$pickups = array_splice($cups, $current_index + 1, 3);
|
||
|
|
||
|
while (count($pickups) < 3) {
|
||
|
$pickups[] = array_shift($cups);
|
||
|
}
|
||
|
|
||
|
$destination = $current_cup;
|
||
|
do {
|
||
|
$destination--;
|
||
|
if ($destination < $min) {
|
||
|
$destination = $max;
|
||
|
}
|
||
|
} while (in_array($destination, $pickups, true));
|
||
|
|
||
|
$destination_index = array_search($destination, $cups, true);
|
||
|
|
||
|
array_splice($cups, $destination_index + 1, null, $pickups);
|
||
|
$cups = array_values($cups);
|
||
|
|
||
|
// replace current index at its position
|
||
|
if ($cups[$current_index] !== $current_cup) {
|
||
|
$diff = array_search($current_cup, $cups, true) - $current_index;
|
||
|
for ($j = 0; $j < abs($diff); $j++) {
|
||
|
$cups[] = array_shift($cups);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
echo sprintf('move %u : %s%s', $i+1, implode(' ', $cups), "\n");
|
||
|
|
||
|
$current_index++;
|
||
|
if ($current_index >= count($cups)) {
|
||
|
$current_index = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// moves done, now count from 1
|
||
|
$index_1 = array_search(1, $cups, true);
|
||
|
$final_labels = '';
|
||
|
$current_index = $index_1 + 1;
|
||
|
for ($i = 1, $l = count($cups); $i < $l; $i++) {
|
||
|
if ($current_index >= $l) {
|
||
|
$current_index = 0;
|
||
|
}
|
||
|
$final_labels .= $cups[$current_index];
|
||
|
$current_index++;
|
||
|
}
|
||
|
|
||
|
echo $final_labels;
|
||
|
|