К списку задач
Средне Решено: 0 Процент решений: 0%

Поиск числа в спирали

Найдите значение по заданным строке и столбцу в расширяющейся числовой спирали.

Чему вы научитесь

  • Находить формулу в числовом узоре
  • Делить задачу по слоям и чётности
  • Использовать 64-битные целые для больших значений

Условие

Бесконечная спираль начинается с верхней левой ячейки. Первые четыре строки и столбца показаны ниже. Продолжайте тот же шаблон, расширяя спираль квадратными слоями. Координаты начинаются с 1.

 1   2   9  10
 4   3   8  11
 5   6   7  12
16  15  14  13

Верните значение одной ячейки, не строя всю таблицу целиком.

Реализуйте функцию number_spiral(row, column).

Ввод

row: Номер строки, считая сверху, начиная с 1.

column: Номер столбца, считая слева, начиная с 1.

Вывод

Верните число, находящееся в этой позиции.

Ограничения

1 ≤ row, column ≤ 1 000 000 000. Значение помещается в знаковый 64-битный целый тип.

Примеры

Пример 1
Ввод:
row = 3
column = 2

Ожидаемый вывод:
expected = 6
Ввод:
long long row = 3;
long long column = 2;

Ожидаемый вывод:
long long expected = 6;
Ввод:
long row = 3;
long column = 2;

Ожидаемый вывод:
long expected = 6;

Пояснение

Во второй ячейке третьей строки на рисунке находится число 6.

Пример 2
Ввод:
row = 1
column = 4

Ожидаемый вывод:
expected = 10
Ввод:
long long row = 1;
long long column = 4;

Ожидаемый вывод:
long long expected = 10;
Ввод:
long row = 1;
long column = 4;

Ожидаемый вывод:
long expected = 10;

Пояснение

Четвёртый квадратный слой начинается с числа 10 в верхней строке.

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Спираль строится квадратными слоями, поэтому клетка принадлежит слою, определяемому большей координатой.

Подсказка 2

Используйте чётность слоя, чтобы понять, растут ли значения по строке или по столбцу.

Подсказка 3

Следите за тем, от какого угла слой начинается: от верхнего левого или от противоположного.

Ожидаемая сложность

O(1) по времени, O(1) доп. памяти

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.