Есть одна задачка, вроде бы и легкая, но меня она постоянно заставляет задуматься.
Сообщение дилетанта (кроме первой части первого поста не понял ничего).
(Ну ведь в шахматы играют не только те, кто ходил на кружок)
Чем интересна задачка для меня - много ассоциаций, много уровней.
По ассоциациям -
напоминает "радар"(луч бегает по кругу) или стрелковую мишень (с кольцами). Но и там и там могут быть "неровности". Что тогда?
Камень брошенный на чистую воду дает правильные круги... а если это система каналов (или лабиринт)? Как будет распространяться волна?
А если камень бросить не в центр?
По уровням -
Похоже есть 3 направления решения:
1.
Математический - вычисление любого элемента матрицы по формуле.
Плюсы: Нет необходимости рассчитывать всю матрицу. Нет необходимости изобретать сложный алгоритм.
Спорно: Вопрос преимущества в скорости при необходимости расчета всей матрицы остается спорным.
Минусы: Сама формула может быть достаточно сложной. Необходимость модификации формулы при введении дополнительных условий (например, "островов"). В некоторых случаях (реальных) формула вообще может не существовать.
2.
Алгоритмический - создание алгоритма последовательного обхода, соответствующего
условию задачи.
Плюсы: Можно не знать математики. Работает "на любой местности".
Спорно: При "легком" алгоритме может быть быстрее математического варианта (если нужно заполнить всю матрицу)
Минусы: нельзя сразу вычислить значение нужного элемента.
3.
Комбинированный - по формуле вычисляются отдельные элементы, а остальные заполняются по алгоритму (так, наверное, проще с математикой и логикой алгоритма будет)
Дальше, по этим трем вариантам конкретно...
1. Не хватило мозгов и желания... Увидеть формулу в одном из постов (судя по коментам такой вариант был) - не смог, т.к. не знаю этого языка, да и напряжно (избыточная работа) выявлять алгоритм из кода обратно.
3. Матрица разбивается диагоналями на 4 сектора. Определяется значение на диагоналях (достаточно очевидная мат.формула). Остальное "интерполируется".
2. Матрица заполняется нулями (признак ненумерованности ячейки). Задается начальная точка (х,у) и ее значение "1". Задается первоначальные шаги (step_x, step_y) - это не для циклов, диапазон - [-1,0,+1]. Задается направление движения.
Дальше пишем маленькую функцию изменения значений шагов (step_x, step_y) в зависимости от направления "вращения" и "заполненности" правого(или левого) кандидата для определения индексов следующей ячейки.
Запускаем цикл нумерации из первоначальной точки, внутри которого определяем индексы следующей ячейки...
(можно модифицировать для любой начальной точки, любого направления и любой матрицы, даже криволинейной)
Может чего забыл в какую-то "ячейку" вписать - уточняйте.
Еще возникает ассоциация с "физиками"(математиками) и "лириками"(алгоритмиками).
По традиции "физикам" кажется их позиция важнее.
Кстати, тут есть и параллель с мужским и женским отношением к жизни, детям, друг к другу...