Запутать проверку орфографии Word!

12

Ваша задача - создать программу, которая будет вводить слово любой длины шрифтом Calibri. Это слово будет состоять из буквенных символов, которые находятся на обычной клавиатуре QWERTY. Там не будет акцентов или каких-либо других символов (например, знаки препинания, цифры и т. Д.).

Итак, оригинальные персонажи:

АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЭЮЯ

Затем программа закодирует его, чтобы изменить символы таким образом, чтобы они выглядели одинаково или точно так же, что, вероятно, могло бы спутать средство проверки орфографии, пометив его, но это смутило бы меня, так как оно выглядит так же, как обычное слово, с неизменным символом.

Примером этого является символ Unicode U+0430, кириллическая буква a («а»), может выглядеть идентично символу UnicodeU+0061 строчная , латинской строчной букве a, («a»), которая является строчной буквой «a», используемой в английском языке.

Другой пример - русские буквы а, с, е, о, р, х и у имеют оптические аналоги в основном латинском алфавите и выглядят близко или идентичны а, с, е, о, р, х и у.

Правила:

  1. В программе должны отрабатываться похожие персонажи. Это означает, что они не могут быть сохранены в любой форме . Это означает, что значение Unicode или сам символ.
  2. Это код гольф - самый короткий ответ выигрывает!
  3. Вы должны также опубликовать версию без игры в гольф, чтобы избежать мошенничества, которое невозможно обнаружить при игре в гольф!
  4. Для этого вы можете использовать любую функцию или программу, если слова там тоже не хранятся.
  5. Вы должны использовать UTF-8. Другие входы и выходы запрещены. Это сделано для того, чтобы я действительно мог читать то, что вы выводите, и то, что я ввожу, поэтому у меня нет случайной массы квадратов, вопросительных знаков и других случайных знаков!
  6. Это должно работать с любым словом, которое я ввожу.

Рабочий пример (скопируйте и вставьте это в слово и вставьте после него пробел, он должен помечать второй, а не первый.)

Halim 
Hаlim  

Некоторая полезная информация здесь

Удачи! Начать

Джордж
источник
1
Я думаю, что это отличный кандидат на Code-Golf вместо конкурса на популярность .
ProgrammerDan
@ProgrammerD, вопрос с этим как code-golf состоит в том, сколько символов нужно заменить и насколько они различаются, чтобы найти ответ, который будет действительным?
Мартин Эндер
1
В любом случае определение «запутать проверку орфографии» было бы неплохо. Какая проверка орфографии? Кроме того, каков наш входной алфавит? Выходной алфавит? Я рекомендую вам указать популярный онлайн-инструмент для проверки орфографии и указать кодировку, например UTF-8.
Rainbolt
Я взял свои комментарии на борту и изменил несколько вещей - спасибо за совет :)
Джордж
Это была бы отличная шутка Первоапрельского дурака, если бы я спросил об этом несколько дней назад!
Джордж

Ответы:

12

JavaScript, 71 символ

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

Попробуйте это на JSFiddle.

Кстати, это было бы немного короче в CoffeeScript ( 53 символа )

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

РЕДАКТИРОВАТЬ: Я только что заметил, что требование UTF-8. Это будет сложно в JavaScript. : - /

Мартин Эндер
источник
Не отрицайте этот ответ - он хороший, но он был опубликован до того, как правила немного изменились. Вы также должны ввести слово, и оно не может быть жестко запрограммировано. Извините.
Джордж
@ GeorgeH ну, функция принимает любой произвольный текст (не только отдельные слова). Это просто JSFiddle, который демонстрирует использование на одном конкретном примере.
Мартин Эндер
1
О, извините, я никогда не использовал JSFiddle раньше! Его действительно запутанное Слово сейчас - Он думает George, Egretи другие вещи!
Джордж
5
Хм ... Я случайно выбрал несколько слов , чтобы проверить свои функции , но это не работает ... Слова я взял были level, rotor, racecar, referи kayak.
user12205
1
@ace Touché. : P
Мартин Эндер
9

Python3 - 51

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

Ленивый путь!

Слегка разгульный

r=''
for c in input():
    r += chr(ord(c) - 0x20 + 0xFF00) # convert to fullwidth ASCII range
print(r)
LemonBoy
источник
Пожалуйста, вы можете опубликовать версию без гольфа? Благодарность!
Джордж
Готово, это само собой
понятно
Если вы используете его в режиме IDLE, вы можете удалить print()- он все равно распечатает
chill0r
Вы можете сохранить один байт, изменив шестнадцатеричное число FEE0 на десятичное число (65248).
0WJYxW9FMN
8

Common Lisp, 142

У меня нет шрифта с именем Calibri, и у большинства моих шрифтов нет этих символов, но у DejaVu Sans они есть. Я заменяю буквы математическими буквенно-цифровыми символами . Проверка орфографии не помечает ошибки. Вместо этого он не может обнаружить ошибки, даже если слова имеют очевидные опечатки.

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

использование

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

Я предполагаю, что ваш интерпретатор Lisp поддерживает Unicode, а ваш язык UTF-8. Не используйте abcl, потому что у него есть проблемы за пределами базовой многоязычной плоскости.

Unix клоны: вы можете запустить localeв терминале. Если строка для LC_CTYPE не упоминает UTF-8, попробуйте export LC_CTYPE=en_US.UTF-8.

пример

Я вставил некоторый вывод в LibreOffice. В моем тексте есть очевидные орфографические ошибки, но LibreOffice не может их обнаружить. Под словами не рисуются красные загогулины, а кнопка проверки орфографии только сообщает: «Проверка орфографии завершена».

LibreOffice

Текст: «𝖭𝗈𝗐𝗐 ​​𝗂𝗓 𝗍𝖾𝗁 𝗍𝗍𝗂𝗆𝖾 𝖿𝗈𝗈𝗋 𝖺𝗁𝗅 𝗀𝗎𝖽 𝗇𝖾𝗆 𝗍𝗍𝗈 𝖼𝗈𝖾𝗆 𝗍𝗍𝗈 𝗍𝖾𝗁 𝖺𝖾𝖽 𝗈𝗏 𝗍𝖾𝗋𝖾" ». Firefox также не находит орфографические ошибки в этом тексте.

kernigh
источник