Одне з моїх улюблених математичних занять - намалювати прямокутну сітку, а потім знайти всі прямокутники, які видно в цій сітці. Ось візьміть це запитання і ризикніть для себе!
Чи можете ви порахувати кількість прямокутників?
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
Загальна кількість прямокутників для цієї міні-шахи 4 х 4 рівно
100
Ви мали рацію?
Супутня математика: Скільки прямокутників є на контрольній дошці 8 × 8?
Змагання
Напишіть найкоротшу функцію / програму, яка підраховує загальну кількість видимих прямокутників на нетороїдальній сітці / зображенні .
Пов'язані завдання: Порахуйте унікальні прямокутники! , Знайдіть кількість прямокутників у двовимірному байтовому масиві .
Формат введення
Ваша функція або програма можуть вибрати роботу з текстовим введенням або з графічним введенням.
Введення тексту на основі тексту
Сітка буде m -by- n ( m рядків, n стовпців) ASCII сітка, що складається з таких символів:
- пробіли,
-
для частин відрізка горизонтальної лінії,|
для частин сегмента вертикальної лінії та+
для куточків.
Ви можете представити цю сітку ASCII як вхід / аргумент до вашої програми / функції у вигляді
- один рядок, розмежований перервами рядків,
- рядок без нових рядків, але з одним або двома цілими числами, що кодують розміри сітки, або
- масив рядків.
Примітка . Текстовий вхід містить принаймні 1 рядок і принаймні 1 стовпець.
Графічне введення
Крім того, сітки кодуються як чорно-білі зображення PNG шириною 5 * n пікселів і висотою 5 * м . Кожне зображення складається з 5 px * 5 px блоків, які відповідають входу ASCII:
- Проміжки перетворюються на білі блоки. Ці блоки називаються блоками пробілів .
- Сегменти та кути рядків перетворюються на блоки, що не містять простору. Центральний піксель таких блоків - чорний.
- Редагувати: Якщо два кути (на вході ASCII) з'єднані лінійним відрізком, відповідні блоки блоків (у графічному вході) повинні бути також з’єднані чорною лінією.
Це означає, що кожен блок можна було вибрати лише (Клацніть тут для збільшення зображення) .
Примітка . Сині межі призначені лише для ілюстрації. Графічний вхід має принаймні 5 пікс. Ширини та 5 пікс. Ви можете перетворити графічний вхід у будь-яке монохромне зображення, можливо, в інші формати файлів зображень). Якщо ви вирішили конвертувати, вкажіть у відповіді. Штраф за конверсію не передбачений.
Формат виводу
Якщо ви пишете програму, вона повинна відображати негативне число із зазначенням загальної кількості прямокутників на вході.
Якщо ви пишете функцію, вона також повинна повернути невід'ємне число із зазначенням загальної кількості прямокутників на вході.
Приклади справ
Випадок 1, графічний: ( 30 px * 30 px), ASCII: ( 6 рядків, 6 col)
+--+
| |
| ++-+
+-++ |
| |
+--+
Очікуваний вихід: 3
Випадок 2, графічний: ( 20 px * 20 px), ASCII: ( 4 рядки, 4 col)
++-+
|+++
+++|
+-++
Очікуваний вихід: 6
Випадок 3, Графіка: ( 55 px * 40 px), ASCII: ( 8 рядків, 11 cols)
+++--+
+-+++ |
| | ++--+
+--+--++ ++
| ||
| ||
++ +--++
++
Очікуваний вихід: 9
Випадок 4, графічний: ( 120 px * 65 px), ASCII: ( 13 рядків, 24 cols)
+--+--+ +--+ +--+ +--+
| | | | | | | | |
+--+--+ | | | | | |
| | | +--+--+--+--+--+
+--+--+ | | | |
| | | | ++
+-+-+-+-+ +--+ +--+ ++
| | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
Очікуваний вихід: 243
Випадок 5, Graphic: ( 5 точок * 5 . Точок Так, це є!), ASCII: Просто один пробіл.
Очікуваний вихід: 0
Випадок 6, графічний: ( 35 px * 20 px), ASCII: ( 4 рядки, 7 col)
+--+--+
|++|++|
|++|++|
+--+--+
Очікуваний вихід: 5
Припущення
Щоб полегшити життя, ви гарантуєте, що:
- Будучи нетороїдальною , сітка не згортається ні горизонтально, ні вертикально.
- Немає вільних кінців, наприклад,
+---
або+- -+
. Усі відрізки рядків мають два кінці. - Дві лінії, що зустрічаються в,
+
повинні перетинатися одна з одною в цій точці. - Вам не доведеться турбуватися про недійсні введення.
Діють правила щодо стандартних лазів. Будь ласка, розглядайте квадрати як прямокутники. За бажанням, ви можете видалити пробіли в кожному рядку сітки.
Це код-гольф , тому зробіть свій запис якомога коротшим. Текстові та графічні рішення змагатимуться разом.