Tracks
/
Go
Go
/
Übungen
/
OCR-Zahlen
OCR-Zahlen

OCR-Zahlen

Mittel

Einführung

Deine beste Freundin Marta hat kürzlich ihren Traumjob ergattert und arbeitet jetzt mit den Sammlungen eines lokalen Geschichtsmuseums. Weil Marta von deinem Interesse am Programmieren weiß, weiht sie dich in ein Problem bei der Arbeit ein, bei dem es um eine bevorstehende Ausstellung zur Geschichte der Computertechnik geht. Die mathematische Fakultät einer lokalen Universität hatte mehrere Kisten mit historischen Ausdrucken gespendet, doch weil die Dokumente in so schlechtem Zustand sind, hat man entschieden, den Text zu digitalisieren. Allerdings hatte der alte Drucker der Universität so seine Eigenheiten, was die Darstellung von Text anging, und deine Freundin könnte deine Hilfe gut gebrauchen, um die Daten erfolgreich herauszuholen.

Anleitung

Optische Zeichenerkennung, kurz OCR (von englisch Optical Character Recognition), ist Software, die Bilder von Text in maschinenlesbaren Text umwandelt. Wenn du ein Raster aus Zeichen bekommst, das einige Ziffern darstellt, wandle das Raster in einen String aus Ziffern um. Wenn das Raster mehrere Zeilen von Zellen hat, sollten die Zeilen in der Ausgabe mit einem "," getrennt werden.

  • Das Raster besteht aus einer oder mehreren Zeilen von Zellen.
  • Jede Zeile des Rasters besteht aus einer oder mehreren Zellen.
  • Jede Zelle ist drei Spalten breit und vier Zeilen hoch (3x4) und stellt eine Ziffer dar.
  • Ziffern werden mit senkrechten Strichen ("|"), Unterstrichen ("_") und Leerzeichen (" ") gezeichnet.

Randfälle

  • Wenn die Eingabe keine gültige Größe hat, sollte dein Programm anzeigen, dass ein Fehler vorliegt.
  • Wenn die Eingabe die richtige Größe hat, aber eine Zelle nicht erkennbar ist, sollte dein Programm für dieses Zeichen ein "?" ausgeben.

Beispiele

Die folgende Eingabe (ohne die Kommentare) wird in "1234567890" umgewandelt.

      _  _     _  _  _  _  _  _  #
    | _| _||_||_ |_   ||_||_|| | # Decimal numbers.
    ||_  _|  | _||_|  ||_| _||_| #
                                 # The fourth line is always blank,

Die folgende Eingabe wird in "123,456,789" umgewandelt.

    _  _ 
  | _| _|
  ||_  _|
         
    _  _ 
|_||_ |_ 
  | _||_|
         
 _  _  _ 
  ||_||_|
  ||_| _|
         

Hinweise zur Umsetzung

Definiere eine Funktion recognizeDigit wie in Schritt 1 der Anleitung beschrieben, nur dass sie alle zehn Ziffern 0 bis 9 erkennen soll. Bei Parametern und Rückgabewerten kannst du wählen, was dir gefällt, aber mach sie als Unterprogramm für Schritt 2 nützlich.

Definiere für Schritt 2

func Recognize(string) []string

und implementiere sie mit recognizeDigit.

Die hier getesteten Eingabe-Strings haben ein \n am Anfang jeder Zeile und kein abschließendes \n in der letzten Zeile. (So bleiben Raw-String-Literale lesbar.)

Für Bonuspunkte gehst du mit fehlerhaft formatierten Daten elegant um. Was machst du mit einer unvollständigen Zelle? Sie verwerfen? Mit Leerzeichen auffüllen? Sie mit dem Zeichen "?" melden? Was machst du, wenn das erste Zeichen kein \n ist?

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Go Exercism

Bereit, mit OCR-Zahlen zu starten?

Melde dich bei Exercism an, um Go mit 34 Konzepte165 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.