Inclusión-Exclusión le permite calcular los tamaños de algunas uniones e intersecciones entre conjuntos conociendo algunos de los otros valores. No lo explicaré exactamente, pero su desafío es visualizar la inclusión-exclusión en un diagrama de Venn.
Como soy amable, usarás rectángulos, no círculos.
Se le dará una lista de rectángulos indicados por las coordenadas de la esquina superior izquierda e inferior derecha en cualquier formato razonable (lista de 4 tuplas, lista de pares de pares, lista de pares, etc.). Puede suponer que todas las coordenadas no son negativas y están dentro del rango de números (razonable) de su idioma (especifique qué es si es menor que 128). Puede elegir ser inclusivo a la izquierda o exclusivo a la izquierda e inclusivo a la derecha o exclusivo a la derecha. Independientemente del formato elegido, puede asumir que todos los rectángulos son al menos 1x1.
Luego, debe dibujar cada rectángulo en la pantalla (lienzo ASCII) utilizando un único carácter que no sea un espacio en blanco k
, que puede elegir.
Sin embargo, cada vez que se superpongan dos rectángulos, el área superpuesta se dibujará con otro carácter que no sea un espacio en blanco l != k
, también el suyo para elegir.
Siempre que tres rectángulos se superponen, el área de superposición debe ser dibujado con k
, y por un número impar de rectángulos que cubre, k
y un número par, l
.
El fondo debe ser espacios en blanco individuales ( 0x20
).
Casos de prueba ( 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
- Los espacios iniciales y las nuevas líneas (que ocurren si la coordenada mínima no lo está
0, 0
) deben estar presentes - Todos los espacios finales y las nuevas líneas están permitidos en un grado razonable (es decir, no sigas como 100000000 nuevas líneas, eso es molesto)
- los ejes x e y pueden estar orientados en ambos sentidos, pero debe ser coherente y especificar cuál (el valor predeterminado es x-right e y- down)
- Las coordenadas pueden ser 0-, 1- o 2- indexadas.
Implementación de protones de referencia
Este es el código de golf , por lo que el objetivo es tener el código más corto. ¡Feliz golf!
Respuestas:
6502 rutina de código de máquina (C64), 57 bytes
Este es un código independiente de la posición, colóquelo en algún lugar de la RAM y use la dirección de inicio correcta para llamarlo
sys
.Demostración en línea (dirección de inicio
$C000
/49152
).Uso:
sys<startaddress>,<x1>,<y1>,<x2>,<y2>[,<x1>,<y1>,<x2>,<y2>[,...]]
Ejemplo:
sys49152,0,0,9,9,1,1,10,10,2,2,11,11
En rangos de números razonables: el rango natural en esta máquina de 8 bits es [0-255], y el programa aceptará esto como parámetros. Pero la pantalla C64 solo tiene 40 columnas y 25 filas, por lo tanto, limita el rango razonable a [0-40] para valores de x y [0-25] para valores de y. El uso de otros valores tendrá un comportamiento impredecible.
listado de desmontaje comentado:
fuente
Python 2 ,
218192189185158154147 bytesPruébalo en línea!
fuente
Carbón , 40 bytes.
Pruébalo en línea! El enlace es a la versión detallada del código.
Será 6 bytes más corto una vez que @ ASCII solo corrige un error en Charcoal. Toma datos como una lista terminada en nueva línea de una lista de coordenadas separadas por espacios. Explicación:Pase cada línea de entrada hasta llegar a una línea en blanco.
Divida la línea en una lista de coordenadas.
Recorre todas las coordenadas X.
Salta a la parte superior de la columna.
Mapa sobre cada uno de ...
... todas las celdas de la columna ...
... el nuevo valor es
0
si contienen1
, de lo contrario1
. Editar: poco después de escribir esto, el carbón cambió el comportamiento de¬
modo queI¬Σλ
funciona aquí para guardar 1 byte.fuente
\n
lugar, supongo ...Python 2 , 181 bytes
Pruébalo en línea!
fuente
C (gcc) , 205 bytes
Pruébalo en línea!
fuente
R ,
196189 bytesPruébalo en línea!
El código lee la entrada como stdin, organizada como una tupla x1 y1 x2 y2, donde x es la columna e y es la fila. Estoy usando 1 y 2 para los niveles de superposición, donde 1 representa un nivel par.
Guardado 7 bytes gracias a user2390246.
fuente
nrow
(oncol
si no se transforma) en lugar dedim(x)[1]
3. No necesita definirlo,i=y>0
ya que solo lo usa una vez.y=y%%2
yy[y<0]=" "
.Raku , 54 bytes
Pruébalo en línea!
Toma la entrada como una lista plana de coordenadas como coordenadas inclusivas, es decir,
x1,y1,x2,y2,x1,y1,x2,y2...
y las salidas como una lista de la lista de caracteres conk
being1
yl
being0
.Explicación:
fuente
Jalea , 43 bytes
Pruébalo en línea!
Explicación
fuente