Bingung pemeriksa ejaan kata!

12

Tugas Anda adalah membuat program yang akan mengambil input kata apa pun, di font Calibri. Kata ini akan dibuat dari karakter huruf yang ditemukan pada keyboard QWERTY normal. Tidak akan ada aksen atau karakter lain (yaitu tanda baca, angka, dll).

Jadi, karakter aslinya adalah:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

Program kemudian akan mengacaknya untuk mengubah karakter sehingga mereka terlihat mirip atau persis sama, yang mungkin akan membingungkan pemeriksa ejaan dengan menandainya, tetapi itu akan membingungkan saya karena terlihat sama dengan kata normal, dengan karakter yang tidak berubah.

Contohnya adalah karakter Unicode U+0430, huruf kecil Cyrillic a ("a"), dapat terlihat identik dengan karakter Unicode U+0061, huruf kecil Latin a, ("a") yang merupakan huruf kecil "a" yang digunakan dalam bahasa Inggris.

Contoh lain adalah huruf Rusia a, с, è, о, р, х dan Anda memiliki rekan optik dalam alfabet Latin dasar dan terlihat dekat atau identik dengan a, c, e, o, p, x, dan y.

Aturan:

  1. Program ini harus mengerjakan karakter yang sama. Ini berarti bahwa mereka tidak dapat disimpan dalam bentuk apa pun . Ini berarti nilai Unicode atau karakter itu sendiri.
  2. Ini adalah kode golf - jawaban terpendek menang!
  3. Anda juga harus memposting versi yang tidak serigala untuk menghindari kecurangan yang tidak dapat dideteksi ketika dip Golf!
  4. Anda dapat menggunakan fungsi atau program apa saja untuk melakukan ini, selama kata-kata tidak tersimpan di sana juga.
  5. Anda harus menggunakan UTF-8. Input dan output lainnya dilarang. Ini agar saya benar-benar dapat membaca apa yang Anda hasilkan, dan apa yang saya masukkan, jadi saya tidak memiliki massa kuadrat acak, tanda tanya, dan “punctuati❮n rand❮m lain!
  6. Itu harus bekerja dengan kata apa pun yang saya masukan.

Contoh yang berfungsi (Salin dan tempel ini ke kata dan masukkan spasi setelahnya, itu akan menandai yang kedua dan bukan yang pertama.)

Halim 
Hаlim  

Beberapa info bermanfaat ada di sini

Semoga berhasil! Mulai

George
sumber
1
Saya pikir ini adalah kandidat yang bagus untuk golf kode daripada kontes popularitas .
ProgrammerDan
@ProgrammerDan pertanyaan dengan kode-golf ini adalah, berapa banyak karakter yang harus diganti dan seberapa banyak perbedaan yang dibolehkan untuk mencari jawaban yang valid?
Martin Ender
1
Dalam kedua kasus tersebut, definisi "membingungkan pemeriksa ejaan" akan lebih baik. Pemeriksa ejaan mana? Juga, apa alfabet masukan kita? Alfabet keluaran? Saya sarankan Anda menentukan alat pemeriksa ejaan online yang populer, dan menentukan pengkodean, seperti UTF-8.
Rainbolt
Saya telah mengambil komentar Anda di papan tulis dan mengubah beberapa hal - terima kasih atas sarannya :)
George
Ini akan menjadi lelucon April Mop yang hebat jika aku menanyakan ini beberapa hari yang lalu!
George

Jawaban:

12

JavaScript, 71 karakter

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

Cobalah di JSFiddle.

Ngomong-ngomong, ini akan menjadi sedikit lebih baik di CoffeeScript ( 53 karakter )

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

EDIT: Saya baru saja memperhatikan bahwa persyaratan UTF-8. Itu akan sulit dalam JavaScript. : - /

