Вот к чему иногда могут привести безобидные развлечения.
2 месяца назад я внезапно увлекся игрой в тральщика.
Особенно мне было интересно побить рекорд не по времени, а по количеству мин на поле.
На «начальном» уровне игры поле 9х9 и 10 минут. Конечно, это было очень просто, и я начал увеличивать количество мин.
12, 15, 20 штук, это была простая разминка.
Затем после многих попыток мне исполнилось 25. Игра с 27 минами (заминирована каждая 3-я ячейка) заняла у меня несколько часов.
Не останавливаясь на достигнутом, я выставил сразу 30 штук.
Я выиграл через полторы недели, играя по часу в день.
Больше месяца я пытался разминировать 32 мины, и даже в лучших попытках оставалось найти около 10 мин, а потом его взорвали.
Но мне очень хотелось победы, и я решил, что без радикальных мер можно прожить еще пару лет. Пришла идея написать программу, вычисляющую вероятность обнаружения мины в каждой ячейке, в любой момент игры.
Основная сложность в игре заключается в том, куда тыкать, если полученные цифры не однозначно определяют наличие или отсутствие мины в какой-либо ячейке.
Но, тем не менее, эти вероятности могут быть очень разными.
Если мы видим, что в данной ячейке теоретически может быть мина, но это будет достигнуто, если несколько мин расположены в строго определенных местах, то мы конечно можем смело кликать по этой ячейке.
Но лично я плохо представляю, как можно математически точно вычислить эти вероятности.
Поэтому все эти проблемы пришлось перенести в программу.
На написание у меня ушло около 2 часов, но, наконец, после десятка попыток я победил! Собственно сама программа: Алгоритм работает самым простым способом, который называется «в лоб»: пользователь вводит данные с минного поля, нажимает кнопку, затем программа расставляет недостающие мины в своем массиве случайным образом, но так, чтобы они удовлетворяли введенным данным.
Заполнение минами происходит достаточно большое количество раз, при этом подсчитывается, сколько раз каждая ячейка была посещена миной, и это число делится на количество итераций.
То есть получаются примерные вероятности существования мины в каждой ячейке, а затем отображаются на экране (в процентах).
(программисты и математики, сильно не ругайте :)
Ввод данных:
Результат:
Если кому-то интересно, скажу пару слов о работе:
Играя в игру «Сапер», вам необходимо вносить в ячейки данные о текущем положении дел.
Ячейка может быть пустой (если о ней ничего не известно), цифрой от 0 до 8 или буквой «м», если ячейка помечена как заминированная.
Все 3 кнопки справа рассчитывают вероятности, разница заключается в разном количестве итераций (100, 1000, 10000).
Поэтому, чтобы не ждать слишком долго расчета, я рекомендую сначала нажать первую кнопку.
Остальное ясно.
Вы можете скачать Здесь (200кб).
Сразу приношу извинения за отсутствие какой-либо «надежной» защиты.
Всё, с сапером я закончил.
Хотя бы на пару дней.
Теги: #сапер #Аномальное программирование
-
Топ-10 Докладов Devopsdays Москва
19 Oct, 24 -
Ломая Покровы
19 Oct, 24 -
Робот На Базе Android
19 Oct, 24