混淆单词拼写检查器!


12

您的任务是制作一个使用Calibri字体输入任意长度的单词的程序。该单词将由普通QWERTY键盘上的字母字符组成。不会有重音符号或其他任何字符(例如标点符号,数字等)。

因此,原始字符为:

ABCDEFGHIJKLMNOPQRSTU VWXYZ

然后该程序将对其进行加扰以更改字符,以使它们看起来相似或完全相同,这可能会通过标记它来使拼写检查器混乱,但由于它看起来与普通单词相同,但字符不变,这会使我感到困惑。

例如,Unicode字符U+0430西里尔小写字母a(“а”)看起来与Unicode字符U+0061拉丁小写字母a(“ a”)相同,后者是英文中的小写字母“ a”。

另一个示例是俄语字母а,с,е,о,р,х和у在基本拉丁字母中具有光学对应项,并且看起来与a,c,e,o,p,x和y接近或相同。

规则:

  1. 该程序必须找出相似的字符。这意味着它们不能以任何形式存储。这意味着Unicode值或字符本身。
  2. 这是代码高尔夫-最短的答案胜出!
  3. 您还必须发布非高尔夫球版本,以免在打高尔夫球时无法检测到作弊!
  4. 您也可以使用任何函数或程序来执行此操作,只要单词也没有存储在此处即可。
  5. 您必须使用UTF-8。禁止其他输入和输出。这样一来,我实际上就可以阅读您正在输出的内容以及我输入的内容,因此我不会有随机的正方形,问号和“点点滴滴”!
  6. 它必须使用我输入的任何单词。

一个有效的示例(将其复制并粘贴到单词中,并在其后插入一个空格,它应标记第二个而不是第一个)。

Halim 
Hаlim  

一些有用的信息在这里

祝好运!开始


1
我认为这是编写代码高尔夫而不是普及竞赛的最佳人选。
ProgrammerDan

@ProgrammerDan作为代码高尔夫球的问题是,必须替换多少个字符以及允许它们查找有效答案的相异程度如何?
Martin Ender 2014年

1
无论哪种情况,“混淆拼写检查器”的定义都是不错的。哪个拼写检查器?另外,我们的输入字母是什么?输出字母?我建议您指定一种流行的在线拼写检查工具,并指定一种编码,例如UTF-8。
Rainbolt 2014年

我已经采取了你的意见对董事会和改变了一些东西-感谢您的意见:)
乔治

如果我几天前问过这,那将是愚人节的恶作剧!
乔治,

Answers:


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通过一个特定示例展示了用法。
Martin Ender

1
哦,对不起,我以前从未使用过JSFiddle!现在它真的很困惑-它认为George是单词Egret和其他东西!
乔治,

5
嗯...我随机挑选了一些话,以测试你的功能,但它不能做的工作......我挑的话levelrotorracecarreferkayak
user12205 2014年

1
@aceTouché。:P
Martin Ender

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 2014年

如果您在IDLE使用它,你可以删除print()-它会继续打印出来
chill0r

您可以通过将十六进制数FEE0更改为十进制数(65248)来保存一个字节。
0WJYxW9FMN

8

常见的Lisp,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无法检测到它们。它在字词下方没有绘制红色花键,并且拼写检查按钮仅报告“拼写检查已完成”。

图书馆

文本为“𝖭𝗈𝗐𝗐”。Firefox在此文本中也没有发现拼写错误。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.