|
Задачка про остров
|
|||
---|---|---|---|
#18+
Портянка немного увеличилась, сделаны 2 изменения: 1) Теперь правильно вычисляется объем среза, когда он содержит сливающиеся ручейки. Чтобы при этом не пострадала скорость, пришлось расширить структуру ячейки. 2) Изменены параметры функции CountCells, чтобы не повторять в ней ранее сделанные вычисления Код: pascal 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 13:41 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
закодю свой вариант, как время будет) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 14:27 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Ой ой ой. ТЗ со входными и выходными данными отсутствует. Предлагаю взять картинку Мэйтона и как-то визуализировать результаты. А то получается как всегда. Классы и мы, тупые АСУТПшники с геттерами сеттреами можем. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 16:58 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Рекурсивный вариант получился немного короче. Здесь процедуры ReadCells и Neighbour те же, что и в нерекурсивном варианте 22079993 . Код: pascal 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 17:22 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
АСУ ТПшник Ой ой ой. ТЗ со входными и выходными данными отсутствует. Предлагаю взять картинку Мэйтона и как-то визуализировать результаты. А то получается как всегда. Классы и мы, тупые АСУТПшники с геттерами сеттреами можем. Предлагаю закрасить синим цветом где океан. Ну и картинку - побольше. На весь экран. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 17:25 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
mayton Предлагаю закрасить синим цветом где океан. Ну и картинку - побольше. На весь экран. Океан - ненужная деталь в этой задаче. Есть квадратный остров, за его пределами - минус бесконечность. Результат будет тем же. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 17:36 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Можно взять и нарисовать картинку такого плана 22077903 как и предлагал mayton пиксели-квадраты с четырьмя сторонами, 256 градаций серого, 0-океан, 1-255 разные высоты чем темнее тем выше, хотя можно и инвертировать, кому как нравится, перегнать ее в массив и обработать алгоритмом закрасив в 0 плитки оставшиеся под водой, потом обратно в картинку и сравнивать что получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 17:36 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Если лень формировать графику - воспользуйтесь псевдо-текстовым форматом (PPM) графики. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2020, 17:51 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Мимо проходил, вопрос возник. Соседство такое: - 4 5 это типа м-ца для сотовых ячеек? 2 (ху) 3 - 0 1 Никто не пробовал в полярных координатах мыслить? мне показалось соседство натуральнее будет, а то в матрице вроде прыгает туда-сюда, хотя бы уж по кругу пустили как в полярных. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2020, 20:50 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
exp98 Мимо проходил, вопрос возник. Соседство такое: - 4 5 это типа м-ца для сотовых ячеек? 2 (ху) 3 - 0 1 Никто не пробовал в полярных координатах мыслить? мне показалось соседство натуральнее будет, а то в матрице вроде прыгает туда-сюда, хотя бы уж по кругу пустили как в полярных. Я иногда. Рассеяно разглядывая глобус думаю что полярная сетка координат - хреновая идея. Вот если взять икосаэдр. И натянуть его на глобус. А потом образующие его треугольники разбить еще на 4 треугольника. И т.д рекурсивно. То мы получаем вполне себе красивую систему координат икосаэдральной системы. Где нет дефекта искажения координат как на полюсах. Равномерно по всей поверхности треугольнички будут примерно равны. Хотя где-то в узловых точках искосаэдра где сходятся в 1 точке 5 треугольников они будут не совсем равносторонние. Но это пустяк ИМХО. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2020, 21:01 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
В задаче как раз "нет дефекта искажения координат", всё на плоскости. Соседи только по окружности ( а это номер угла) и по радиусу (это вообще +-1). Ещё по прямым (квазикасательные к окружностям == секущие их в 2-х точках). Вот и все 6 направлений. Всё очень естественно. Лежит в той же м-це только по кругу, но я не навязываю. Может автор матрицы так и мыслил, из матрице только не скажешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2020, 21:28 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Остров мог быть не шестиугольный. Могла быть система островов с изломанной береговой линией. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2020, 22:53 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Рекурсивный вариант получился немного короче. Здесь процедуры ReadCells и Neighbour те же, что и в нерекурсивном варианте 22079993 . Код: pascal 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.
Давайте поставим более широко задачу. Допустим наш остров имеет очень мелкую и точную детализацию высот. Даже не 1000х1000 пикселов а давайте зададим в 1млн на 1 млн. Вобщем давайте подумаем о параллелизме основного алгоритма. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2020, 23:45 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
авторЕсть квадратный остров, за его пределами - минус бесконечность. Как бы абсолютно согласен, но есть просьба, без кода на словах. Потому как концептуально обсуждаем все же. Никаких утилитарных применений не предвидится. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 00:04 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
mayton Давайте поставим более широко задачу. Допустим наш остров имеет очень мелкую и точную детализацию высот. Даже не 1000х1000 пикселов а давайте зададим в 1млн на 1 млн. Вобщем давайте подумаем о параллелизме основного алгоритма. Зачем? Теоретически высота одного угла может влиять на решение в другом. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 00:13 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Параллелизм на графовых задачах - это сложная тема. Это - челендж. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 10:05 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
АСУ ТПшник, если на пальцах, то: Рекурсивный алгоритм 22080232 работает со "срезающими" ячейками. Так мы назовем те ячейки, которые срезают уровень воды в соседних ячейках до своей высоты или своего уровня воды (до того, что выше). После всех возможный срезаний сложим объем воды в каждой ячейке и получим ответ. Чтобы уменьшить объем вычислений и обезопаситься от зацикливания, мы предварительно отсортируем ячейки по высоте. Сначала объявим срезающими все граничные ячейки и ячейку максимальной высоты. Множество срезающих ячеек может пополняться в ходе вычислений. Основной цикл перебирает ячейки в отсортированном массиве и для каждой срезающей ячейки вызывает процедуру среза, которая, перебирая ее соседей, делает следующее: 1) если уровень воды в соседе ниже или равен срезу, то пропускаем соседа, 2) если высота соседа выше среза, то объявляем соседа срезающей ячейкой, 3) иначе срезаем уровень воды в соседе и для него вызываем процедуру среза. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 11:41 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov, Соседних? Замкнутые контуры он как отработает? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 15:07 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Все таки самый правильный вариант идти сверху срезая по слоям, и разделяя ячейки на сухие и затопленные, начинаем с максимальной высоты острова (если начинать не с максимальной, то замкнутые контуры на первом шаге будут сухими), ВСЕ площадки не имеющие статуса и равные текущему срезу объявляются сухими сразу, далее мы должны найти все замкнутые контуры на срезе равные по высоте срезу, ячейки внутри контуров, которым не присвоен статус сухие, получают статус затопленные. Опускаемся на уровень ниже и проделываем ту же процедуру, ячейки со статусом затопленные в рассмотрение не принимаются, ячейки со статусом сухие могут образовывать контур, статусы установленные на предыдущих уровнях изменению не подлежат, они окончательные. Вопрос только в том как искать замкнутые контуры на уровнях, т.е. контуры у которых высота равна высоте среза или они уже имеют статус сухие. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 15:29 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Проходим по текущему срезу по периметру и ставим временный статус под водой на данном этапе отлива, всем ячейкам до которых сможем добраться проходя от периметра вглубь, ячейки с высотой равной срезу не переходим, таким образом у нас будут три градации на уровне, ячейки у которых ранее поставлен статус сухие и ячейки равные по высоте срезу - сухие окончательно и бесповоротно, ячейки до которых смогли добраться от периметра на данном срезе - временный статус под водой на данном этапе, на следующих шагах этот статус не учитывается, все оставшиеся без статуса ячейки это ячейки внутри контуров и ниже высоты среза, присваиваем им окончательный статус - под водой. Нужен хороший алгоритм обхода от периметра в глубину всех связанных ячеек имеющих уровень ниже уровня среза. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 15:47 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Поиск в ширину для каждого среза, для каждой точки периметра которая не имеет статус сухая и не была найдена в поиске для предыдущих точек, перед обработкой следующего среза временный статус под водой сбрасывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 15:56 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Здесь под спойлером исправленный рекурсивный алгоритм, он заметно быстрее нерекурсивного. Оба алгоритма выдают одинаковый результат на больших массивах случайных данных, что, по-видимому, означает, что в них одинаковое количество одинаковых ошибок ) Для больших массивов имеет смысл переписать процедуру SortCells, заменив сортировку вставками на быструю сортировку. Код: pascal 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 16:44 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
iOracleDev Соседних? Замкнутые контуры он как отработает? Все ячейки по границе контура станут срезающими и срежут уровень внутри контура. iOracleDev Все таки самый правильный вариант идти сверху срезая по слоям. Это приведет к лишней работе по многократному срезу уровня в ячейках. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 16:54 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
mayton Остров мог быть не шестиугольный. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 17:56 |
|
Задачка про остров
|
|||
---|---|---|---|
#18+
Aleksandr Sharahov Все ячейки по границе контура станут срезающими и срежут уровень внутри контура. Внутри контура не обязательно все ниже, там могут быть дургие контуры, а в них еще контуры, не совсем понимаю каким образном наружные срежут все внутри, глубина лужи может быть маленькой, а лужа при этом очень высоко. iOracleDev Это приведет к лишней работе по многократному срезу уровня в ячейках. Мы не будем рассматривать ячейки статус которых уже точно определен, по крайней мере описанный алгоритм логически понятен и даст верный результат, алгоритм с сортировкой по высоте меня сразу настораживает, каким образом он обработает многократно вложенные замкнутые контуры? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2020, 20:15 |
|
|
start [/forum/topic.php?fid=16&msg=39927120&tid=1339799]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
148ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 231ms |
total: | 488ms |
0 / 0 |