|
Задачка про остров
|
|||
---|---|---|---|
#18+
Имя пользователя1 iOracleDev пропущено... Обход по какому правилу? По правилу поиска выхода из лабиринта? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 20:04 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
АСУ ТПшник На словах , на первый взгляд должно работать. А вот с реализацией мне кажется наплачетесь. Ветвистые деревья придется отрабатывать. всё время так - идея норм., в реализации костыли и подпорки ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 20:05 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Поэтому слезно прошу - посмотрите на мой вариант. Алгоритм один послойный. Тупой как пробка. Самое сложное - найти таки эти окружности, что опять же решается в двумерном пространстве. На каждую лужу - заряжаем опять ровно этот же алгоритм в рекурсии, пока не дойдем до вариант - что луж в остатке нет. Я же не просто так написал, закрашивание оно игтуитивно понятно было с самого начала. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 20:08 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
АСУ ТПшник, А чего на него смотреть? mayton кодить хочет постоянно, предложи ему реализовать все три алгоритма и сравнить)) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 20:12 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
АСУ ТПшник, ну вот, например, кейс - где-то посреди острова несколько смежных ячеек 5, окруженных 6-ками и 7-ками. Нашли эту лужу, записали объем, залили цементом. Дальше снова ищем лужи? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 20:14 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
мой вариант, если выгорит, то тянет на O(N) по вспомогательной памяти - закраска, очередь для поиска и т.д., - и где-то O(5N) по времени - каждую клетку отрабатываем один раз, ничего не ищем. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 20:18 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
автору вот, например, кейс - где-то посреди острова несколько смежных ячеек 5, окруженных 6-ками и 7-ками. Нашли эту лужу, записали объем, залили цементом. Дальше снова ищем лужи? Да не так же. Вы прошли слоями сверху 1 раз. У вас после этого прохода остались скажем 10 луж. Вам надо натравить данный алгоритм на каждую из луж, просто чтобы убедиться, что нет такого что лужа в луже. Пример лужи в луже с кольцевым островком:5393935. Для такого крайнего случая чуть усложнятся вычисления объема. Ну как карты рисуют с высотами, умозрительно срезают слои и сразу видно - здесь пустота здесь земля. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 20:58 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
АСУ ТПшник Вы прошли слоями сверху 1 раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 21:21 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
ну сверху в низ вы идете. Грубо у вас скажем набор высот хексов такой 5 7 8 9. Тут получается что есть по уровням для нарезки 4 слоя + нуль (море). На первом слое вы получите двухмерный срез (смотреть сверху на остров). Там будет только один хекс к пример (вершина). Следующий слой - 8. Там уже будет другая картинка на срезе. И так далее. Каждый срез надо посмотреть на наличие замкнутых фигур внутри среза (дырка в бублике или подобное). Дырка в бублике - лужа. Ее выкидываем из последующего расмсотрения (т.е. уменьшаем количество хексов для анализа). Представьте что вы смотрите сверху 2 горы, одна простая , вторая вулкан с жерлом. Если срезать по слою то получится что -то типа картинки внизу. Я уже не знаю как еще объяснить. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 21:54 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
По этой картинке вы на третем шагу вычислите одну лужу (жерло вулкана). Если бы это был не замкнутый контур, то овала внутреннего не было бы. Был бы надгрызенный бублик (прогрызенный до дырки) Типа так ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 21:58 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Вроде как исходные данные. Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 22:00 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
АСУ ТПшник Грубо у вас скажем набор высот хексов такой 5 7 8 9. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 22:05 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
mayton Вроде как исходные данные. Код: sql 1. 2. 3. 4. 5.
тогда соседние ячейки как раз 22076725 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 22:09 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
авторесли что, выбор высот может быть охренительный, сравнимый с количеством ячеек может быть не спорю. Только как это принципиально отличается от слоев в вашем случае? В частности в моем - на каждой итерации уменьшение требуемых обсчетов. И для большинства островов не из фантастики - вполне себе разумно распределяет нагрузку. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 22:15 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
В исходных данных мой алгоритм найдет дырку на 5ом слое. Код: c# 1. 2. 3. 4. 5.
Тут как раз возвращаемся к слабому месту в моем варианте - как эти кольца выявлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 22:20 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Вобщем закругляясь на сегодня - и Ваш алгоритм вполне себе работоспособен, так же будете крестиками слои закрашивать, ну вернее не слои, и то, куда вода с моря при поднятии постепенном заливается. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 22:24 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
АСУ ТПшник В исходных данных мой алгоритм найдет дырку на 5ом слое. Код: c# 1. 2. 3. 4. 5.
если я правильно понял, то эту дырку выявить на слое, высота которого равна 1, и он срезает всё, кроме 1. но должен быть ещё предыдущий слой высотой 2, который выявит такое: Код: c# 1. 2. 3. 4. 5.
тут у нас бассейн площадью 2, объемом 2 , потому что до этого шел слой высотой 3, который сделал так Код: c# 1. 2. 3. 4. 5.
но тут, и в слоях выше, замкнутых озер не было. итого сколько разных высот, столько и слоёв, правильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 22:42 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
iOracleDev АСУ ТПшник, А чего на него смотреть? mayton кодить хочет постоянно, предложи ему реализовать все три алгоритма и сравнить)) Нет уж. Я не такой всеядный. Позвольте мне все таки самому выбирать что кодить. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 22:42 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
АСУ ТПшник, в общем, если при переходе к очередному слою быстро вычислять замкнутые контуры (их площади), то вполне жизненно. Пока не совсем понимаю, как это делать. ну и предварительно надо обойти весь массив ячеек, для каждого слоя наколбасить коллекцию ячеек, которые будут закрашиваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 22:51 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
авторно должен быть ещё предыдущий слой высотой 2, который выявит такое Да все праваильно я упустил, что там тоже 2-ка окружена. А так да - вы правильно ход моих мыслей поняли. Выявится дыра окруженная x состоящая из двух клеток 1 и 2 Код: c# 1. 2. 3. 4. 5.
А на последующей итерации этот кусок уже вывалится из анализа, т.е. он не будет анализировать единичку во второй строке. После прохождения по слоям у вас получится что есть одна лужа. Как ее объем вычислить - разговор отдельный, но вы легко можете тупо почитать вес каждого хекса в данной луже. Но предположим что что-то сложное в луже. /\/\ /\/ \/\ / \ Натравите алгоритм на сию лужу, представив что это такой остров в море (рекурсия). Алгоритм выделит опять лужу. Т.е. в первом проходе выделится слой /\* что между ними пока непонятно* /\ А после рекурсии на этом "новом острове"вы увидите /\/\ ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 22:54 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Вообще имхо ваш пример как раз лучше решается вашим способом, но реализация не наглядна и не очевидна будет (куча массиов, подмассивов и так далее). Но вот на больших площадях мой ИМХО нагляднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 23:05 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
АСУ ТПшник Но предположим что что-то сложное в луже. Код: plaintext 1. 2. 3.
тут самый верхний слой дает маленькую лужу, второй слой даёт большую лужу с островом (если это гора с симметрией вокруг центра). и вот опять же, как быстро считать площади дырок на каждом срезе. ну а мой вариант закрасит внешнюю стену, потом большую лужу и с неё доберется до внутренней горы, которую тоже закрасит, и озеро вверху. Как раз та самая рекурсия. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 23:15 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Я бы еще попробовал классифицировать острова по виду рельефа. - шумящие (решаем только методом грубой силы) - террасы (классифицируем близкие поверхности (плато)) и рассматриваем как 1 узел высоты вершины графа. - лабиринты (где вода физическая может вытекать достаточно долго. Можно попробовать алгоритм "Волны"). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2020, 00:05 |
|
|
start [/forum/topic.php?fid=16&msg=39924944&tid=1339799]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
181ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 301ms |
0 / 0 |