Гексагональные тесселяции , или наклоны плоскости, имеют три цвета - это означает, что при использовании только трех цветов, таких как красный, синий и зеленый, каждый шестиугольник может быть окрашен без каких-либо двух шестиугольников, имеющих общую границу. Частичный пример, показывающий такой шаблон.
Учитывая частичное шестиугольное разбиение на листы в ASCII (через STDIN, чтение из файла и т. Д.), Измените цвета символов (с помощью кодов ANSI, обработки изображений и т. Д.), Чтобы соответствовать этой окраске. Поворот - середина шестиугольников ( *
ниже) - три цвета, и линии между ними должны быть смесью их двух соответствующих *
цветов гексагона . Если линия находится на внешней границе, она должна соответствовать соответствующей *
.
Например, с учетом частичного шестиугольного мозаичного
/ \ / \ / \ / \
| * | * | * | * |
\ / \ / \ / \ /
| * | * | * |
\ / \ / \ /
предположим, что мы решили закрасить верхний левый гекс *
красным, а два его соседа - синим и зеленым (по часовой стрелке). Тогда |
линия должна быть пурпурной, а /
линия - желтой. Если мы продолжим раскрашивать, мы в итоге получим что-то вроде этого (увеличено для ясности):
Или для ввода
/ \
| * |
/ \ /
| * |
/ \ /
| * |
\ /
Вы можете покрасить его так (увеличено для ясности):
Несколько дополнительных тестовых случаев (ваш код должен уметь их обрабатывать):
/ \ / \
| * | * |
\ / \ /
| * |
/ \ / \
| * | * |
\ / \ /
/ \
| * |
\ / \
| * |
/ \ /
| * |
\ /
/ \
| * |
\ /
правила
- На входе гарантированно будет хотя бы один шестиугольник, а на входе не будет «дыры».
- Вам не нужно начинать красить с красного, если вы соблюдаете правило трех цветов.
- Если частичный лист может быть двухцветным, вы можете сделать это без штрафа (как во втором примере) - вам не обязательно экстраполировать частичный лист на полный лист.
- Шестиугольные центры
*
должны быть окрашены красным, синим или зеленым, а линии между ними должны быть голубым, желтым или пурпурным. Например, наличие пурпурного цвета*
не допускается, а красный|
или\
или/
должен находиться на внешней границе рисунка. Смотрите Цвета ниже. - Если ваша консоль не имеет этих точных цветов, пожалуйста, используйте ближайшее приближение и укажите в своем ответе, какое приближение вы используете.
- Начальные или конечные пробелы, включая завершающие символы новой строки, допустимы, если символы выстраиваются в линию.
- Частичная мозаика может быть введена с пробелом, чтобы сформировать прямоугольник, если это облегчает ваш код.
- Либо полная программа или функция приемлемы. Если функция, вы можете вернуть вывод, а не распечатать его.
- Вывод может быть на консоль, сохранен как изображение и т. Д.
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому применяются все обычные правила игры в гольф, и выигрывает самый короткий код (в байтах).
Цвета и цветовые смеси:
Доступны три основных цвета (с цветовыми кодами в десятичном формате RGB):
- красный
(255,0,0)
- зеленый
(0,255,0)
- синий
(0,0,255)
Комбинации:
- Красный и Зеленый объединяются, чтобы сделать Желтый
(255,255,0)
- Синий и зеленый объединяются, чтобы сделать голубой
(0,255,255)
- Красный и синий объединяются, чтобы сделать пурпурный
(255,0,255)
источник
*
Ответы:
JavaScript (ES6),
219203201 байтОбъяснение: Каждый символ обернут в
font
тег, чтобы установить его цвет, который рассчитывается путем проверки каждого квадрата, плюс квадратов два слева и справа, плюс четыре квадрата один по диагонали, для*
s и, если это так, объединяя цвета всех*
найдено. Эти*
цвета выбираются просто принимая их горизонтальную координату по модулю 3 и смещение битовой маски соответствующим образом . Edit: Сохраненный 2 байта, переключаясь от#RRGGBB
до#RGB
цветов.источник
JavaScript (ES6), 210 байт (с использованием HTML + CSS)
Похож на мой холст подход ; находит все
*
s во входной строке и записывает шестиугольники на страницу в виде абсолютно позиционированных<pre>
элементов. Посколькуmix-blend-mode
установлено значениеlighten
, добавление цвета выполняется автоматически, когда символы перекрываются.Показать фрагмент кода
источник
Python 2 , 279 байт
Попробуйте онлайн!
Гольф и исправлено благодаря пользователю 202729!
-27 байт благодаря мистеру Xcoder
-24 байт благодаря Джонатану Фреху
источник
2-abs(i)
находится2-(i&1)
в этом контексте 336 байт.\033
может быть\33
(сохранение одного байта) или фактический\x1b
символ ( сохранение трех байтов ).=
и a;
на два,
и a=
.Python 2 ,
346331 байтПопробуйте онлайн!
источник
HTML (Canvas) + JavaScript (ES6), 13 + 251 = 264 байта
Находит все
*
s во входной строке и рисует шестиугольник ASCII на холсте в соответствующих позициях. Потому чтоglobalCompositeOperation='lighter'
добавление цвета выполняется автоматически, когда символы перекрываются.HTML
JavaScript
Для просмотра
scale()
были добавлены множитель и дополнительная команда.Показать фрагмент кода
Также см. Мой подход на основе CSS .
источник
MATLAB / Octave , 223 байта
В более аккуратном формате кода:
Ввод принимается как двумерный массив, например, вводит следующее при запросе ввода:
Насколько мне известно, у MATLAB нет возможности выводить цвета на консоль (за исключением грязных взломов Java, которые я игнорирую). Таким образом, вывод вместо этого печатается на рисунке.
Раскраска достигается путем нахождения местоположения всех
*
входных данных, а затем в массиве цветов RGB (p
) поле 5х3 из 1 (255 в представлении цвета MATLAB) пишется по центру относительно*
. Коробка записывается в цвет, соответствующий индексу mod-3 вдоль каждой строки, причем четные строки, имеющие индекс цвета, смещены на смещение.Это создает цветовую матрицу, где любые блоки, которые перекрываются, приведут к требуемому смешанному цвету. В приведенном выше примере получается следующая цветовая матрица.
Белые и черные области не имеют значения, потому что в этих местах печатается пробел, означающий, что мы на самом деле не видим неправильный цвет.
Как только цветовая матрица создана, мы отображаем каждый символ на рисунке, используя
text
команду, устанавливая цвет текста для соответствующей записи в цветовой матрице. Приведенный выше пример будет отображать:источник