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) von x, 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.

Lösungsvorschlag

Teil 2

Für Teil 2 muss nur eine Winzigkeit geändert werden: Es muss nun bei der korrekten Spiegelachse genau 1 Fehler auftreten!