Verwirren Sie die Wort-Rechtschreibprüfung!

12

Ihre Aufgabe ist es, ein Programm zu erstellen, das die Eingabe eines Worts beliebiger Länge in der Schriftart Calibri ermöglicht. Dieses Wort besteht aus Buchstaben, die auf einer normalen QWERTZ-Tastatur zu finden sind. Es werden keine Akzente oder andere Zeichen (z. B. Satzzeichen, Zahlen usw.) angezeigt.

Die ursprünglichen Zeichen sind also:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

Das Programm verschlüsselt es dann, um die Zeichen so zu ändern, dass sie ähnlich oder genau gleich aussehen, was eine Rechtschreibprüfung wahrscheinlich verwirren würde, wenn es markiert wird, aber es würde mich verwirren, da es genauso aussieht wie das normale Wort mit dem unveränderten Zeichen.

Ein Beispiel hierfür ist das Unicode-Zeichen U+0430, der kyrillische Kleinbuchstabe a ("à"), der mit dem Unicode-Zeichen identisch sein kannU+0061 , dem lateinischen Kleinbuchstaben a ("a") im Englischen verwendeten Kleinbuchstaben "a".

Ein weiteres Beispiel sind die russischen Buchstaben А, С, е, о, р, х und у, die optische Entsprechungen im lateinischen Grundalphabet haben und ähnlich oder identisch mit a, c, e, o, p, x und y aussehen.

Regeln:

  1. Das Programm muss ähnliche Charaktere ausarbeiten. Dies bedeutet, dass sie in keiner Form gespeichert werden können . Dies bedeutet, dass Unicode-Wert oder das Zeichen selbst.
  2. Dies ist ein Codegolf - die kürzeste Antwort gewinnt!
  3. Sie müssen auch die ungolfed Version posten, um Betrug zu vermeiden, der beim Golfen nicht erkannt werden kann!
  4. Sie können dazu eine beliebige Funktion oder ein beliebiges Programm verwenden, sofern dort auch keine Wörter gespeichert sind.
  5. Sie müssen UTF-8 verwenden. Andere Ein- und Ausgänge sind gesperrt. Dies ist so, dass ich tatsächlich lesen kann, was Sie ausgeben und was ich eingebe, so dass ich keine zufällige Masse von Quadraten, Fragezeichen und sonstigen Satzzeichen habe!
  6. Es muss mit jedem Wort funktionieren, das ich eingebe.

Ein funktionierendes Beispiel (Kopieren Sie dieses und fügen Sie es in das Wort ein. Fügen Sie danach ein Leerzeichen ein. Es sollte das zweite und nicht das erste kennzeichnen.)

Halim 
Hаlim  

Einige hilfreiche Informationen finden Sie hier

Viel Glück! Start

George
quelle
1
Ich denke, dies ist ein großartiger Kandidat für Code-Golf anstelle eines Beliebtheitswettbewerbs .
ProgrammerDan
@ProgrammerDan die Frage mit diesem als Code-Golf ist, wie viele Zeichen ersetzt werden müssen und wie unterschiedlich sie nach einer Antwort suchen dürfen, um gültig zu sein?
Martin Ender
1
In beiden Fällen wäre eine Definition von "Rechtschreibprüfung verwechseln" hilfreich. Welche Rechtschreibprüfung? Was ist auch unser Eingabealphabet? Alphabet ausgeben? Ich empfehle, dass Sie ein beliebtes Online-Rechtschreibprüfungstool und eine Codierung wie UTF-8 angeben.
Rainbolt
Ich habe Ihre Kommentare an Bord genommen und ein paar Dinge geändert - danke für den Rat :)
George
Das wäre ein toller Aprilscherz gewesen, wenn ich das vor ein paar Tagen gefragt hätte!
George

Antworten:

12

JavaScript, 71 Zeichen

function f(s){return "\u202E"+s.split("").reverse().join("")+"\u202C";}

Probieren Sie es auf JSFiddle aus.

Übrigens wäre das in CoffeeScript etwas kürzer ( 53 Zeichen )

f=(s)->"\u202E#{s.split('').reverse().join ''}\u202C"

EDIT: Ich habe gerade bemerkt, dass UTF-8 erforderlich ist. In JavaScript wird das schwierig. : - /

