Inclusão-Exclusão permite calcular os tamanhos de algumas uniões e interseções entre conjuntos, conhecendo alguns dos outros valores. Não vou explicar exatamente, mas seu desafio é visualizar a inclusão-exclusão em um diagrama de Venn.
Porque eu sou legal, você estará usando retângulos, não círculos.
Você receberá uma lista de retângulos indicados pelas coordenadas do canto superior esquerdo e inferior direito em qualquer formato razoável (lista de 4 tuplas, lista de pares de pares, lista de pares, etc.). Você pode assumir que todas as coordenadas são não-negativas e estão dentro do intervalo de números (razoável) do seu idioma (especifique o que é se for menor que 128). Você pode optar por ser inclusivo à esquerda ou exclusivo à esquerda e inclusivo à direita ou exclusivo à direita. Independentemente do formato escolhido, você pode assumir que todos os retângulos são pelo menos 1x1.
Em seguida, você deve desenhar cada retângulo na tela (tela ASCII) usando um único caractere k
que não seja um espaço em branco , que você poderá escolher.
No entanto, sempre que dois retângulos se sobrepõem, a área sobreposta deve ser desenhada com outro caractere que não seja um espaço em branco l != k
, também seu para você escolher.
Sempre que três retângulos se sobrepõem, a área sobreposta deve ser desenhada com k
e para um número ímpar de retângulos que cobrem k
, e um número par l
.
O plano de fundo deve ser um espaço em branco único ( 0x20
).
Casos de teste ( 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
########
#......#
#.####.#
#.####.#
#.####.#
#.####.#
#......#
########
Notas
- Espaços iniciais e novas linhas (que ocorrem se a coordenada mínima não estiver
0, 0
) devem estar presentes - Quaisquer espaços à direita e novas linhas são permitidos em uma extensão razoável (ou seja, não rastreie como 100000000 novas linhas, isso é apenas irritante)
- os eixos xe y podem ficar virados para os dois lados, mas você deve ser consistente e especificar quais (o padrão é x-right e y-down)
- as coordenadas podem ser indexadas em 0, 1 ou 2.
Implementação de referência de prótons
Isso é código-golfe , então o objetivo é ter o código mais curto. Feliz golfe!
Respostas:
Rotina de código de máquina 6502 (C64), 57 bytes
Este é um código independente da posição, coloque-o em algum lugar da RAM e use o endereço inicial correto para chamá-lo
sys
.Demonstração online (endereço inicial
$C000
/49152
).Uso:
sys<startaddress>,<x1>,<y1>,<x2>,<y2>[,<x1>,<y1>,<x2>,<y2>[,...]]
Exemplo:
sys49152,0,0,9,9,1,1,10,10,2,2,11,11
Em faixas de número razoáveis: A faixa natural nesta máquina de 8 bits é [0-255] e o programa aceitará isso como parâmetros. Mas a tela C64 possui apenas 40 colunas e 25 linhas, limitando, portanto, o intervalo razoável a [0-40] para valores x e [0-25] para valores y. O uso de outros valores terá um comportamento imprevisível.
lista de desmontagem comentada:
fonte
Python 2 ,
218192189185158154147 bytesExperimente online!
fonte
Carvão , 40 bytes
Experimente online! Link é a versão detalhada do código.
Será 6 bytes mais curto quando o ASCII corrigir apenas um bug no Charcoal. Recebe entrada como uma lista terminada por nova linha de lista de coordenadas separadas por espaço. Explicação:Faça um loop sobre cada linha de entrada até que uma linha em branco seja alcançada.
Divida a linha em uma lista de coordenadas.
Faça um loop sobre todas as coordenadas X.
Salte para o topo da coluna.
Mapa sobre cada ...
... todas as células da coluna ...
... o novo valor é
0
se eles contiverem1
, caso contrário1
. Edit: Logo depois de escrever isso, o carvão mudou o comportamento de¬
modo queI¬Σλ
funciona aqui para economizar 1 byte.fonte
\n
vez eu acho ...Python 2 , 181 bytes
Experimente online!
fonte
C (gcc) , 205 bytes
Experimente online!
fonte
R ,
196189 bytesExperimente online!
O código lê a entrada como stdin, organizada como uma tupla x1 y1 x2 y2, onde x é a coluna e y é a linha. Estou usando 1 e 2 para os níveis de sobreposição, onde 1 representa um nível par.
Economizado 7 bytes graças a user2390246.
fonte
nrow
(ouncol
se não for transformado) em vez dedim(x)[1]
3. Você não precisa definiri=y>0
como você o usa apenas uma vez.y=y%%2
ey[y<0]=" "
.Raku , 54 bytes
Experimente online!
Recebe entrada como uma lista simples de coordenadas como coordenadas inclusivas, ou seja,
x1,y1,x2,y2,x1,y1,x2,y2...
e gera como uma lista de lista de caracteres comk
ser1
el
ser0
.Explicação:
fonte
Gelatina , 43 bytes
Experimente online!
Explicação
fonte