From 4fe692fe65852c29a81a87e6ea29a8bffa09043a Mon Sep 17 00:00:00 2001
From: Manuel Bucher <manuel.bucher@hu-berlin.de>
Date: Mon, 18 Jun 2018 13:13:58 +0200
Subject: [PATCH] ueberlauf vermieden

---
 loesung.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/loesung.c b/loesung.c
index 6ec22b1..32d402e 100644
--- a/loesung.c
+++ b/loesung.c
@@ -106,17 +106,17 @@ void list_free(List *this) {
 
 /** pruefen, ob genausoviele gerade und ungerade Kacheln existieren,
  * ohne einen Overflow zu erzeugen
- * notwendiges Kriterium fuer unzusammenhaengender graph und hinreichendes
- * fuer zusammenhaengender
+ * notwendiges Kriterium fuer
  */
-bool list_possible(List *this) {
+bool list_necessity(List *this) {
     return this->num_tiles - this->num_odd == this->num_odd;
 }
 
 /** Zurueckgeben, ob graph ein vollstaendiges Rechteck ist */
 bool list_rectangle(List *this) {
-    return (this->max.x - this->min.x) * (this->max.y - this->min.y)
-        == this->num_tiles; // TODO: check for overflow?
+    // verwenden von `uint64_t` um einen ueberlauf zu vermeiden
+    return (uint64_t)(this->max.x - this->min.x) * (uint64_t)(this->max.y - this->min.y)
+        == (uint64_t)this->num_tiles;
 }
 
 typedef enum ReadResult {
@@ -349,6 +349,17 @@ int main (void)
         list_free(&tile_list);
         return EXIT_FAILURE;
     }
+
+    if (!list_necessity(&tile_list)) {
+        printf("None\n");
+        return EXIT_SUCCESS;
+    }
+    if (list_rectangle(&tile_list)) {
+        printf("Rechteck");
+        // TODO: Rechteck ausgabefunktion
+        return EXIT_SUCCESS;
+    }
+
     Array tile_array;
     // uebertragen der Liste in ein Array, und uebergeben des ownership der Tiles
     // an das Array
@@ -358,9 +369,6 @@ int main (void)
         return EXIT_FAILURE;
     }
 
-    // TODO: pruefen, ob notwendiges Kriterium erfuellt,
-    // TODO: Falls Rechteck, dieses Ausgeben.
-
     //array_print(&tile_array);
     qsort(tile_array.tiles, tile_array.num_tiles, sizeof(Tile*), tile_compare);
 
-- 
GitLab