48 lines
1.1 KiB
PHP
48 lines
1.1 KiB
PHP
<?php
|
|
|
|
$cards = range(0, 10006);
|
|
|
|
$commands = explode("\n", file_get_contents('input.txt'));
|
|
|
|
function deal_into_new_stack(array $cards)
|
|
{
|
|
return array_reverse($cards);
|
|
}
|
|
|
|
function cut(array $cards, $n_card)
|
|
{
|
|
$slice = array_splice($cards, 0, $n_card);
|
|
return array_merge($cards, $slice);
|
|
}
|
|
|
|
function deal_with_increment(array $cards, $n)
|
|
{
|
|
$new_cards = [];
|
|
$deck_length = count($cards);
|
|
$card_index = 0;
|
|
$i = 0;
|
|
while($deck_length !== count($new_cards)) {
|
|
for (; $i < $deck_length; $i += $n) {
|
|
$new_cards[$i] = $cards[$card_index];
|
|
$card_index++;
|
|
}
|
|
$i = abs($deck_length - $i);
|
|
}
|
|
|
|
ksort($new_cards);
|
|
return $new_cards;
|
|
}
|
|
|
|
foreach ($commands as $command) {
|
|
if (strpos($command, 'deal with increment') === 0) {
|
|
$cards = deal_with_increment($cards, (int) substr($command, 20));
|
|
}
|
|
if (strpos($command, 'cut') === 0) {
|
|
$cards = cut($cards, (int) substr($command, 4));
|
|
}
|
|
if ('deal into new stack' === $command) {
|
|
$cards = deal_into_new_stack($cards);
|
|
}
|
|
}
|
|
|
|
echo array_search(2019, $cards, true); |