|
Задачка про остров
|
|||
---|---|---|---|
#18+
Моя хотел бы доставать это из облака-мыл-ру-публик. Как выше iOracleDev в Моя картинка ... mypict ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2020, 19:58 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
exp98 iOracleDev Моя картинка ... mypict Как понимаю вы все у финиша. Вопрос у меня теперь. Я слышал, выговорили про срезы. Основа алгоритма какая? Делать попикселные срезы, в каждом искать замкнутые контуры, затем просуммировать внутренности контуров, границы не считать, так? Без никаких деревьев или графов, да? Финиш пройден, проверил 3 варианта (графы идут лесом): 1) Нарезаем слоями по высоте и заполняем водой каждый слой по отдельности. Отладил не сразу из-за проблемы слияния ручейков. Работает, но медленно. Плюс в том, что результаты можно использовать для отладки. 2) Ставим по периметру бесконечной высоты стены, заливаем все это водой под завязку, а потом срезаем лишнюю воду, проходя по высотам снизу вверх. Простейшая рекурсия. Работает быстрее т.к. каждая ячейка считается 1 раз. 3) Тот же вариант без рекурсии. Чуть быстрее. Скорость всех вариантов заметно зависит от организации данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2020, 20:14 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Конвертировал PNG/jpg картинки с ландшафтами в полу-текстовый pgm с помошью Линуксового convert. Хм... странно получается только заголовок текстовый. А туловище битмапы не-текстовый (не принтабельный вид). Оно вроде-бы не страшно но я хотел сохранить эту текстовую природу. Это поможет в топике легче разбирать различные ситуации. Пришлось потратить еще час времени чтоб написать на java пару утилит для PPM(цветные) PGM(черно белые) конвертеры с чисто текстовым представлением. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 00:05 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
exp98 Забавно, ужели вот так диффузно вода порсачивается сквозь точечное облако? Как понимаю вы все у финиша. Вопрос у меня теперь. Я слышал, выговорили про срезы. Основа алгоритма какая? Делать попикселные срезы, в каждом искать замкнутые контуры, затем просуммировать внутренности контуров, границы не считать, так? Без никаких деревьев или графов, да? Мой вариант простой, иду сверху срезая высоты, например пусть будет полное затопление и максимальная высота острова 255, тогда первый срез будет на высоте 255, при этом плитки на том же уровне считаются для среза сухими. Провожу поиск в ширину от периметра, все плитки до которых добрался получают временный статус под водой, плитки того же уровня не доступны, в замкнутые контуры ограниченные плитками того же уровня поиск в ширину пробраться не может. Отработал уровень, в итоге для 255 уровня получаю плитки с временным статусом и плитки которые статус не получили, далее прохожу по всем плиткам и снимаю временный статус, если временный статус не был установлен ставлю постоянный статус, если плитка имеет ту же высоту что и обрабатываемый срез (255), то она получает постоянный статус "сухая", если плитка имеет меньшую высоту и не имела временный статус она получает постоянный статус "под водой". Таким образом все плитки того же уровня получили статус "сухая", плитки имеющие уровень ниже и оказавшиеся в замкнутых контурах получили статус "под водой". Считаем следующий уровень 254, точно также поиском в ширину от периметра, плитки получившие постоянный статус на предыдущих уровнях недоступны (не зависимо от того сухие они или под водой, их статус уже постоянный), точно также получаем плитки с временным статусом - те до которых поиск смог добраться, плитки того же уровня и замкнутые контуры ограниченные плитками того же уровня или плитками имеющими постоянный статус недоступны для поиска, он не может в них пробраться. Далее повторяем процедуру, снимаем временный статус и для плиток того же уровня ставим статус "сухая", для остальных не имевших временного статуса ставим статус "под водой", постоянные статусы полученные на предыдущих уровнях уже неизменны до конца расчета. Если наводнение не полное и не покрывает остров целиком, то для самого верхнего уровня все плитки не получившие временный статус получают постоянный статус "сухая", даже если их уровень ниже уровня наводнения, поскольку вода не имела к ним доступа. Картинки подъема воды делал просто считая последовательно по одному срезу, задавая уровень подъема воды и уровень океана после отлива одинаковым. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 01:15 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov 1) Нарезаем слоями по высоте и заполняем водой каждый слой по отдельности. Отладил не сразу из-за проблемы слияния ручейков. Работает, но медленно. Плюс в том, что результаты можно использовать для отладки. Откуда ты там ручейки взял? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 01:16 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
exp98, Мой вариант здесь: 22077648 Пока не заводил, нет времени. Там никаких срезов, сплошной поиск в ширину, правда, для обработки озёр хочу вместо оного сделать построчный floodfill, это даст ускорение на кейсах с большими лужами, особенно в виде лабиринтов. В общем, говнокодить придётся много ) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 01:29 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
iOracleDev Aleksandr Sharahov 1) Нарезаем слоями по высоте и заполняем водой каждый слой по отдельности. Отладил не сразу из-за проблемы слияния ручейков. Работает, но медленно. Плюс в том, что результаты можно использовать для отладки. Откуда ты там ручейки взял? начни реализовывать floodfill, сразу поймешь ) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 09:27 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Саш. А твои сорцы где-то опубликованы в последней версии? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 10:45 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
mayton Саш. А твои сорцы где-то опубликованы в последней версии? Сорцы 22081712 . Пример карты и результат 22081766 . Там же чуть ниже еще, если надо, процедура генерации случайной карты и датчик случайных чисел. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 11:05 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Я смогу воспроизвести его под Linux Free Pascal (fpc) правда с твоей помошью и если аккуратно выкосить создание формочек. Потом я сделаю некий сравнительный тест твоего сорца и iOracleDev-s. И еще особо меня интересовали эвристики основанные на предварительном анализе карты. Например шум и пики - один подход. Множество горизонтальных плато - другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 12:51 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov начни реализовывать floodfill, сразу поймешь ) Закраска области ограничена областью, при этом если эта область внутри концентрической системы, то без костылей она будет закрашена не в тот цвет, потому что нужный цвет лежит за границей доступной области в общем я не вижу других логичных алгоритмов кроме поиска в ширину по срезам или без срезов, но для каждой точки, что в плане производительности тоже не очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 16:11 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Вавилонскую башню (спираль) я так и неосилил. Подниму в топике Программинга - отдельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2020, 16:15 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
это типа такого, только с градиентной беговой дорожкой внутри? И ... забыл спросить, у вас пикселы 6-угольные в сечении? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 21:48 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
exp98 И ... забыл спросить, у вас пикселы 6-угольные в сечении? Мы упростили для визуализации, хотя если у вас на мониторе и в графических файлах пиксели шестиугольные, то мы идем к вам)) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 23:17 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Не совсем. Не стенки. А спиральная дорога вокруг горы. Я искал формулу вида z = f(x,y) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 23:17 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
iOracleDev exp98 И ... забыл спросить, у вас пикселы 6-угольные в сечении? Мы упростили для визуализации, хотя если у вас на мониторе и в графических файлах пиксели шестиугольные, то мы идем к вам)) Топик стартовал как решение графовых задач с 6й степенью вершин. Но для визуализации что 4 что 6 степени одинаковы. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.02.2020, 23:20 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Спсб за пояснения. Искал способ примазаться к чужой славе, но здесь всё схвачено) mayton формулу вида z = f(x,y) Предлагаю брутальный способ закраски (даже танцуя не от пикселов к цвету, а лучами как получится, с перекрытиями). Спираль - это точки радиуса, а будет полуоткрытый ]отрезок], не идеальный асфальт на дороге, конечно, с камешками. Раз уж ввязался. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 12:44 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
параметрически ? Как f(R,phi) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 13:00 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
По поводу Rust. Я был неправ. Завяз в мелочах. Задача чуть более широкая а мелкие технические вопросы постоянно меня блокируют. Я попробую реализовать на Java. А потом уже с экспериментами. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 13:04 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Не удалось мне собрать на FPC под Linux твой исходник. Надо что-то добавить. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Я не знаток и не могу за 10 минут пофиксить языковые недочеты. Больше тратить время не хочется. Демотивирует. 96 строка - это конец исходника. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 15:10 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
mayton, просто вызывалку нужно добавить в конец Что-то вроде Код: pascal 1. 2. 3. 4. 5.
. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 15:21 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Уже лучше. Бинарник собрался. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Работает секунд 10 потом выдает число Код: pascal 1. 2.
Не вижу функционала загрузки картинок. Насколько я понимаю Саша решил генерить карты белым шумом. Это несоклко сужает поле для экспериментов. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 15:27 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Вобщем нужно доработать. Переделать HEX ячейки в пикселы. И заргужать вот с таких вот картинок. https://people.sc.fsu.edu/~jburkardt/data/pgma/pgma.html Без этого мы не сможем сравнивать алгоритмы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 15:29 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
iOracleDev Кто захочет поразвлекаться, исходные данные в массиве, списком и графом Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75.
iOracleDev. Это последняя версия твоего исходника? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 18:32 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
mayton, Нет, вот исходник: iOracleDev Мой вариант, он конечно не оптимален в плане реализации, зато квадратно-гнездовой и по нему можно проверять более оптимальные варианты. Площадка: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
Превращение картинки в массив и обратно Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85.
Сам расчет, на входе массив, на выходе тоже массив Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162.
Использование: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.02.2020, 21:03 |
|
|
start [/forum/topic.php?fid=16&msg=39932441&tid=1339799]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 282ms |
0 / 0 |