Знайдіть кількість прямокутників у двовимірному байтовому масиві


12
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000111111000000000000000000011111111111111100000000000000000
0000000000000100001000000111111000000011111111111111100000000010000000
0000000000000100001000000111111000000000000000000000011000000000000000
0000000000000111111000000111111000000000000000000000011000000000000000
0000000000000000000000000000111111000000000000000000000000000000000000
0000000000000000000000000000111111000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000

Вам надається двовимірний масив байтів розміром mx n. Гарантується, що всі байти дорівнюють 1 або 0. Знайдіть кількість прямокутників, представлених знаками 1, коли їх переглядають у 2d, як показано вище.

Для підрахунку вважаються лише повністю заповнені прямокутники.
Прямокутники повинні бути оточені 0, якщо вони не знаходяться на краю (1-й діагонально торкаються прямокутники 1 добре, хоча (див. Приклад)).

Наприклад, у верхньому масиві є 5 дійсних прямокутників.

Ви можете використовувати будь-яку мову.


1
Я думаю, що кращим способом слова є те, що сказати: прямокутники повинні бути оточені 0, або краєм
Cruncher

Зроблено. Дякуємо, що формулювали його кращою англійською.
мікробій

Про що 1100\n1100\n0011\n0011?
Cruncher

1
Я думаю, що тому я написав "сусіднє / перекриття". Це 2 дійсні прямокутники з мого початкового наміру. Але стан "навколишнього" зараз їх обмежує. Чи є у вас кращий спосіб пояснити це
мікробій

1
Навіть у сусідніх це неоднозначно, чи означає діагоналі суміжні чи ні. Така ж неоднозначність, чи то оточений, чи не, оточений по кутах, чи просто з боків
Cruncher

Відповіді:


2

GolfScript, 107 символів

.n?):L;'1'/{,}%{1$+)}*;][]\{:A{{+}+[1L.~)-1]%&}+1$\,.@^\[[[A]]+{|}*]+}/{.{L%}{%$..&1$,1$,/*$=}:C~\{L/}C&},,

Вхід повинен бути вказаний на STDIN.

Приклади:

11
01
-
0

111
111
-
1

100
001
001
-
2

11100
10101
11100
-
1

101
010
101
-
5

Дивіться коментарі вище - здається, що "дійсні" прямокутники повинні мати ширину / висоту обох> 1.
Paul R

@PaulR Це правило не записане у питанні, за всіма розумними визначеннями це ідеально тонкі прямокутники - можливо, я додам це пізніше.
Говард

Я погоджуюся з вашим визначенням - я просто зазначив розбіжність у коментарях - схоже, що ОП потребує оновлення питання, щоб зробити його більш остаточним.
Пол Р

Я уточнив, що прямокутник розміром 1 є дійсним.
мікробій

Але ви також сказали в коментарях у відповідь на: "Тільки для уточнення, вироджені прямокутники не повинні рахуватися, правильно? Наприклад, чи є один 1 або один підручник / підколонка суміжного 1 недійсним?" кажучи: "Так, вони недійсні, і їх не слід вважати".
Пол Р
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.