Das Problem : Zählen Sie die Anzahl der Löcher in einem verbundenen Polygon. Die Konnektivität des Polygons wird durch die Bedingung garantiert, dass jedes Dreieck in der Eingabetriangulation mindestens eine Seite mit einem anderen Dreieck teilt und dass es nur einen solchen verbundenen Satz von Dreiecken gibt.
Die Eingabe ist eine Liste Lvon nPunkten in der Ebene und eine Liste Tvon 3 Tupeln mit Einträgen von 0...n-1. Für jedes Element im TTupel (t_1,t_2,t_3)stehen die drei Eckpunkte (aus der Liste L) eines Dreiecks in der Triangulation. Beachten Sie, dass dies eine Triangulation im Sinne einer "Polygon-Triangulation" ist , da sich in Tdieser Überlappung niemals zwei Dreiecke befinden . Eine zusätzliche Bedingung ist, dass Sie die Eingabe nicht bereinigen müssen Lund Tkeine Wiederholungen enthalten.
Beispiel 1 : Wenn L = {{0,0},{1,0},{0,1},{1,2}}und T = {{0,1,2},{1,2,3}}dann hat das angegebene Polygon eine Lochanzahl von 0.
Beispiel 2 : Wenn 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}}und 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}}dann sollte die Polygoneingabe eine Ausgabe von 2 ergeben.

Die Aufgabe besteht darin, das kürzeste Programm (oder die kürzeste Funktion) zu schreiben, das Lund Tals Eingabe verwendet und die Anzahl der Löcher zurückgibt. Der 'Gewinner' wird als Eintrag mit der geringsten Anzahl von Zeichen anerkannt (vorläufiges Enddatum 1. Juni).
Beispiel für eine Eingabeformatierung (beachten Sie die Indizierung 0):
0,0
1,0
0,1
1,2
0,1,2
1,2,3
T=1,2,3/1,4,5ist verbunden, aber nicht kantenverbunden)
T=1,2,3/1,2,4/5,6,7/5,6,8. Jedes Dreieck teilt eine Kante mit einem anderen Dreieck, aber die Triangulation wird getrennt