Включение-Исключение позволяет вычислять размеры некоторых объединений и пересечений между наборами, зная некоторые другие значения. Я не буду объяснять это точно, но ваша задача - визуализировать включение-исключение на диаграмме Венна.
Потому что я хороший, вы будете использовать прямоугольники, а не круги.
Вам будет предоставлен список прямоугольников, обозначенных координатами верхнего левого и нижнего правого углов в любом приемлемом формате (список из четырех кортежей, список пар, список пар и т. Д.). Вы можете предположить, что все координаты неотрицательны и находятся в пределах (разумного) диапазона номеров вашего языка (укажите, что это, если оно меньше 128). Вы можете выбрать включение слева или исключение слева и включение справа или исключение справа. Независимо от выбранного формата вы можете предположить, что все прямоугольники имеют размер не менее 1x1.
Затем вы должны нарисовать каждый прямоугольник на экране (холст ASCII), используя один непробельный символ k
, который вы можете выбрать.
Однако всякий раз, когда два прямоугольника перекрываются, область перекрытия должна быть нарисована другим непробельным символом l != k
, также вашим выбором.
Всякий раз, когда три прямоугольника перекрываются, область перекрытия должна быть нарисована с k
и для нечетного числа охватывающих прямоугольников k
и четного числа l
.
Фон должен быть одним пробелом ( 0x20
).
Тестовые случаи ( k = "#", l = "."
)
0 0 9 9
1 1 10 10
2 2 11 11
#########
#........#
#.#######.#
#.#######.#
#.#######.#
#.#######.#
#.#######.#
#.#######.#
#.#######.#
#........#
#########
1 1 3 3
2 2 4 4
##
#.#
##
1 1 9 9
2 2 8 8
3 3 7 7
########
#......#
#.####.#
#.####.#
#.####.#
#.####.#
#......#
########
Заметки
0, 0
Должны присутствовать начальные пробелы и символы новой строки (которые появляются, если минимальная координата отсутствует )- Любые завершающие пробелы и переводы строк разрешены в разумных пределах (т. Е. Не трейлинг, как 100000000 переходов, это просто раздражает)
- Оси x и y могут быть направлены в любую сторону, но вы должны быть последовательными и указать, какой (по умолчанию - x-right и y-down)
- координаты могут быть 0-, 1- или 2-индексированными.
Это код-гольф , поэтому цель - получить самый короткий код. Удачного игры в гольф!
Ответы:
6502 подпрограммы машинного кода (C64), 57 байтов
Это позиционно-независимый код, поместите его где-нибудь в ОЗУ и используйте правильный начальный адрес, вызывая его
sys
.Демо онлайн (начальный адрес
$C000
/49152
).Использование:
sys<startaddress>,<x1>,<y1>,<x2>,<y2>[,<x1>,<y1>,<x2>,<y2>[,...]]
Пример:
sys49152,0,0,9,9,1,1,10,10,2,2,11,11
На разумных диапазонах чисел: естественный диапазон на этом 8-битном компьютере - [0-255], и программа примет это как параметры. Но экран C64 имеет только 40 столбцов и 25 строк, поэтому ограничивает разумный диапазон значениями [0-40] для значений x и [0-25] для значений y. Использование других значений будет иметь непредсказуемое поведение.
прокомментировал список разборки:
источник
Python 2 ,
218192189185158154147 байтПопробуйте онлайн!
источник
Древесный уголь , 40 байт
Попробуйте онлайн! Ссылка на подробную версию кода.
Будет на 6 байт короче, когда @ ASCII-only исправляет ошибку в Charcoal. Принимает ввод как завершенный новой строкой список разделенных пробелами списка координат. Объяснение:Цикл по каждой строке ввода, пока не будет достигнута пустая строка.
Разбейте линию на список координат.
Обведите все координаты X
Прыгайте в верхнюю часть колонны.
Карта над каждым из ...
... все ячейки в столбце ...
... новое значение,
0
если они содержат1
, в противном случае1
. Изменить: Вскоре после написания этого, Уголь изменил поведение¬
так, чтоI¬Σλ
работает здесь, чтобы сохранить 1 байт.источник
\n
вместо этого, я думаю ...Python 2 , 181 байт
Попробуйте онлайн!
источник
C (gcc) , 205 байтов
Попробуйте онлайн!
источник
R ,
196189 байтПопробуйте онлайн!
Код читает входные данные как stdin, расположенные в виде кортежа x1 y1 x2 y2, где x - столбец, а y - строка. Я использую 1 и 2 для уровней перекрытия, где 1 представляет четный уровень.
Сохранено 7 байт благодаря пользователю 2390246.
источник
nrow
(или,ncol
если не преобразовано) вместоdim(x)[1]
3. Вам не нужно определять,i=y>0
поскольку вы используете его только один раз.y=y%%2
иy[y<0]=" "
.Раку , 54 байта
Попробуйте онлайн!
Принимает входные данные в виде плоского списка координат в качестве включающих координат, то есть
x1,y1,x2,y2,x1,y1,x2,y2...
и выводит в виде списка списка символов сk
бытием1
иl
бытием0
.Объяснение:
источник
Желе , 43 байта
Попробуйте онлайн!
объяснение
источник