<?php
function invChangeN($pattern, $inversion)
{
$junc = array_slice(['r', '3', '5', '7'], 0, count($pattern));
$pos = [
'r' => [ 1, 7, 14],
'3' => [-3, 5, 14],
'5' => [ 3, 5, 10],
'7' => [-1, 7, 10]
];
$inversion -= 2;
$modScale = [];
foreach ($pattern as $p => $f)
{
$p += ($pos[$f][0]*pow($inversion,2) + $pos[$f][1]*$inversion + $pos[$f][2])/2;
$j = $junc[(array_search($f, $junc)+$inversion+2)%count($junc)];
$modScale[$p] = $j;
}
return $modScale;
}
var_dump(invChangeN([1=>"r",28=>"5",77=>"3"], 1));
preferences:
38.3 ms | 402 KiB | 5 Q