- 22, Oct 2024
- #1
Мы все видели картинки с надписью «Сколько квадратов на этом изображении? 98% не поймут это правильно!» Что ж, вот ваш шанс посмеяться над этими 98%.
Вход
Прямоугольный блок, состоящий всего из 2 символов. В общем виде это определяется формулой м строки, каждая из которых содержит н персонажи.
Пример:
Input: xxx00 xx000 Output: 2 (2)
Это может быть представлено как строка, разделенная символом новой строки, массив строк или двумерный массив символов. Любые другие типы ввода следует предлагать в комментариях.
Выход
Результатом будет целое число, представляющее общую сумму квадраты представлены индивидуально оба символы (в псевдокоде num_squares(char1) + num_squares(char2))
А квадрат определяется как набор экземпляров одного и того же символа, которые полностью очерчивают геометрический квадрат с длиной стороны минимум 2. Эти квадраты не обязательно должны быть заполнены символом, который их обрисовывает. Следующие примеры иллюстрируют эту концепцию:
Input:
0000
0000
0000
0000
0000
0000
Output: 26 (34)
Подсчет очков
Ваша программа будет оцениваться по двум критериям в порядке убывания важности:
- Количество символов в блоке кода, которые не являются частью квадрата, как определено выше (вам следует стремиться свести это число к минимуму!) (Примечание: символы внутри квадрата не считаются автоматически частью этого квадрата) (Примечание 2: символы новой строки не учитываются в этом счете)
- Количество байтов (вы должны стремиться минимизировать это!)
Второй критерий будет решающим фактором для первого.
Правила конкурса
- В целях гибкости вы можете использовать любые два буквенно-цифровых символа для замены 0 и x из моих примеров, если они не являются одним и тем же символом.
- Каждая строка во входном прямоугольнике должна иметь одинаковую длину и не должна содержать никаких символов, кроме 2, указанных для вашего ответа на запрос (кроме символа новой строки, если применимо).
- Тривиальные квадраты (квадраты 1x1, обозначаемые одним символом) не учитываются при выводе. Они отстой.
- Ваша программа не должна обрабатывать пустой ввод, но она должна обрабатывать случаи, когда квадраты невозможны (когда один из размеров входного прямоугольника равен 1).
- Вы также можете указать, что вы обрабатываете квадраты, выровненные по диагонали, если вам нравится эта задача. Это будет добавлено к выходным данным, указанным в спецификациях задачи.
Пример этой концепции:
Input:
xxx0x0x000xx0xx0
0x000x00x0x0xx00
00xx0xx00xx0000x
x0x0x0x0x00x0xxx
00xx0xxx00xxx0x0
Output: 0 (5)
Тестовые случаи
Ниже приведены некоторые основные тестовые примеры, которым должна соответствовать ваша программа. Значение в скобках — это результат, если вы решите подсчитывать квадраты, выровненные по диагонали.
Input:
x00000xxx0
Output: 0 (0)
Input:
xxxx
x00x
x0xx
xxxx
Output: 2 (2)
Input:
00x00
0x0x0
x000x
0x0x0
00x00
Output: 6 (1 diagonally aligned square of side length 3, 5 diagonally aligned squares of side length 2)
x0
0x // no squares
xxx
x0x
xxx // 1 square of side length 3
0000
0xx0
0xx0
0000 // 1 square of side length 2, 1 square of side length 4
0000xxx
00x00xx
00000xx
xxxxx0x
Общие правила
- Применяются стандартные правила за ваш ответ, поэтому вам разрешено использовать STDIN/STDOUT, функции/метод с соответствующими параметрами и типом возвращаемого значения, полные программы. Ваш звонок.
- Лазейки по умолчанию запрещены.
- Если возможно, добавьте ссылку с тестом вашего кода.
- Настоятельно рекомендуется добавить объяснение вашего ответа.
- Есть ли у меня вопросы/исправления/советы? Комментарий ниже! Это мой первый вопрос, поэтому я рад узнать из него как можно больше.
#код-вызов