Martin Ender
sumber
Jangan downvote jawaban ini - itu jawaban yang bagus, tetapi sudah diposting sebelum aturannya sedikit berubah. Anda juga harus memasukkan kata dan tidak dapat dikodekan. Maaf.
George
@ GeorgeH baik fungsi mengambil teks sewenang-wenang (bukan hanya satu kata). Hanya JSFiddle yang menampilkan penggunaan dengan satu contoh spesifik.
Martin Ender
1
Oh, maaf, saya belum pernah menggunakan JSFiddle sebelumnya! Yang benar-benar bingung Firman sekarang - Hal berpikir Georgeadalah Egretdan hal-hal lain!
George
5
Hmm ... Saya secara acak memilih beberapa kata untuk menguji fungsi Anda tetapi tidak bekerja ... Kata-kata saya memilih berada level, rotor, racecar, referdan kayak.
user12205
1
@ace Touché. : P
Martin Ender
9

Python3 - 51

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

Cara malas!

Sedikit tidak berbulu

r=''
for c in input():
    r += chr(ord(c) - 0x20 + 0xFF00) # convert to fullwidth ASCII range
print(r)
LemonBoy
sumber
Tolong bisakah Anda memposting versi yang tidak disunat? Terima kasih!
George
Selesai, harus menjelaskan sendiri :)
LemonBoy
Jika Anda menggunakannya di IDLE, Anda dapat menghapus print()- tetap akan mencetaknya
chill0r
Anda dapat menyimpan satu byte dengan mengubah angka heksadesimal FEE0 ke angka desimal (65248).
0WJYxW9FMN
8

Common Lisp, 142

Saya tidak memiliki font yang bernama Calibri, dan sebagian besar font saya tidak memiliki simbol-simbol ini, tetapi DejaVu Sans memilikinya. Saya mengganti huruf dengan Simbol Alfanumerik Matematika . Pemeriksa ejaan tidak menandai kesalahan apa pun. Sebaliknya, gagal mendeteksi kesalahan, bahkan jika kata-kata memiliki kesalahan ketik yang jelas.

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

Tidak Disatukan:

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

Pemakaian

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

Saya berasumsi bahwa interpreter Lisp Anda memiliki dukungan Unicode dan lokal Anda adalah UTF-8. Jangan gunakan abcl, karena memiliki masalah di luar Basic Multilingual Plane.

Klon Unix: Anda dapat berjalan localedi terminal. Jika baris untuk LC_CTYPE tidak menyebutkan UTF-8, coba export LC_CTYPE=en_US.UTF-8.

Contoh

Saya menempelkan beberapa output ke LibreOffice. Teks saya memiliki kesalahan pengejaan yang jelas, tetapi LibreOffice gagal mendeteksi mereka. Tidak ada coretan merah di bawah kata-kata, dan tombol periksa ejaan hanya melaporkan, "Periksa ejaan sudah selesai."

LibreOffice

Teksnya adalah, "𝖭𝗈𝗐𝗐 𝗂𝗓 𝗍𝖾𝗁 𝗍𝗍𝗂𝗆𝖾 𝖿𝗈𝗈𝗋 𝖺𝗁𝗅 𝗀𝗎𝖽 𝗇𝖾𝗆 𝗍𝗍𝗈 𝖼𝗈𝖾𝗆 𝗍𝗍𝗈 𝗍𝗍𝗈 𝗍𝖾𝗁 𝖺𝖾𝖽 𝖺𝖾𝖽 𝗈𝗏 𝖼𝗈𝗎𝗇𝗍𝗋𝖾𝖾." Firefox juga tidak menemukan kesalahan pengejaan dalam teks ini.

kernigh
sumber
5

Dyalog APL , 7 karakter

∊''∘,¨

Ada U + FEFF ( Zero Width No-Break Space , alias Unicode BOM ) di antara tanda kutip. Karakter ini muncul di dalam font Calibri. Karakter ''adalah prepended ,untuk setiap ¨karakter dalam argumen, dan semuanya kemudian diratakan .

Adm
sumber