Inclusion-Exclusion vous permet de calculer les tailles de certaines unions et intersections entre les ensembles en connaissant certaines des autres valeurs. Je ne l'expliquerai pas exactement, mais votre défi est de visualiser l'inclusion-exclusion sur un diagramme de Venn.
Parce que je suis sympa, vous utiliserez des rectangles, pas des cercles.
Vous recevrez une liste de rectangles indiqués par des coordonnées de coin en haut à gauche et en bas à droite dans n'importe quel format raisonnable (liste de 4 tuples, liste de paires de paires, liste de paires, etc.). Vous pouvez supposer que toutes les coordonnées ne sont pas négatives et se situent dans la plage de nombres (raisonnable) de votre langue (veuillez préciser de quoi il s'agit si elle est inférieure à 128). Vous pouvez choisir d'être inclusif à gauche ou exclusif à gauche et inclusif à droite ou exclusif à droite. Quel que soit le format choisi, vous pouvez supposer que tous les rectangles sont au moins 1x1.
Ensuite, vous devez dessiner chaque rectangle sur l'écran (canevas ASCII) en utilisant un seul caractère non blanc k
, à vous de choisir.
Cependant, chaque fois que deux rectangles se chevauchent, la zone de chevauchement doit être dessinée avec un autre caractère non blanc l != k
, également à vous de choisir.
Chaque fois que trois rectangles se chevauchent, la zone de chevauchement doit être établi avec k
, et pour un nombre impair de rectangles de couverture, k
et un nombre pair l
.
L'arrière-plan doit être composé d'espaces simples ( 0x20
).
Cas de test ( 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
########
#......#
#.####.#
#.####.#
#.####.#
#.####.#
#......#
########
Remarques
- Les espaces de début et les nouvelles lignes (qui se produisent si la coordonnée minimale n'est pas
0, 0
) doivent être présents - Tous les espaces de fin et les sauts de ligne sont autorisés dans une mesure raisonnable (c'est-à-dire ne traînent pas comme 100000000 sauts de ligne, c'est juste ennuyeux)
- Les axes x et y peuvent être orientés dans les deux sens, mais vous devez être cohérent et spécifier lequel (la valeur par défaut est x droite et y bas)
- les coordonnées peuvent être indexées de 0, 1 ou 2.
Implémentation de Proton de référence
C'est du code-golf , donc l'objectif est d'avoir le code le plus court. Bon golf!
Réponses:
6502 routine de code machine (C64), 57 octets
Il s'agit d'un code indépendant de la position, placez-le quelque part dans la RAM et utilisez la bonne adresse de début en l'appelant avec
sys
.Démo en ligne (adresse de départ
$C000
/49152
).Usage:
sys<startaddress>,<x1>,<y1>,<x2>,<y2>[,<x1>,<y1>,<x2>,<y2>[,...]]
Exemple:
sys49152,0,0,9,9,1,1,10,10,2,2,11,11
Sur des plages de nombres raisonnables: La plage naturelle sur cette machine 8 bits est [0-255], et le programme l'acceptera comme paramètres. Mais l'écran C64 n'a que 40 colonnes et 25 lignes, limitant ainsi la plage raisonnable à [0-40] pour les valeurs x et [0-25] pour les valeurs y. L'utilisation d'autres valeurs aura un comportement imprévisible.
Liste de démontage commentée:
la source
Python 2 ,
218192189 189185158154147 147 octetsEssayez-le en ligne!
la source
Fusain , 40 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code.
Sera 6 octets plus court une fois @ ASCII uniquement corrige un bug dans Charcoal. Prend l'entrée comme une liste terminée par une nouvelle ligne de liste de coordonnées séparées par des espaces. Explication:Faites une boucle sur chaque ligne d'entrée jusqu'à ce qu'une ligne vierge soit atteinte.
Divisez la ligne en une liste de coordonnées.
Faites une boucle sur toutes les coordonnées X.
Sautez en haut de la colonne.
Carte sur chacun de ...
... toutes les cellules de la colonne ...
... la nouvelle valeur est
0
s'ils contiennent1
, sinon1
. Edit: peu de temps après avoir écrit ceci, Charcoal a changé le comportement de¬
ce quiI¬Σλ
fonctionne ici pour économiser 1 octet.la source
\n
place, je suppose ...Python 2 , 181 octets
Essayez-le en ligne!
la source
C (gcc) , 205 octets
Essayez-le en ligne!
la source
R ,
196189 octetsEssayez-le en ligne!
Le code lit l'entrée comme stdin, arrangé comme un tuple x1 y1 x2 y2, où x est la colonne et y est la ligne. J'utilise 1 et 2 pour les niveaux de chevauchement, où 1 représente un niveau pair.
Enregistré 7 octets grâce à user2390246.
la source
nrow
(ouncol
s'il n'est pas transformé) au lieu dedim(x)[1]
3. Vous n'avez pas besoin de définiri=y>0
car vous ne l'utilisez qu'une seule fois.y=y%%2
ety[y<0]=" "
.Raku , 54 octets
Essayez-le en ligne!
Prend les entrées sous forme de liste plate de coordonnées sous forme de coordonnées inclusives, c'est
x1,y1,x2,y2,x1,y1,x2,y2...
-à- dire et les sorties sous forme de liste de caractères avec l'k
être1
et l'l
être0
.Explication:
la source
Gelée , 43 octets
Essayez-le en ligne!
Explication
la source