Переплутайте перевірку орфографії Word!


12

Ваше завдання - зробити програму, яка буде приймати слово будь-якої довжини, шрифтом Calibri. Це слово буде складено з літерних символів, які знаходяться на звичайній клавіатурі QWERTY. Не буде наголосів чи будь-яких інших символів (наприклад, розділових знаків, цифр тощо).

Отже, оригінальними символами є:

а Б В Г Г Д Е Є Ж З И І Ї Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ ью я

Програма потім зашифрує його, щоб змінити символи, щоб вони виглядали схожими або абсолютно однаковими, що, ймовірно, заплутало б перевірку орфографії, позначивши її, але це збентежить мене, оскільки воно виглядає так само, як звичайне слово, із незмінним символом.

Прикладом цього є символ Unicode U+0430, кирилиця з малої літери a ("а"), може виглядати ідентично символу Unicode U+0061, латинською малою буквою a, ("a"), що є маленькою літерою "a", що використовується англійською мовою.

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

Правила:

  1. Програма повинна відпрацювати подібні персонажі. Це означає, що вони не можуть зберігатися в будь-якій формі . Це означає, що значення Unicode або сам символ.
  2. Це кодовий гольф - найкоротша відповідь виграє!
  3. Ви також повинні опублікувати версію, яка не перебуває в гольфі, щоб уникнути обману, який не можна буде виявити, коли його гольф!
  4. Для цього можна використовувати будь-яку функцію чи програму, доки слова також не зберігаються.
  5. Ви повинні використовувати UTF-8. Інші входи та виходи заборонені. Це так, що я насправді в змозі прочитати, що ви виводите, і що я ввожу, тому у мене немає випадкової маси квадратів, знаків запитань та іншого пунктуанти❮ rand❮m!
  6. Він повинен працювати з будь-яким словом, яке я ввожу.

Робочий приклад (Скопіюйте та вставте це у слово та вставте пробіл після, він повинен позначити другий, а не перший.)

Halim 
Hаlim  

Тут є корисна інформація

Щасти! Почніть


1
Я думаю, що це чудовий кандидат на код-гольф замість конкуренції за популярність .
ПрограмістDan

@ProgrammerЗадайте питання з цим кодом-гольфом, скільки символів потрібно замінити і наскільки різними вони можуть шукати відповідь, щоб бути дійсною?
Мартін Ендер

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"

EDIT: Я щойно помітив цю вимогу UTF-8. Це буде важко в JavaScript. : - /


Не відповідайте на цю відповідь - вона хороша, але вона була розміщена до того, як правила трохи змінилися. Ви також повинні ввести слово, і воно не може бути просто кодованим. Вибачте.
Джордж

@GeorgeH добре функція приймає будь-який довільний текст (не лише окремі слова). Просто JSFiddle демонструє використання з одним конкретним прикладом.
Мартін Ендер

1
О, вибачте, я ніколи раніше не використовував JSFiddle! Його дійсно плутане слово зараз - Він думає, що Georgeце Egretта інше!
Джордж

5
Хм ... Я випадково вибрав кілька слів , щоб перевірити свої функції , але це не працює ... Слова я взяв були level, rotor, racecar, referі kayak.
користувач12205

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)

Будь ласка, можете опублікувати версію, що не має волі? Дякую!
Джордж

Готово, слід
самопояснити

Якщо ви використовуєте його в IDLE, ви можете видалити print()- він все одно роздрукує
chill0r

Ви можете зберегти один байт, змінивши шістнадцяткове число FEE0 на десяткове число (65248).
0WJYxW9FMN

8

Загальний Лісп, 142

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

Гольф:

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

Безголівки:

(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 також не знаходить орфографічних помилок у цьому тексті.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.