|
Задачка про остров
|
|||
---|---|---|---|
#18+
iOracleDev Выше нарисован. цветастый он какой-то ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 15:58 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov цветастый он какой-то сохранял как 256 градаций серого в свойствах 8 бит и по размеру похоже, не знаю почему он цветастый, в графике не разбираюсь)) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 16:06 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
С ppm очень просто. Это текстовый файл. В бинарными форматами - вот образец. Записывает шум. И пытается прочитать. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Для серого - будет тоже самое наверное только тип картинки поставить в TYPE_BYTE_GRAY. Но я с ним не работал. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 16:07 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
PPM хорошо описан тут https://ru.wikipedia.org/wiki/Portable_anymap ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 16:08 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
iOracleDev Было бы очень неплохо ... получить на выходе файл у которого все пиксели оставшиеся под водой имеют белый цвет. При отладке без графической визуализации я получаю даже больше, выводя в мемо количество воды, которое набрал каждый шестиугольник матрицы. В общем, каждый отлаживается на свой вкус и цвет. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 16:34 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Как будет угодно. Я просто в этой задаче увидел элемент технологии из game-dev. Поэтому художнику по дизайну ландшафтов будет очень презентативно увидеть результат как его показывают такие приложения как CorelBryce, RealWorldTerran e.tc. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2020, 16:44 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Имя пользователя1 Добавку от Майтона он не проглотит, придется модифицировать одну строчку. Ну и неясность некоторая имеется: волна высотой 3 перевалит через гору высотой 3 или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 10:51 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Имя пользователя1 Aleksandr Sharahov пропущено... Добавку от Майтона он не проглотит, придется модифицировать одну строчку. Ну и неясность некоторая имеется: волна высотой 3 перевалит через гору высотой 3 или нет? Тогда рассмотрим оба варианта, при условии, что вода поднимается до уровня 3. 1. Когда перевалит. Заливаем всю карту водой без ограничений. Если теперь мы просуммируем воду по всем ячейкам, то получим решение исходной задачи, а если просуммируем по ячейкам, в которых уровень воды равен 3 и ниже, то получим решение для Майтон-1. Ведь в этом варианте ячеек с уровнем воды 4 и выше просто не может быть. 2. Когда не перевалит. Рассуждаем аналогично. Если просуммируем по ячейкам, в которых уровень воды равен 2 и ниже, то получим решение для Майтон-2. Ведь в этом варианте ячеек с уровнем воды 3 и выше просто не может быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 11:25 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov, В словесном описании есть алгоритм? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 13:53 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
iOracleDev Aleksandr Sharahov, В словесном описании есть алгоритм? Попробую суммировать здесь. Данные ячейки: H=высота, L=уровень воды. 1. Инициализация. Читаем карту высот, присваивая H. В каждой ячейке на границе карты полагаем L:=H, в остальных L:=+бесконечность 2. Заполнение водой. Обходим все ячейки в цикле в порядке возрастания H. Для задачи в формулировке Майтона обход заканчиваем досрочно при встрече первой ячейки с H=M (уровень прилива). Если в процессе обхода обнаружим, что у ячейки L=H, то вызываем процедуру среза, передавая эту ячейку параметром. 3. Подсчет объема воды. Для задачи в исходной формулировке суммируем все разности (L-H), для формулировки Майтона суммируем только те разности, у которых L<M. Процедура среза. Устанавливаем уровень среза C=L ячейки-параметра. Для всех ячеек-соседей, у которых L>C, делаем одно из двух: а) если H>C, то устанавливаем L:=H б) иначе устанавливаем L:=C и вызываем для этого соседа процедуру среза. Понятно, что от рекурсии в процедуре среза можно избавиться. Доказательство корректности алгоритма оставляю читателю ) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 14:49 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Я думаю о параллелизме острова. Пока - мысли. Даже не тезисы а просто мысли. 1. Чтоб эффективно параллелить обработку матрицы высот (HeightMatrix) мне нужна гарантия что каждый процесс (поток) владеет своей частичкой матрицы. 2. Если остров представлен квадратной матрицей - то мы его можем разделить на 4 квадранта. Как разделить? Провести искусственную высоту равную +MAX_INT по вертикали и по горизонтали через центр. 3. Можно применить алгортм заливки водой каждого квадратнта одновременно (4 процесса запроцессят каждый свою матрицу данных). 4. После финала 4х процессов я убираю искусственные стенки. Я их понижаю до исходного уровня. И повторяю 1 общий алгоритм для всего острова. 5. Моя идея базируется на предположении что 80% работы по переливанию воды уже выполнены на шаге (3) и осталось только слегка подкорректировать водичку в "кратерах" и "ямках". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 16:01 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
По визуализации. Та чёрно-белая картинка которую я запостил - неудачна. Она представляет собой гору. А мне нужно архипеллаг островов. И желательно с ямками. Побольше ямок. Для визуализации алгорима желательно Grayscale картинку трансформировать в географическую. С цветовой маркировкой как принято в картографии. Потом если океан залить синим цветом поверх такой карты - то будет очевидно где мы залили. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 16:08 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
mayton Я думаю о параллелизме острова... Идея очевидная, и легко реализуемая. Но отсутствует гарантия ускорения, можно нарваться на полный пересчет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 16:34 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov mayton Я думаю о параллелизме острова... Идея очевидная, и легко реализуемая. Но отсутствует гарантия ускорения, можно нарваться на полный пересчет. Ну это то о чем я говорил. Графовые алгоритмы вообще *уево параллелятся. Но нам повзло. У нас есть некая пространственная когерентность. Тоесть группа вершин может быть легко разделена или сгруппирована по декартовому признаку. В полно-связном графе например это сделать нельзя. А в для 6-связного (хексагоны) или для 4 связной вершины (пиксели) - очень даже удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 16:39 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov iOracleDev Aleksandr Sharahov, В словесном описании есть алгоритм? Попробую суммировать здесь. Данные ячейки: H=высота, L=уровень воды. 1. Инициализация. Читаем карту высот, присваивая H. В каждой ячейке на границе карты полагаем L:=H, в остальных L:=+бесконечность 2. Заполнение водой. Обходим все ячейки в цикле в порядке возрастания H. Для задачи в формулировке Майтона обход заканчиваем досрочно при встрече первой ячейки с H=M (уровень прилива). Если в процессе обхода обнаружим, что у ячейки L=H, то вызываем процедуру среза, передавая эту ячейку параметром. 3. Подсчет объема воды. Для задачи в исходной формулировке суммируем все разности (L-H), для формулировки Майтона суммируем только те разности, у которых L<M. Процедура среза. Устанавливаем уровень среза C=L ячейки-параметра. Для всех ячеек-соседей, у которых L>C, делаем одно из двух: а) если H>C, то устанавливаем L:=H б) иначе устанавливаем L:=C и вызываем для этого соседа процедуру среза. Понятно, что от рекурсии в процедуре среза можно избавиться. Доказательство корректности алгоритма оставляю читателю ) 1) основное отличие от 22079233 - там каждый раз ищется подходящая ячейка на п.4 и далее обрабатывается, а у тебя в процедуре среза в пункте (б) начинается рекурсия с обработкой соседних ячеек? 2) рекурсия заменена либо на "поиск в ширину" (с очередью), либо на "поиск в глубину" (со стеком)? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 16:45 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Имя пользователя1 Aleksandr Sharahov пропущено... Попробую суммировать здесь. Данные ячейки: H=высота, L=уровень воды. 1. Инициализация. Читаем карту высот, присваивая H. В каждой ячейке на границе карты полагаем L:=H, в остальных L:=+бесконечность 2. Заполнение водой. Обходим все ячейки в цикле в порядке возрастания H. Для задачи в формулировке Майтона обход заканчиваем досрочно при встрече первой ячейки с H=M (уровень прилива). Если в процессе обхода обнаружим, что у ячейки L=H, то вызываем процедуру среза, передавая эту ячейку параметром. 3. Подсчет объема воды. Для задачи в исходной формулировке суммируем все разности (L-H), для формулировки Майтона суммируем только те разности, у которых L<M. Процедура среза. Устанавливаем уровень среза C=L ячейки-параметра. Для всех ячеек-соседей, у которых L>C, делаем одно из двух: а) если H>C, то устанавливаем L:=H б) иначе устанавливаем L:=C и вызываем для этого соседа процедуру среза. Понятно, что от рекурсии в процедуре среза можно избавиться. Доказательство корректности алгоритма оставляю читателю ) 1) основное отличие от 22079233 - там каждый раз ищется подходящая ячейка на п.4 и далее обрабатывается, а у тебя в процедуре среза в пункте (б) начинается рекурсия с обработкой соседних ячеек? 2) рекурсия заменена либо на "поиск в ширину" (с очередью), либо на "поиск в глубину" (со стеком)? 1) Отличий много, и да, у меня начинается рекурсия. 2) Пофигу, у меня цикл в глубину с запоминанием направления возврата. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 17:12 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Взял картинку 22077693 , инвертировал (у меня чем более темный пиксель тем больше высота, так воспринимать картинку лучше), обработка с параметрами 30 - уровень океана после отлива, 100 - уровень до которого поднималась вода. Картинку для форума пережал в jpg меньшего размера, на ней много артефактов сжатия. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2020, 22:13 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
iOracleDev, визуально) но из-за сжатия невозможно оценить правильность работы ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 00:00 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov, Погонял по высотам и по своим картинкам с концентрическими системами, вполне себе адекватно работает, правда медленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 00:20 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
iOracleDev Aleksandr Sharahov, Погонял по высотам и по своим картинкам с концентрическими системами, вполне себе адекватно работает, правда медленно. у меня 22083065 самый быстрый из 3х проверенных, его гонял? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 10:02 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov iOracleDev Aleksandr Sharahov, Погонял по высотам и по своим картинкам с концентрическими системами, вполне себе адекватно работает, правда медленно. у меня 22083065 самый быстрый из 3х проверенных, его гонял? Хвастун. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:08 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
mayton, ты не понял: имелось в виду из 3х *моих* проверенных ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:19 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov mayton, ты не понял: имелось в виду из 3х *моих* проверенных Ладно не обижайся. Я шучу. Пятница все таки. Над параллелизмом думал? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:27 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov у меня 22083065 самый быстрый из 3х проверенных, его гонял? Нет конечно, гонял свой с последовательными срезами сверху, правда считал не на массиве а на связном списке узлов, внутри узла массив из соседей и геттер, плюс очередь использовал, просто на массиве должно быть намного быстрее. Сложность алгоритма K*N, где K - количество уровней, N - количество плиток, распарралелить думаю не получится, следующий уровень зависит от предыдущего, хотя надо подумать, наверное можно посчитать каждый срез как будто он единственный, а потом последовательно наложить начиная сверху, тогда распараллелится очень хорошо. Твой я не понимаю, за счет чего он должен выбираться из кратеров? Ты для каждой плитки ищешь выход в океан? Как определяешь что не попал в loop по плиткам? Как выходишь за пределы стены кратера, при условии неограниченной вложенности кратеров и их уровней? Сколько проходов по каждой плитке и от чего зависит, какая временная сложность алгоритма? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:31 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov ты не понял: имелось в виду из 3х *моих* проверенных Берешь картинку и вперед)) картинка от mayton-а не очень хорошая для проверки, она большая но сложных случаев, чтобы было сразу видно ошибки, на ней нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2020, 12:34 |
|
|
start [/forum/topic.php?fid=16&startmsg=39928051&tid=1339799]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
166ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 272ms |
0 / 0 |