Введение:
Когда мы думаем о божьих коровках, мы обычно думаем о красном или темно-оранжевом жуке с черными пятнами. Хотя это и не обязательно так, поскольку есть также черные с божьими коровками с красными / оранжевыми пятнами или божьи коровки без пятен , в основном мы изображаем божьих коровок что-то вроде азиатской божьей коровки:
Следует также отметить, что пятна на божьих коровках почти всегда симметричны. И вот тут возникает эта проблема.
Вызов:
Учитывая целое число n( >= 0), выведите следующую божью коровку ASCII-art один или несколько раз, с симметричными точками, равномерно разделенными между двумя сторонами, а также двумя или более божьими коровками.
Вот макет божьей коровки по умолчанию:
_V_
/(@I@)\
/ | \
| | |
\ | /
''-!-''
Если n=0мы выводим божью коровку выше, как есть.
Когда значение nбольше нуля, мы либо заполняем пробелы ошибки ASCII-art строчными буквами o, либо заменяем |в центре заглавную букву O. Цель состоит в том, чтобы внести nизменения в «пустую» божью коровку, при этом производя симметричный вывод (для каждой божьей коровки) и выводя как можно меньше божьих коровок.
Итак, действительными выходами для n=1являются:
_V_
/(@I@)\
/ O \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| | |
\ O /
''-!-''
Но это было бы неверно:
_V_
/(@I@)\
/ | \
| o | |
\ | /
''-!-''
Допустимые выходы для n=2:
_V_
/(@I@)\
/ O \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ O \
| | |
\ O /
''-!-''
_V_
/(@I@)\
/ o|o \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| o | o |
\ | /
''-!-''
etc. There are a lot of possible outputs.
Первое, nчто больше невозможно вписать в одну божью коровку - это n=24. В этом случае вам придется разделить его как можно более равномерно на две божьи коровки (вы можете выбрать, выводить ли их рядом друг с другом или друг под другом - при желании один пробел или одна новая строка между ними). Например:
_V_ _V_
/(@I@)\ /(@I@)\
/o o|o o\ /o o|o o\
|o o | o o||o o | o o|
\o o|o o/ \o o|o o/
''-!-'' ''-!-''
ИЛИ:
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
Правила соревнований:
nбудет в диапазоне0-1000.- Вы можете выбрать вывод в STDOUT, возврат в виде массива / списка строк или 2D-символов и т. Д. Ваш вызов.
- Новые строки или лишние пробелы запрещены. Конечные пробелы и одиночная новая строка допускаются.
- Как упомянуто выше, когда нужны две или более божьих коровок, вы можете выбрать, выводить ли их рядом друг с другом или друг под другом (или смесь обоих ..)
- Когда две или более божьих коровок печатаются рядом друг с другом, допускается один дополнительный интервал между ними. Когда две или более божьих коровок печатаются друг на друге, допускается одна дополнительная строка между ними.
- Вы можете выбрать расположение божьих коровок на любом этапе последовательности, если они симметричны и равны входным данным
n. - Поскольку цель состоит в том, чтобы
nвнести изменения И как можно меньше божьих коровок, вы начнете использовать более одной божьей коровки, когда вышеn=23. Расположение этих божьих коровок не обязательно должно быть одинаковым. На самом деле, это даже невозможно для некоторых входов, таких какn=25илиn=50назвать два. - Кроме того, иногда невозможно равномерно разделить точки между двумя и более божьими коровками. В этом случае вам придется разделить их как можно более равномерно, с разницей не более 1.
Поэтому n=50, имея в виду последние два правила, это будет допустимый возможный результат (где первый баг имеет 16 мест, а два других имеют 17):
_V_ _V_ _V_
/(@I@)\ /(@I@)\ /(@I@)\
/oooOooo\ / O \ /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
\ | / \oooOooo/ \o oOo o/
''-!-'' ''-!-'' ''-!-''
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
oи Oвместо этого. Я немного изменил формулировку.
n=50примера, я считаю , что вы имеете в виду первый ошибка имеет 16 точек и два других каждый из которых имеет 17.


Мы начнем с инициализации новой строки и
Далее мы читаем количество мест из stdin и вычисляем количество требуемых божьих коровок.
Затем мы можем запустить внешний цикл для набора ошибок, подсчитав количество пятен для следующей божьей коровки, которая будет отрисована.
Для каждой божьей коровки мы вычисляем, нужно ли показывать большое центральное пятно (если
Точно так же мы вычисляем, должна ли быть показана другая пара больших пятен (если
Последняя часть инициализации справочной таблицы представляет собой цикл, который вычисляет, какие из небольших пятен необходимо отобразить. По сути, алгоритм таков: если
Затем мы помещаем закодированное строковое представление божьей коровки в стек. По сути, это просто простая строка, но она стала немного запутанной, когда я попытался втиснуть ее в пробелы в коде, чтобы исходный код образовывал прямоугольник.
К этому моменту мы готовы начать цикл вывода, обрабатывая символы один за другим, преобразовывая особые случаи (точки, разрывы строк и т. Д.) Через ранее созданную таблицу поиска.
Наконец, мы проверяем, отобразили ли мы все необходимые божьи коровки, иначе вернемся к началу внешнего цикла.