Confondez le correcteur orthographique de Word!

12

Votre tâche consiste à créer un programme qui prendra une entrée d'un mot de n'importe quelle longueur, dans la police Calibri. Ce mot sera composé de caractères alphabétiques que l'on trouve sur un clavier QWERTY normal. Il n'y aura aucun accent ni aucun autre caractère (par exemple, ponctuation, chiffres, etc.).

Ainsi, les personnages originaux sont:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

Le programme le brouillera ensuite pour changer les caractères afin qu'ils soient similaires ou exactement les mêmes, ce qui confondrait probablement un correcteur orthographique en le signalant, mais cela me confondrait car il ressemble au mot normal, avec le caractère inchangé.

Un exemple de ceci est le caractère Unicode U+0430, la lettre minuscule cyrillique a ("а"), peut ressembler au caractère Unicode U+0061, la lettre minuscule latine a ("a") qui est le "a" minuscule utilisé en anglais.

Un autre exemple est les lettres russes а, с, е, о, р, х et у ont des équivalents optiques dans l'alphabet latin de base et semblent proches ou identiques à a, c, e, o, p, x et y.

Règles:

  1. Le programme doit travailler sur des personnages similaires. Cela signifie qu'ils ne peuvent être stockés sous aucune forme . Cela signifie que la valeur Unicode ou le caractère lui-même.
  2. Il s'agit d'un code de golf - la réponse la plus courte l'emporte!
  3. Vous devez également publier la version non golfée pour éviter la tricherie qui ne peut pas être détectée lors de son golf!
  4. Vous pouvez utiliser n'importe quelle fonction ou programme pour cela, tant que les mots n'y sont pas stockés non plus.
  5. Vous devez utiliser UTF-8. D'autres entrées et sorties sont interdites. C'est pour que je sois en mesure de lire ce que vous sortez et ce que je saisis, donc je n'ai pas une masse aléatoire de carrés, de points d'interrogation et ❮ther rand❮m punctuati❮n!
  6. Il doit fonctionner avec n'importe quel mot que j'entre.

Un exemple de travail (copiez et collez ceci dans Word et insérez un espace après, il doit marquer le second et non le premier.)

Halim 
Hаlim  

Quelques informations utiles sont ici

Bonne chance! Commencer

George
la source
1
Je pense que c'est un excellent candidat pour le golf de code au lieu du concours de popularité .
ProgrammerDan
@ProgrammerDan la question avec ceci comme code-golf est, combien de caractères doivent être remplacés et dans quelle mesure sont-ils autorisés à chercher une réponse valide?
Martin Ender
1
Dans les deux cas, une définition de "confondre le correcteur orthographique" serait bien. Quel correcteur orthographique? En outre, quel est notre alphabet d'entrée? Alphabet de sortie? Je vous recommande de spécifier un outil de vérification orthographique en ligne populaire et de spécifier un encodage, tel que UTF-8.
Rainbolt
J'ai pris en compte vos commentaires et changé certaines choses - merci pour les conseils :)
George
Cela aurait été une super farce des poissons d'avril si je l'avais demandé il y a quelques jours!
George

Réponses:

12

JavaScript, 71 caractères

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

Essayez-le sur JSFiddle.

Soit dit en passant, ce serait un peu plus court dans CoffeeScript ( 53 caractères )

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

EDIT: Je viens de remarquer que l'exigence UTF-8. Cela va être difficile en JavaScript. : - /

Martin Ender
la source
Ne sous-estimez pas cette réponse - c'est une bonne réponse, mais elle a été publiée avant que les règles ne changent légèrement. Vous devez également saisir un mot et il ne peut tout simplement pas être codé en dur. Désolé.
George
@GeorgeH bien la fonction prend n'importe quel texte arbitraire (pas seulement des mots simples). C'est juste le JSFiddle qui présente l'utilisation avec un exemple spécifique.
Martin Ender
1
Oh, désolé, je n'ai jamais utilisé JSFiddle auparavant! Son mot vraiment confus maintenant - Il pense que Georgec'est Egretet d'autres choses!
George
5
Hmm ... J'ai choisi au hasard quelques mots pour tester votre fonction , mais il ne fonctionne pas ... Les mots que je ramassé étaient level, rotor, racecar, referet kayak.
user12205
1
@ace Touché. : P
Martin Ender
9

Python3 - 51

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

La manière paresseuse!

Légèrement non golfé

r=''
for c in input():
    r += chr(ord(c) - 0x20 + 0xFF00) # convert to fullwidth ASCII range
print(r)
LemonBoy
la source
Pouvez-vous publier une version non golfée? Merci!
George
Fait, cela devrait être explicite :)
LemonBoy
Si vous l'utilisez dans IDLE, vous pouvez supprimer le print()- il l'imprimera quand même
chill0r
Vous pouvez enregistrer un octet en remplaçant le nombre hexadécimal FEE0 par un nombre décimal (65248).
0WJYxW9FMN du
8

Lisp commun, 142

Je n'ai pas de police nommée Calibri, et la plupart de mes polices n'ont pas ces symboles, mais DejaVu Sans les a. Je remplace les lettres par des symboles alphanumériques mathématiques . Le correcteur orthographique ne signale aucune erreur. Au lieu de cela, il ne parvient pas à détecter les erreurs, même si les mots ont des fautes de frappe évidentes.

Golfé:

(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))))))

Non golfé:

(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))))))

Usage

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

Je suppose que votre interprète Lisp prend en charge Unicode et que votre environnement local est UTF-8. Ne l'utilisez pas abcl, car il a des problèmes en dehors du plan multilingue de base.

Clones Unix: Vous pouvez exécuter localedans un terminal. Si la ligne pour LC_CTYPE ne mentionne pas UTF-8, essayez export LC_CTYPE=en_US.UTF-8.

Exemple

J'ai collé une sortie dans LibreOffice. Mon texte comporte des fautes d'orthographe évidentes, mais LibreOffice ne parvient pas à les détecter. Il ne dessine pas de gribouillis rouges sous les mots, et le bouton de vérification orthographique ne signale que "La vérification orthographique est terminée."

LibreOffice

Le texte est "𝖭𝗈𝗐𝗐 𝗂𝗓 𝗍𝖾𝗁 𝗍𝗍𝗂𝗆𝖾 𝖿𝗈𝗈𝗋 𝖺𝗁𝗅 𝗀𝗎𝖽 𝗇𝖾𝗆 𝗍𝗍𝗈 𝖼𝗈𝖾𝗆 𝗍𝗍𝗈 𝗍𝖾𝗁 𝖺𝖾𝖽 𝗈𝗏 𝗍𝖾𝗋𝖾 𝖼𝗈𝗎𝗇𝗍𝗋𝖾𝖾." Firefox ne trouve également aucune faute d'orthographe dans ce texte.

kernigh
la source
5

Dyalog APL , 7 caractères

∊''∘,¨

Il y a un U + FEFF ( Zero-No-Break Space , alias Unicode BOM ) entre les guillemets. Ce caractère apparaît dans la police Calibri. Le caractère ''est ajouté ,à chaque ¨caractère de l'argument, puis le tout est aplati .

Adam
la source