<?php
function create_word(string $alphabet, int $index): string
{
$base = mb_strlen($alphabet);
$fix = 1;
$length = 1;
foreach (range(1, $base) as $k) {
$pow = pow($base, $k);
if ($fix + $pow <= $index) {
$fix += $pow;
$length++;
} else {
break;
}
}
$template = sprintf("%0{$length}d", base_convert($index - $fix, 10, $base));
$replace = implode('', range(0, $base));
return strtr($template, $replace, $alphabet);
}
for ($i = 1; $i <= 81; $i++) {
echo $i . ' = '. create_word("abc", $i) . \PHP_EOL;
}
preferences:
113.22 ms | 410 KiB | 5 Q