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