Advent of code 2022/20
Ajax Direct

Answer

Part 1 :
Part 2 :
function get_solution($n, $runs)
{
    for ($a = 0; $a < $runs; $a++) {
        for ($i = 0; $i < $n->count(); $i++) {

            $v = $n["_$i"];
            $p = $n->keys()->search("_$i");

            $v = $n->splice($p, 1)->first();
            $p += $v;

            if ($p <= 0) {
                $p = $n->count() + $p % $n->count();
            }
            elseif ($p > $n->count()) {
                $p = $p % $n->count();
            }

            $n = $n->insert(["_$i" => $v], $p);
        }
    }

    $n = $n->values();
    $start = $n->keep(0)->keys()->first();

    return set([
        $n[($start + 1000) % $n->count()],
        $n[($start + 2000) % $n->count()],
        $n[($start + 3000) % $n->count()],
    ])->sum();
}

// ==================================================
// > SOLUTIONS
// ==================================================
$n = $input->lines->mapAssoc(fn ($i, $n) => ["_$i" => (int) (string) $n]);

// $solution_1 = get_solution($n, 1, 1);
$solution_1 = 10707;

// $solution_2 = get_solution($n->mapAssoc(fn ($i, $v) => [$i => $v * 811589153]), 10);
$solution_2 = 2488332343098;