Pomyl sprawdzanie pisowni w programie Word!

12

Twoim zadaniem jest stworzenie programu, który pobierze słowo o dowolnej długości, czcionką Calibri. To słowo będzie składało się ze znaków literowych znalezionych na normalnej klawiaturze QWERTY. Nie będzie żadnych akcentów ani żadnych innych znaków (tj. Interpunkcja, cyfry itp.).

Tak więc oryginalne postacie to:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

Następnie program szyfruje go, aby zmienić znaki, aby wyglądały podobnie lub dokładnie tak samo, co prawdopodobnie pomyliłoby moduł sprawdzania pisowni, oznaczając je, ale pomyliłoby mnie, ponieważ wygląda tak samo jak normalne słowo, z niezmienionym znakiem.

Przykładem tego jest znak Unicode U+0430, cyrylica mała litera a („а”), może wyglądać identycznie jak znak Unicode U+0061, łacińska mała litera a, („a”), która jest małą literą „a” używaną w języku angielskim.

Innym przykładem są rosyjskie litery а, с, е, о, р, х i у mają optyczne odpowiedniki w podstawowym alfabecie łacińskim i wyglądają blisko lub identycznie jak a, c, e, o, p, x i y.

Zasady:

  1. Program musi wypracować podobne postacie. Oznacza to, że nie można ich przechowywać w żadnej formie . Oznacza to, że wartość Unicode lub sam znak.
  2. To jest golf golfowy - wygrywa najkrótsza odpowiedź!
  3. Musisz także opublikować wersję bez golfa, aby uniknąć oszustwa, którego nie można wykryć podczas gry w golfa!
  4. Możesz to zrobić za pomocą dowolnej funkcji lub programu, o ile nie zostaną tam zapisane słowa.
  5. Musisz użyć UTF-8. Inne wejścia i wyjścia są zakazane. Dzieje się tak, że właściwie jestem w stanie odczytać to, co wyprowadzasz i co wprowadzam, więc nie mam losowej masy kwadratów, znaków zapytania i innych terminów interpunkcyjnych!
  6. Musi działać z każdym wprowadzonym słowem.

Działający przykład (Skopiuj i wklej to do słowa i wstaw spację po nim, powinien oflagować drugi, a nie pierwszy).

Halim 
Hаlim  

Kilka przydatnych informacji jest tutaj

Powodzenia! Zaczynać

Jerzy
źródło
1
Myślę, że to świetny kandydat do gry w golfa zamiast w konkurs popularności .
ProgrammerDan
@ProgrammerCzy pytanie brzmi tak, jak w przypadku gry w golfa kodowego, ile znaków należy wymienić i jak różne mogą szukać odpowiedzi, aby była ważna?
Martin Ender
1
W obu przypadkach fajna byłaby definicja „mylić moduł sprawdzania pisowni”. Który moduł sprawdzania pisowni? Jaki jest nasz alfabet wejściowy? Wyjściowy alfabet? Zalecam określenie popularnego internetowego narzędzia do sprawdzania pisowni oraz kodowania, takiego jak UTF-8.
Rainbolt
Wziąłem wasze komentarze na pokład i zmieniłem kilka rzeczy - dzięki za radę :)
George
Byłby to świetny dowcip prima aprilis, gdybym zapytał o to kilka dni temu!
George

Odpowiedzi:

12

JavaScript, 71 znaków

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

Wypróbuj to na JSFiddle.

Nawiasem mówiąc, byłoby to o wiele krótsze w CoffeeScript ( 53 znaki )

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

EDYCJA: Właśnie zauważyłem, że wymóg UTF-8. W JavaScript będzie to trudne. : - /

Martin Ender
źródło
Nie krytykuj tej odpowiedzi - jest dobra, ale została opublikowana zanim zasady uległy nieznacznej zmianie. Musisz także wpisać słowo, które nie może zostać zapisane na stałe. Przepraszamy.
George
@GeorgeH dobrze, funkcja przyjmuje dowolny dowolny tekst (nie tylko pojedyncze słowa). To tylko JSFiddle, który pokazuje użycie z jednym konkretnym przykładem.
Martin Ender
1
Och, przepraszam, nigdy wcześniej nie korzystałem z JSFiddle! To naprawdę zmieszane Słowo teraz - Myśli, że Georgejest Egreti inne rzeczy!
George
5
Hmm ... ja losowo kilka słów, aby sprawdzić swoją funkcję, ale to nie działa ... Słowa wybrałem były level, rotor, racecar, referi kayak.
user12205
1
@ace Touché. : P
Martin Ender
9

Python3 - 51

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

Leniwy sposób!

Nieco golfa

r=''
for c in input():
    r += chr(ord(c) - 0x20 + 0xFF00) # convert to fullwidth ASCII range
print(r)
LemonBoy
źródło
Czy możesz opublikować wersję bez golfa? Dzięki!
George
Zrobione, powinno się to wyjaśniać :)
LemonBoy
Jeśli używasz go w IDLE, możesz usunąć print()- i tak go wydrukuje
chill0r
Możesz zapisać jeden bajt, zmieniając liczbę szesnastkową FEE0 na liczbę dziesiętną (65248).
0WJYxW9FMN
8

Common Lisp, 142

Nie mam czcionki o nazwie Calibri i większość moich czcionek nie ma tych symboli, ale DejaVu Sans je ma. Zamieniam litery na matematyczne symbole alfanumeryczne . Moduł sprawdzania pisowni nie oznacza żadnych błędów. Zamiast tego nie wykrywa błędów, nawet jeśli słowa zawierają oczywiste literówki.

Gra w golfa:

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

Nie golfowany:

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

Stosowanie

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

Zakładam, że twój interpreter Lisp ma obsługę Unicode, a twoje ustawienia regionalne to UTF-8. Nie używaj abcl, ponieważ ma problemy poza Podstawową płaszczyzną wielojęzyczną.

Klony uniksowe: Możesz uruchomić localew terminalu. Jeśli wiersz LC_CTYPE nie wspomina o UTF-8, spróbuj export LC_CTYPE=en_US.UTF-8.

Przykład

Wkleiłem trochę danych wyjściowych do LibreOffice. Mój tekst zawiera oczywiste błędy ortograficzne, ale LibreOffice nie wykrywa ich. Pod słowami nie rysuje się czerwonych zawirowań, a przycisk sprawdzania pisowni informuje tylko: „Sprawdzanie pisowni jest zakończone”.

LibreOffice

Tekst brzmi: „𝖭𝗈𝗐𝗐 𝗂𝗓 𝗍𝖾𝗁 𝗍𝗍𝗂𝗆𝖾 𝖿𝗈𝗈𝗋 𝖺𝗁𝗅 𝗀𝗎𝖽 𝗇𝖾𝗆 𝗍𝗍𝗈 𝖼𝗈𝖾𝗆 𝗍𝗍𝗈 𝗍𝖾𝗁 𝖺𝖾𝖽 𝗈𝗏 𝗍𝖾𝗋𝖾 𝖼𝗈𝗎𝗇𝗍𝗋𝖾𝖾.” Firefox również nie znajduje błędów pisowni w tym tekście.

kernigh
źródło
5

Dyalog APL , 7 znaków

∊''∘,¨

Pomiędzy cytatami znajduje się U + FEFF ( zerowa szerokość bez przerw , inaczej BOM Unicode ). Ten znak występuje w czcionce Calibri. Znak ''jest dodawany ,do każdego ¨znaku w argumencie, a następnie całość jest spłaszczana .

Adám
źródło