Skip to content

Instantly share code, notes, and snippets.

@Deifinger
Last active March 11, 2019 20:43
Show Gist options
  • Save Deifinger/f385ebb3516eb1c557d8cc08aab5832e to your computer and use it in GitHub Desktop.
Save Deifinger/f385ebb3516eb1c557d8cc08aab5832e to your computer and use it in GitHub Desktop.
Дана строка 1 и символы A-Z и AA-ZZ, нам известно что A = 1, Z = 26, AA=27, ZZ =702 и т.д А вторая строка такая же но начинается с A=703. НУжно при вводе цифры вывести строку и символы для данной циры..
<?php
//Задача:
//- Дана строка 1 и символы A-Z и AA-ZZ, нам известно что A = 1, Z = 26, AA=27, ZZ =702 и т.д
//А вторая строка такая же но начинается с A=703. НУжно при вводе цифры вывести строку и символы для данной циры..
function generate_row($prev_c = '', $nested = 0, $iter_nest = 1, $deep = 2)
{
$str = '';
++$nested;
for ($c = 65; $c < 91; $c++) {
if ($nested < $iter_nest) {
$str .= generate_row($prev_c . chr($c), $nested, $iter_nest, $deep);
} else {
$str .= ($prev_c ?: '') . chr($c);
}
}
if ($iter_nest < $deep) {
$str .= generate_row('', 0, ++$iter_nest, $deep);
}
return $str;
}
function generate_rows(int $amount = 2)
{
$rows = [];
for ($r = 1; $r <= $amount; $r++) {
$rows[$r] = generate_row();
}
return $rows;
}
function read_coord(array $rows, int $number)
{
$row_length = 702;
$one_sign_length = 25;
$row_num = (int)ceil(($number + 1) / $row_length);
$number -= ($row_num - 1) * $row_length;
$row = $rows[$row_num];
if ($number <= $one_sign_length) {
$symbol = $row[$number];
} else {
$rest = $number - $one_sign_length;
$symbol = $row[$one_sign_length + $rest * 2 - 1] . $row[$one_sign_length + $rest * 2];
}
return [$row_num, $symbol];
}
$number = (int)readline('Enter number from 1:');
$rows = generate_rows();
[$row_num, $symbol] = read_coord($rows, $number - 1);
echo "Row num: $row_num\n";
echo "Symbol: $symbol\n";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment