примечание: строковое искусство может выглядеть здесь ужасно из-за странности шрифта SE: P :(
Учитывая список из четырех кортежей, представляющих углы прямоугольников, нарисуйте полупрозрачные прямоугольники друг над другом в этом порядке.
Для выполнения этой задачи вам необходимо иметь наименьшую координату в верхнем левом углу, а ось x увеличивается вправо, а ось y - вниз.
Четыре кортежа (x0, y0, x1, y1)
или (x0, x1, y0, y1)
представляют (x, y)
пары координат верхнего левого и нижнего правого углов прямоугольника (вы можете выбрать любой из двух форматов для прямоугольников, но он должен быть согласованным)
Что я имею в виду под «полупрозрачным прямоугольником»? Ну, для этой задачи вы будете использовать символ пробела и большинство символов рисования прямоугольников ; в частности, все те, которые используются для рисования прямоугольников, включая «жирные» символы. Когда рисуется полупрозрачный прямоугольник, сначала все тонкие линии в занимаемом пространстве исчезают, а все жирные линии становятся тонкими, а затем сам прямоугольник рисуется жирными линиями.
Например, если вы рисуете прямоугольник в верхнем левом углу, а затем в нижнем правом, он может выглядеть примерно так:
┏━━━━┓
┃ ┃
┃ ┃
┃ ┏━━╇━━┓
┃ ┃ │ ┃
┗━╉──┘ ┃
┃ ┃
┃ ┃
┗━━━━━┛
Для ясности, линии подсвечиваются (жирный -> тонкий -> нет) для всех линий строго внутри прямоугольника (например, линии, направленные вниз, затрагивают верхний край, но не нижний край).
Тестовые случаи
Для каждого контрольного примера будет дано некоторое количество строк ввода, за которым следует юникод-арт.
0 0 5 5
5 5 10 10
3 3 7 7
2 2 8 8
┏━━━━┓
┃ ┃
┃ ┏━━╇━━┓
┃ ┃┌─┴─┐┃
┃ ┃│ │┃
┗━╉┤ ├╊━┓
┃│ │┃ ┃
┃└─┬─┘┃ ┃
┗━━╈━━┛ ┃
┃ ┃
┗━━━━┛
14 5 15 9
13 2 15 16
6 4 15 11
┏━┓
┃ ┃
┏━━━━━━╇━┫
┃ │ ┃
┃ │ ┃
┃ │ ┃
┃ │ ┃
┃ │ ┃
┃ │ ┃
┗━━━━━━╈━┫
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┗━┛
6 8 10 11
15 12 16 16
14 10 16 16
9 1 15 15
┏━━━━━┓
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┏━━╉┐ ┃
┃ ┃│ ┃
┃ ┃│ ┌╊┓
┗━━╉┘ │┃┃
┃ │┠┨
┃ │┃┃
┃ │┃┃
┗━━━━╈┩┃
┗┷┛
Создайте больше тестовых случаев!
правила
- Ввод может быть в любом разумном формате для списка из четырех кортежей. Входные данные могут быть один или ноль индексированным индексированные вдоль любой оси (т.е. верхнего левого угла может быть любым из
(0, 0)
,(0, 1)
,(1, 0)
,(1, 1)
. - Вывод должен быть таким же unicode-art, как описано. Выходные данные могут не иметь начальных символов новой строки и могут содержать не более одного завершающего символа новой строки (после последней строки). Конечные пробелы будут игнорироваться для целей этой задачи.
Код-очки
Жирные и светлые горизонтальные и вертикальные трубы находятся в ассортименте [U+2500, U+2503]
. Различные угловые трубы находятся в ассортименте [U+250C, U+251C)
. Трехрукие трубы находятся в пределах досягаемости [U+251C, U+253C)
. Четырехрукие трубы находятся в пределах досягаемости [U+253C, U+254C)
. Остальные каналы, которые можно найти в моей программе, никогда не используются.
Typically this uses only 95 printable (from a total of 128) characters defined by the ASCII Standard from 1963.
Ответы:
Python 3 ,
289286 байтПопробуйте онлайн!
Принимает входные данные в виде списка из 4-х кортежей:
(x0, y0, x1, y1)
вместе со следующими символами:" ╶╺╵└┕╹┖┗╴─╼┘┴┶┚┸┺╸╾━┙┵┷┛┹┻╷┌┍│├┝╿┞┡┐┬┮┤┼┾┦╀╄┑┭┯┥┽┿┩╃╇╻┎┏╽┟┢┃┠┣┒┰┲┧╁╆┨╂╊┓┱┳┪╅╈┫╉╋"
Поддерживает поля нулевой ширины или высоты (использует все символы рисования блоков).
На основании моего ответа на этот вопрос , но изменен, чтобы изменить существующие поля при рисовании.
'Ungolfed':
источник
u
качестве входных данных._,_,w,h=
на*_,w,h=
.Q
не нуждается в скобках,Q=(i<X,y<j,x<i,j<Y);
его можно заменитьQ=i<X,y<j,x<i,j<Y;
на два сохраненных байта.JavaScript (ES6),
298261 байтГде
\n
представляет буквальный символ новой строки. На основании моего ответа на Unicode прямоугольники . Объяснение: Для рисования создается массив строк пробелов. Затем каждый пробел обрабатывается путем циклического перебора всех блоков ввода. Символы, которые лежат за пределами рамки, затем игнорируются, но символы на краю или внутри обрабатываются дальше. Для каждого из четырех отрезков, составляющих символ (каждый из которых представлен степенью 3), существует три варианта; а) сегмент лежит за пределами рамки и должен игнорироваться (достигается передачей параметра 0 вместо степени 3) б) сегмент лежит на краю рамки и должен быть жирным шрифтом (достигается путем вызоваh
функции) в) сегмент лежит внутри коробки и должен быть освещен (достигается путем вызоваg
функция). Затем символ индексируется в строку Unicode. После того, как все блоки были обработаны, массив присоединяется к новым строкам.Показать фрагмент кода
источник