Kelime yazım denetleyicisini karıştır!


12

Senin görevin, Calibri yazı tipinde herhangi bir uzunlukta bir kelime girişi alacak bir program yapmaktır . Bu kelime normal bir QWERTY klavyede bulunan harf karakterlerinden oluşacaktır. Aksanlar veya başka karakterler (noktalama işaretleri, sayılar vb.) Olmayacaktır.

Yani orijinal karakterler:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

Program daha sonra karakterleri değiştirmek için karıştırır, böylece benzer veya tam olarak aynı görünürler, bu da bir yazım denetleyicisini işaretleyerek karıştırır, ancak normal kelimeyle aynı göründüğü gibi, değişmeyen karakterle karıştırır.

Bunun bir örneği Unicode karakteri U+0430, Kiril küçük harfi a ("а"), Unicode karakteri U+0061, İngilizce'de kullanılan küçük "a" harfi olan Latince küçük harf a, ("a") ile aynı görünebilir .

Başka bir örnek, temel Latin alfabesinde optik karşılığı olan ve a, c, e, o, p, x ve y ile aynı veya benzer görünen Rus harfleri а, с, о, р, х ve у'dır.

Kurallar:

  1. Program benzer karakterler üzerinde çalışmak zorundadır. Bu , herhangi bir biçimde saklanamayacakları anlamına gelir . Bu, Unicode değerinin veya karakterin kendisinin olduğu anlamına gelir.
  2. Bu bir kod golf - en kısa cevap kazanır!
  3. Golf yaparken tespit edilemeyen hile önlemek için ungolfed sürümü de yayınlamak zorunda!
  4. Kelimeler orada saklanmadığı sürece, bunu yapmak için herhangi bir işlevi veya programı kullanabilirsiniz.
  5. UTF-8 kullanmalısınız. Diğer giriş ve çıkışlar yasaklanmıştır. Bu aslında ne çıktısını ve ne girdiğini okuyabiliyorum, bu yüzden rastgele bir kareler, soru işaretleri ve ❮ther rand❮m punctuati❮n kütlesi yok!
  6. Girdiğim herhangi bir kelimeyle çalışmak zorunda.

Çalışan bir örnek (Bunu kopyalayıp kelimeye yapıştırın ve sonra bir boşluk ekleyin, ilkini değil ikincisini işaretlemelidir.)

Halim 
Hаlim  

Bazı yararlı bilgiler burada

İyi şanslar! Başla


1
Bu popülerlik yarışması yerine kod golf için harika bir aday olduğunu düşünüyorum .
ProgrammerDan

KodProgram olarak bununla ilgili soru, kaç karakterin değiştirilmesi gerekiyor ve bir cevabın geçerli olması için ne kadar farklı olmalarına izin veriliyor?
Martin Ender

1
Her iki durumda da, "yazım denetleyicisini karıştır" tanımı iyi olurdu. Hangi yazım denetleyicisi? Ayrıca, girdi alfabemiz nedir? Alfabe çıktısı alınıyor mu? Popüler bir çevrimiçi yazım denetimi aracı belirlemenizi ve UTF-8 gibi bir kodlama belirtmenizi öneririm.
Rainbolt

Yorumlarınızı gemiye aldım ve birkaç şeyi değiştirdim - tavsiye için teşekkürler :)
George

Birkaç gün önce bunu sorsaydı bu büyük bir April Fools 'şaka olurdu!
George

Yanıtlar:


12

JavaScript, 71 karakter

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

JSFiddle'da deneyin.

Bu arada, bu CoffeeScript'te biraz daha kısa olurdu ( 53 karakter )

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

EDIT: Ben sadece UTF-8 gereksinimi fark ettim. JavaScript'te bu zor olacak. : - /


Bu cevabı küçümsemeyin - bu iyi bir yanıt, ancak kurallar biraz değişmeden önce gönderildi. Ayrıca bir kelime girmek zorunda ve bu sadece kodlanamaz. Üzgünüm.
George

@GeorgeH iyi fonksiyon herhangi bir rastgele metin alır (sadece tek kelime değil). Belirli bir örnekle kullanımı gösteren sadece JSFiddle.
Martin Ender

1
Üzgünüm, daha önce hiç JSFiddle kullanmadım! Onun gerçekten şimdi Word'ü karıştı - O düşünür Georgeolduğunu Egretve diğer şeyler!
George

5
Hmm ... rastgele işlevini test etmek için bazı kelimeler aldı ama öyle değil çalışır ... Ben aldım sözlerdi level, rotor, racecar, referve kayak.
user12205

1
@ace Touché. : P
Martin Ender

9

Python3 - 51

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

Tembel yol!

Hafifçe soluksuz

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

Lütfen ungolfed versiyonunu gönderebilir misiniz? Teşekkürler!
George

Bitti, kendini açıklamalı olmalı :)
LemonBoy

Eğer IDLE kullanmak Eğer kaldırabilirsiniz print()- bu yine de yazdırıldığı
chill0r

Onaltılık FEE0 sayısını ondalık sayıya değiştirerek bir bayt kaydedebilirsiniz (65248).
0WJYxW9FMN

8

Ortak Lisp, 142

Calibri adında bir fontum yok ve yazı tiplerimin çoğunda bu semboller yok, ancak DejaVu Sans bunlara sahip. Harfleri Matematiksel Alfasayısal Sembollerle değiştiriyorum . Yazım denetleyici herhangi bir hatayı işaretlemez. Bunun yerine, kelimelerin belirgin yazım hataları olsa bile hataları algılayamaz.

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

kullanım

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

Lisp tercümanınızın Unicode desteği olduğunu ve yerel ayarınızın UTF-8 olduğunu varsayıyorum. Kullanmayın abcl, çünkü Temel Çok Dilli Düzlem'in dışında sorunları vardır.

Unix klonları:locale Bir terminalde çalıştırabilirsiniz . LC_CTYPE hattı UTF-8'den bahsetmiyorsa, deneyin export LC_CTYPE=en_US.UTF-8.

Misal

LibreOffice'e bazı çıktılar yapıştırdım. Metnimde belirgin yazım hataları var, ancak LibreOffice bunları algılayamıyor. Kelimelerin altına kırmızı dalgalı çizgiler çizmez ve yazım denetimi düğmesi yalnızca "Yazım denetimi tamamlandı" bildirir.

LibreOffice

Metin, "𝖭𝗈𝗐𝗐 𝗂𝗓 𝗍𝖾𝗁 𝗍𝗍𝗂𝗆𝖾 𝖿𝗈𝗈𝗋 𝖺𝗁𝗅 𝗀𝗎𝖽 𝗇𝖾𝗆 𝗍𝗍𝗈 𝖼𝗈𝖾𝗆 𝗍𝖾𝗁 𝖺𝖾𝖽 𝗈𝗏 𝗍𝖾𝗋𝖾". " Firefox ayrıca bu metinde hiçbir yazım hatası bulamaz.


5

Dyalog APL , 7 karakter

∊''∘,¨

Tırnaklar arasında bir U + FEFF ( Sıfır Genişlik Aralıksız Boşluk , yani Unicode BOM ) vardır. Bu karakter Calibri yazı tipinde oluşur. Karakter '', argümandaki her karaktere eklenir ve daha sonra her şey düzleştirilir .,¨

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.