Le problème : comptez le nombre de trous dans un polygone connecté. La connectivité du polygone est garantie par la condition que chaque triangle de la triangulation d'entrée partage au moins 1 côté avec un autre triangle et qu'il n'y ait qu'un seul ensemble de triangles connectés.
L'entrée est une liste L
de n
points dans le plan et une liste T
de 3 tuples avec des entrées de 0...n-1
. Pour chaque élément T
du tuple (t_1,t_2,t_3)
représente les trois sommets (de la liste L
) d'un triangle dans la triangulation. Notez qu'il s'agit d'une triangulation au sens de «triangulation polygonale» , car il n'y aura jamais deux triangles dans T
ce chevauchement. Une stipulation supplémentaire est que vous n'aurez pas à assainir l'entrée L
et à T
ne pas contenir de répétitions.
Exemple 1 : Si L = {{0,0},{1,0},{0,1},{1,2}}
et T = {{0,1,2},{1,2,3}}
alors le polygone spécifié a un nombre de trous de 0.
Exemple 2 : Si L = {{0,0},{1,0},{2,0},{2,1},{2,2},{1,2},{0,2},{0,1},{.5,.5},{1.5,.5},{1.5,1.5},{.5,1.5}}
et T = {{5,6,11},{5,10,11},{4,5,10},{3,8,10},{2,3,9},{2,8,9},{1,2,8},{0,1,8},{0,8,11},{0,7,11},{6,7,11},{3,4,10}}
alors l'entrée polygonale devrait donner une sortie de 2.
La tâche consiste à écrire le programme (ou la fonction) le plus court qui prend L
et T
comme entrée et renvoie le nombre de trous. Le «gagnant» sera reconnu comme l'entrée avec le moins de caractères (date de fin provisoire le 1er juin).
Exemple de formatage d'entrée (notez l'indexation 0):
0,0
1,0
0,1
1,2
0,1,2
1,2,3
T=1,2,3/1,4,5
est connecté mais pas connecté en périphérie)
T=1,2,3/1,2,4/5,6,7/5,6,8
,. Chaque triangle partage un bord avec un autre triangle, mais la triangulation est déconnectée