输入速度测试加载了一个单词字典,并给出了一个要输入的词:pinball。你,用你快速但不准确的手指,输入pinbnal。该死的!
编写一个程序,从字典中打印出一个随机单词,然后要求用户输入这个单词,最后返回这个单词是否正确。问题是:程序必须接受小排版。
如果一个错误只有以下之一,则接受它:
pinball一词的一些可接受的排版如下:
pingball pinbala pinbanll
一些不可接受的排版:
pibnannl maxwell pinbalgl
最短代码获胜。祝好运。
发布于 2012-12-17 02:44:16
编辑:正如Primo正确地指出的那样,以下内容并不遵守只允许那些来自QWERTY邻居的入侵的约束。当然,DL距离与键盘上的距离无关。哦,好吧。我会留下我的回应,如果有人有更多的耐心,很容易会更好。
代码
d = DictionaryLookup[]; i = d[[RandomInteger@{1, Length@d}]];o = InputString["Type: " <> i];
Print["in: ", i, "\nout: ", o, "\n", Switch[i~DamerauLevenshteinDistance~o, 0, "perfect",
1, "ok", _, "wrong"]]解释
d = DictionaryLookup[]在d中存储了一个包含92000个英语单词的内置词典。i = d[[RandomInteger@{1, Length@d}]]选择一个随机单词并将其存储在i中。o = InputString["Type: " <> i];用提示符“Type我”打开一个对话框窗口(见图)。i~DamerauLevenshteinDistance~o计算请求的单词和用户键入的单词之间的Damerau-Levenshtein距离。如果DL距离= 0,则为“完美”;如果DL距离= 1,则为"ok";否则为“错误”。
测试结果
在前7个测试中,输入字符串i被手动设置为"pinball“。除"pinbalgl“外,结果是理想的,这被认为是可以接受的,因为它返回DL距离值1。
in: pinball out: pingball out: pingball ok in: out: pinbala ok in: pinball out: pinbanll ok in: pinball out: pinbannl错位: pinball out: maxwell错误in: pinbalgl ok in: tureen out: turen ok in: feedr out:错位
https://codegolf.stackexchange.com/questions/6540
复制相似问题