Martin Ender
quelle
Stimmen Sie diese Antwort nicht ab - es ist gut, aber sie wurde veröffentlicht, bevor sich die Regeln leicht geändert haben. Sie müssen auch ein Wort eingeben, das nicht einfach fest codiert werden kann.
George
@GeorgeH naja die funktion nimmt jeden beliebigen text auf (nicht nur einzelne wörter). Es ist nur die JSFiddle, die die Verwendung mit einem bestimmten Beispiel zeigt.
Martin Ender
1
Oh, Entschuldigung, ich habe JSFiddle noch nie benutzt! Es Georgeist jetzt ein wirklich verwirrtes Wort - es denkt, es ist Egretund andere Sachen!
George
5
Hmm ... ich ein paar Worte zufällig ausgewählt Ihre Funktion zu testen , aber es funktioniert nicht ... Die Worte , die ich ausgesucht waren level, rotor, racecar, referund kayak.
user12205
1
@ace Touché. : P
Martin Ender
9

Python3 - 51

print(''.join(chr(ord(c)+0xFEE0)for c in input()))

Der faule Weg!

Leicht ungolfed

r=''
for c in input():
    r += chr(ord(c) - 0x20 + 0xFF00) # convert to fullwidth ASCII range
print(r)
LemonBoy
quelle
Kannst du bitte eine ungolfed Version posten? Vielen Dank!
George
Fertig, es sollte selbsterklärend sein :)
LemonBoy
Wenn Sie es in LEERLAUF verwenden, können Sie das print()- es wird es trotzdem
ausdrucken
Sie können ein Byte speichern, indem Sie die Hexadezimalzahl FEE0 in eine Dezimalzahl (65248) ändern.
0WJYxW9FMN
8

Common Lisp, 142

Ich habe keine Schrift namens Calibri und die meisten meiner Schriftarten haben diese Symbole nicht, aber DejaVu Sans hat sie. Ich ersetze Buchstaben durch mathematische alphanumerische Symbole . Die Rechtschreibprüfung kennzeichnet keine Fehler. Stattdessen werden Fehler nicht erkannt, auch wenn Wörter offensichtliche Tippfehler aufweisen.

Golf gespielt:

(ignore-errors(do(c)(())(setf c(char-code (read-char)))(write-char(code-char(cond((< 64 c 91)(+ c 120159))((< 96 c 123)(+ c 120153))(t c))))))

Ungolfed:

(ignore-errors      ; Ignore when (read-char) signals end of file.
  (do (c) (())      ; Loop forever with variable c.
    (setf c (char-code (read-char)))
    (write-char
     (code-char
      (cond
         ;; Replace A to Z with U+1D5A0 to U+1D5B9.
         ((< 64 c 91) (+ c 120159))
         ;; Replace a to z with U+1D5BA to U+1D5D3.
         ((< 96 c 123) (+ c 120153))
         ;; Keep other characters.
         (t c))))))

Verwendung

  • clisp asconfuse.lisp <in >out
  • ecl -shell asconfuse.lisp <in >out
  • sbcl --script asconfuse.lisp <in >out

Ich gehe davon aus, dass Ihr Lisp-Interpreter Unicode unterstützt und Ihr Gebietsschema UTF-8 ist. Nicht verwenden abcl, da es Probleme außerhalb der mehrsprachigen Basisebene gibt.

Unix-Klone: Sie können localein einem Terminal ausgeführt werden. Wenn die Zeile für LC_CTYPE nicht UTF-8 enthält, versuchen Sie es export LC_CTYPE=en_US.UTF-8.

Beispiel

Ich habe einige Ausgaben in LibreOffice eingefügt. Mein Text enthält offensichtliche Rechtschreibfehler, die LibreOffice jedoch nicht erkennt. Es werden keine roten Kringel unter den Wörtern angezeigt, und die Schaltfläche "Rechtschreibprüfung" meldet nur "Die Rechtschreibprüfung ist abgeschlossen".

LibreOffice

Der Text lautet "𝖭𝗈𝗐𝗐 𝖭𝗈𝗐𝗐 𝗂𝗓 𝗍𝖾𝗁 𝗍𝗍𝗂𝗆𝖾 𝖿𝗈𝗈𝗋 𝖺𝗁𝗅 𝗇𝖾𝗆 𝗍𝗍𝗈 𝖼𝗈𝖾𝗆 𝗍𝗍𝗈 𝗍𝖾𝗁 𝗍𝖾𝗁 𝖺𝖾𝖽 𝗈𝗏 𝗍𝖾𝗋𝖾." Firefox findet in diesem Text auch keine Rechtschreibfehler.

Kernigh
quelle
5

Dyalog APL , 7 Zeichen

∊''∘,¨

Zwischen den Anführungszeichen befindet sich ein U + FEFF ( Null-Breite-Leerzeichen , auch bekannt als Unicode-Stückliste ). Dieses Zeichen kommt in der Schriftart Calibri vor. Das Zeichen ''wird jedem Zeichen im Argument vorangestellt , und das Ganze wird dann abgeflacht .,¨

Adam
quelle