- left
- right
- up
- down
Soll das Programm in der Lage sein, Lückentexte mit merkwürdigen Unicode Graphemes zu lösen?
Hier ein Beispiel.
Ohne zusätzliche Pakete ist es in Rust kaum möglich die Länge eines Wortes zu bestimmen, welches diese Zeichen enthält, denn das hier passiert wenn man das versucht.
Das gleiche passiert auch bei einigen Emojis, wodurch Lückentexte mit diesen nicht lösbar wären.
Da keine der Beispieldateien solche Zeichen enthielt, bin ich mir nicht sicher, ob das Programm diese lösen können sollte.
Bei der Aufgabe geht es sicher nicht um verschiedene Zeichen, sondern eher darum, den Lücken Wörter zuzuordnen. Das Problem mit komischen Zeichen lässt sich notfalls umgehen, indem man Sonderzeichen durch z. B. deren HTML-Codes ersetzt und im Programm Ausnahmeregeln für solche Codes einfügt. Aber wenn in den Beispieldateien keine Sonderzeichen vorkommen, wird das wohl auch nicht nötig sein.
Jonathan Busch said:
Bei der Aufgabe geht es sicher nicht um verschiedene Zeichen, sondern eher darum, den Lücken Wörter zuzuordnen. Das Problem mit komischen Zeichen lässt sich notfalls umgehen, indem man Sonderzeichen durch z. B. deren HTML-Codes ersetzt und im Programm Ausnahmeregeln für solche Codes einfügt. Aber wenn in den Beispieldateien keine Sonderzeichen vorkommen, wird das wohl auch nicht nötig sein.
Mir ging es hauptsächlich einfach darum, ob das Programm Texte wie das verlinkte Beispiel lösen sollen könnte.
Wie HTML-Codes bei diesem Problem helfen sollen ist mir aber nicht wirklich klar, das klingt nämlich viel komplizierter als eine der vorher erwähnten zusätzlichen Bibliotheken, wie z.B. unicode-segmentation zu benutzen.
Das Problem liegt nämlich darin, dass die Lücken, falls eines der Wörter so ein Sonderzeichen enthält, mindestens ein Zeichen zu kurz erscheinen (siehe verlinktes Rust Beispiel), wodurch der Lückentext unlösbar wird.
Sonderzeichen müsste man schon in der Eingabedatei ersetzen, damit diese mit UTF-8 oder ASCII lesbar wird:
____l s___ _e____. sind gesund & #x00c4pfel
Im Programm zählt man dann auch Vorkommen der Zeichenkombination "& #x". Damit kann man dann die Länge des Wortes mit Sonderzeichen ausrechnen. Wenn man z. B. immer eine 4-stellige hexadezimale Zahl als Code verwendet, ist der Ausnahmecode immer 7 Zeichen lang. Bei jedem "& #x"-Vorkommen stehen also 7 Zeichen für ein Sonderzeichen.
PS: Leerzeichen zwischen "&" und "#x" nicht beachten; ohne sie würden die Zeichenketten nämlich als HTML-Codes erkannt und ersetzt.
Jonathan Busch said:
Sonderzeichen müsste man schon in der Eingabedatei ersetzen, damit diese mit UTF-8 oder ASCII lesbar wird:
<pre>____l s___ _e____. sind gesund Ä</pre>
Im Programm zählt man dann auch Vorkommen der Zeichenkombination "". Damit kann man dann die Länge des Wortes mit Sonderzeichen ausrechnen. Wenn man z. B. immer eine 4-stellige hexadezimale Zahl als Code verwendet, ist der Ausnahmecode immer 7 Zeichen lang. Bei jedem ""-Vorkommen stehen also 7 Zeichen für ein Sonderzeichen.
Danke für den Vorschlag, aber inwiefern ist das weniger kompliziert als eine zusätzliche Bibliothek?
Lukas Panhirsch said:
Soll das Programm in der Lage sein, Lückentexte mit merkwürdigen Unicode Graphemes zu lösen?
Diese Frage kann man ganz pauschal mit „nein“ beantworten.
Dein Programm sollte auf jeden Fall in der Lage sein, die Beispieldaten zu bearbeiten. Außerdem sollte dein Programm mit allen Zeichen in der deutschen Schriftsprache umgehen können (Umlaute, kleines „ß“).
Du kannst davon ausgehen, dass die Eingabedaten UTF-8-kodiert sind, und dass alle Zeichen darin in ihrer "normalen" Kodierung vorkommen.
Darüber hinaus steht es dir natürlich frei, trotzdem eine Behandlung von Grapheme-Clustern zum implementieren. Du kannst dafür auch Bibliotheken verwenden (siehe auch „Dürfen Programmbibliotheken verwendet werden?“ in https://bwinf.de/bundeswettbewerb/haeufige-fragen/). Das kann interessant und lehrreich sein, gibt aber keine zusätzlichen Punkte (die gibt es in der ersten Runde generell nicht).
Robert Czechowski said:
Lukas Panhirsch said:
Soll das Programm in der Lage sein, Lückentexte mit merkwürdigen Unicode Graphemes zu lösen?
Diese Frage kann man ganz pauschal mit „nein“ beantworten.
Dein Programm sollte auf jeden Fall in der Lage sein, die Beispieldaten zu bearbeiten. Außerdem sollte dein Programm mit allen Zeichen in der deutschen Schriftsprache umgehen können (Umlaute, kleines „ß“).
Du kannst davon ausgehen, dass die Eingabedaten UTF-8-kodiert sind, und dass alle Zeichen darin in ihrer "normalen" Kodierung vorkommen.
Darüber hinaus steht es dir natürlich frei, trotzdem eine Behandlung von Grapheme-Clustern zum implementieren. Du kannst dafür auch Bibliotheken verwenden (siehe auch „Dürfen Programmbibliotheken verwendet werden?“ in https://bwinf.de/bundeswettbewerb/haeufige-fragen/). Das kann interessant und lehrreich sein, gibt aber keine zusätzlichen Punkte (die gibt es in der ersten Runde generell nicht).
Vielen Dank für die ausführliche Antwort, ich lass es dann wohl so wie es im Moment ist.