Confondere il correttore ortografico di Word!


12

Il tuo compito è creare un programma che prenderà un input di una parola di qualsiasi lunghezza, nel carattere Calibri. Questa parola sarà composta da caratteri lettera che si trovano su una normale tastiera QWERTY. Non ci saranno accenti o altri caratteri (es. Punteggiatura, numeri ecc.).

Quindi, i personaggi originali sono:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

Il programma quindi lo scramberà per cambiare i personaggi in modo che appaiano simili o esattamente uguali, il che probabilmente confonderebbe un correttore ortografico segnalandolo, ma mi confonderebbe perché sembra lo stesso della parola normale, con il carattere invariato.

Un esempio di questo è il carattere Unicode U+0430, la lettera minuscola cirillica a ("а"), può apparire identica al carattere Unicode U+0061, la lettera latina a a (("a") che è la minuscola "a" utilizzata in inglese.

Un altro esempio sono le lettere russe а, с, е, о, р, х e hanno controparti ottiche nell'alfabeto latino di base e sembrano vicine o identiche a a, c, e, o, p, x e y.

Regole:

  1. Il programma deve elaborare caratteri simili. Ciò significa che non possono essere archiviati in nessuna forma . Ciò significa che il valore Unicode o il carattere stesso.
  2. Questo è un codice golf: vince la risposta più breve!
  3. Devi pubblicare anche la versione non golfata per evitare imbrogli che non possono essere rilevati quando si gioca a golf!
  4. È possibile utilizzare qualsiasi funzione o programma per fare ciò, purché le parole non siano memorizzate lì.
  5. È necessario utilizzare UTF-8. Altri ingressi e uscite sono vietati. Questo è così che sono effettivamente in grado di leggere ciò che stai emettendo e ciò che sto immettendo, quindi non ho una massa casuale di quadrati, punti interrogativi e altre punteggiatura!
  6. Deve funzionare con qualsiasi parola che inserisco.

Un esempio funzionante (copia e incolla questo in parola e inserisci uno spazio dopo, dovrebbe contrassegnare il secondo e non il primo.)

Halim 
Hаlim  

Alcune informazioni utili sono qui

In bocca al lupo! Inizio


1
Penso che questo sia un ottimo candidato per il code-golf invece che per il concorso di popolarità .
Programmatore:

@Programmer: La domanda con questo come code-golf è, quanti caratteri devono essere sostituiti e quanto diversi sono autorizzati a cercare una risposta valida?
Martin Ender,

1
In entrambi i casi, una definizione di "confondere il correttore ortografico" sarebbe utile. Quale correttore ortografico? Inoltre, qual è il nostro alfabeto di input? Alfabeto di output? Ti consiglio di specificare un popolare strumento di controllo ortografico online e di specificare una codifica, come UTF-8.
Rainbolt

Ho preso in considerazione i tuoi commenti e ho cambiato alcune cose - grazie per il consiglio :)
George

Sarebbe stato uno scherzo dei pesci d'aprile se l'avessi chiesto qualche giorno fa!
George

Risposte:


12

JavaScript, 71 caratteri

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

Provalo su JSFiddle.

A proposito, questo sarebbe un po 'più breve in CoffeeScript ( 53 caratteri )

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

EDIT: ho appena notato il requisito UTF-8. Sarà difficile in JavaScript. : - /


Non sottovalutare questa risposta, è buona, ma è stata pubblicata prima che le regole cambiassero leggermente. Devi anche inserire una parola e non è possibile inserirla. Ci dispiace.
George,

@GeorgeH bene la funzione accetta qualsiasi testo arbitrario (non solo singole parole). È solo il JSFiddle che mostra l'utilizzo con un esempio specifico.
Martin Ender,

1
Oh, scusa, non ho mai usato JSFiddle prima! La sua Parola è davvero confusa ora - Pensa che lo Georgesia Egrete altre cose!
George

5
Hmm ... Ho preso a caso qualche parola per testare la vostra funzione, ma non funziona ... Le parole che ho raccolto sono stati level, rotor, racecar, refere kayak.
user12205

1
@ace Touché. : P
Martin Ender,

9

Python3 - 51

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

Il modo pigro!

Leggermente ungolfed

r=''
for c in input():
    r += chr(ord(c) - 0x20 + 0xFF00) # convert to fullwidth ASCII range
print(r)

Per favore, puoi pubblicare una versione non giocata? Grazie!
George,

Fatto, dovrebbe essere autoesplicativo :)
LemonBoy

Se lo usi in IDLE puoi rimuovere print()- lo stamperà comunque
chill0r

È possibile salvare un byte modificando il numero esadecimale FEE0 in un numero decimale (65248).
0WJYxL9FMN

8

Lisp comune, 142

Non ho un font di nome Calibri e alla maggior parte dei miei font mancano questi simboli, ma DejaVu Sans li ha. Sostituisco le lettere con simboli alfanumerici matematici . Il controllo ortografico non segnala alcun errore. Invece, non riesce a rilevare errori, anche se le parole hanno errori di battitura ovvi.

golfed:

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

uso

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

Suppongo che il tuo interprete Lisp abbia il supporto Unicode e che la tua locale sia UTF-8. Non utilizzare abcl, poiché presenta problemi al di fuori del piano multilingue di base.

Cloni Unix: è possibile eseguire localein un terminale. Se la riga per LC_CTYPE non menziona UTF-8, provare export LC_CTYPE=en_US.UTF-8.

Esempio

Ho incollato un po 'di output in LibreOffice. Il mio testo presenta evidenti errori di ortografia, ma LibreOffice non riesce a rilevarli. Non disegna scricchiolii rossi sotto le parole e il pulsante di controllo ortografico riporta solo "Il controllo ortografico è completo".

LibreOffice

Il testo è "𝖭𝗈𝗐𝗐 𝗂𝗓 𝗍𝖾𝗁 𝗍𝗍𝗂𝗆𝖾 𝖿𝗈𝗈𝗋 𝖺𝗁𝗅 𝗀𝗎𝖽 𝗇𝖾𝗆 𝗍𝗍𝗈 𝖼𝗈𝖾𝗆 𝗍𝗍𝗈 𝗍𝖾𝗁 𝖺𝖾𝖽 𝗈𝗏 𝗍𝖾𝗋𝖾 𝖼𝗈𝗎𝗇𝗍𝗋𝖾𝖾." Anche Firefox non trova errori di ortografia in questo testo.


5

Dyalog APL , 7 caratteri

∊''∘,¨

Tra le virgolette è presente un U + FEFF ( Zero-No-Break Space , alias Unicode BOM ). Questo carattere compare nel carattere Calibri. Il personaggio ''è anteposto ,a ciascun ¨personaggio nell'argomento, e l'intera cosa viene quindi appiattita .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.