3BV из Сапер платы представляет собой минимальное количество щелчков , необходимых для решения совета , если вы уже знаете решение. Это расшифровывается как «Bechtel Board Benchmark Value». Вот его сайт, объясняющий это.
Ниже приведена решенная доска Сапер. Флаги обозначают мины; плитки без мин указывают количество соседних мин, в том числе по диагонали, за исключением того, что плитки, которые должны иметь «0», оставляются пустыми. На рисунке показано, какие плитки нужно щелкнуть, чтобы решить план.
Клики, подсчитанные в пользу 3BV:
- Один для каждой заполненной области пустых плиток (ноль мин рядом) и их непустых соседей.
- Один за другим не мой плитки.
Другой пример (3BV = 39)
Учитывая двумерный массив значений, 0
для очистки и 1
для шахты (или логического значения), вернуть 3BV .
Размеры доски будут не менее 8х8 и не более 24х30 включительно. Ваша программа должна обрабатывать все возможные доски, а не только примеры.
Примечание: доска никогда не будет содержать только мины.
Пример ввода / вывода:
[[0,0,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0],
[0,0,0,1,0,0,1,0],
[0,1,0,0,1,0,0,0],
[0,0,1,0,0,0,0,1],
[0,0,0,1,0,0,0,0],
[0,0,0,0,0,0,1,0],
[0,0,0,0,0,0,0,1]]
23
[[0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0],
[0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0],
[0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1],
[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1],
[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0],
[0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0],
[1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1],
[0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0],
[0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0],
[0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0],
[0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0],
[0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0]]
187
источник
Ответы:
MATLAB,
92908683797472 байтаЭто решение принимает входные данные в виде 2D-матрицы 0 и 1 и отображает значение 3BV для предоставленного входного сигнала.
Вот немного модифицированный демо в Octave для тех из вас, кто не имеет MATLAB.
объяснение
Входная матрица расширяется с использованием матрицы 3 x 3,
1
а затем инвертируется (используя~
), которая идентифицирует все точки, которые не имеют мин как соседей (1
) или do (0
). Чтобы определить количество связанных областей, мы используемbwlabel
для обозначения каждой связанной области1
's. Первый выход - это матрица меток (0
где вход был нулевым, а любое значение в диапазоне,1...N
где был1
вход на входе,N
- это индекс подключенной группы, к которой он принадлежит). Второй вывод - это количество регионов (количество кликов, необходимое для их открытия). Результатbwlabel
показан на изображении слева.Мы расширяем первый результат
bwlabel
использованияimdilate
(все ненулевые элементы расширяются), используя матрицу 3 x 31
. Результат показан на изображении посередине.Чтобы определить оставшиеся клики, мы затем подсчитаем квадраты, которые не находятся в этой расширенной области (
~imdilate()
), а не мину (-x
) (белые квадраты на изображении справа) и добавим это к общему количеству открытых областей (число разные цвета на изображении слева), чтобы получить 3BV.источник
Октава,
86847966 байтЭто решение создает анонимную функцию с именем,
ans
которой затем можно передать двумерную матрицу0
's и1
'. Логика та же, что и в моем ответе на MATLAB, но использует несколько приемов, которые Octave предлагает для экономии места.Это решение требует, чтобы
image
пакет был установлен.Демо здесь
источник
MATL,
242221 байт (не конкурирует)1 байт сохранен благодаря @Luis
Попробуйте это на MATL Online
объяснение
Опять же, это похоже на мои ответы MATLAB и Octave на этот вопрос.
источник
bwlabeln
функциональность была введена в MATL после того, как задание было опубликовано.