Tag 13 - Point of Incidence
Lösungshinweise Teil 1
- Lies die Patterns der Reihe nach ein und wandle sie zur einfacheren Verarbeitung in zweidimensionale boolean-Arrays um.
- Prüfe dann zunächst, ob an einer der Spalten die Spiegelung stattfindet. Lagere dies in eine Methode aus, die dir -1 zurückgibt, falls an keiner Spalte gespiegelt wird oder andernfalls die korrekte Spaltennummer.
- Die Methode benötigt als Parameter das boolean-Pattern, die Breite und Höhe des patterns und die Anzahl der erlaubten Fehler in der Spiegelung. In Teil 1 ist KEIN Fehler in den Spiegelungen erlaubt (→ 0).
- Prüfe der Reihe nach für
x
von links nach rechts (exklusive der letzten Spalte), ob diese Spalte die linke Spiegelachse ist (oder anders ausgedrückt: die Spalte direkt links der Spiegelachse). - Zähle pro möglicher x-Spiegelachsen-Position die Anzahl der vorhandenen Fehler.
- Gehe pro möglicher x-Spiegelachsen-Position über alle Zeilen
- Erhöhe der Reihe nach den Abstand (
diff
) vonx
, um zu prüfen, ob mit größer werdendem Abstand von der angenommenen Spiegelachse links und rechts derselbe Wert im pattern-Array steht. Sind die Zeichen nicht identisch, dann werden die Anzahl der Fehler erhöht. Sind mehr Fehler vorhanden als laut Parameter erlaubt, dann wird mit der nächsten angenommenen x-Spiegelachsen-Position weitergemacht. - Nur, wenn am Ende einer x-Spiegelachsen-Position die Fehleranzahl genau dem Parameter entspricht, dann wird die x-Position zurückgegeben (Achtung, den "bei-0-beginnenden-Index" anpassen). Sonst wird -1 zurückgegeben.
- Wenn bei den Spalten keine Spiegelachse gefunden wurde, dann wird entsprechend bei den Zeilen gesucht. Dazu muss eine zweite Methode exakt äquivalent aufgebaut werden.
Teil 2
Für Teil 2 muss nur eine Winzigkeit geändert werden: Es muss nun bei der korrekten Spiegelachse genau 1 Fehler auftreten!