介绍
最近,我已经习惯于使用Swype打字。
我注意到可以通过从起始字母到结束字母画一条直线,或者跳过重复的字母来产生某些单词。
例如,我可以balloon通过扫过以下字母来输入单词:
b> a> l> o> n。
挑战
让我们将“ 最短Swype路径”(或)定义SSP为键入字符串所需的最小可区分线段数。线段是任意两个或多个字母之间的连续直线。方向的任何变化都会开始一个新的线段-尽管某些单词可能仅通过绘制一条直线而被Swyped。
使用以下简单的QWERTY键盘布局:
q w e r t y u i o p
a s d f g h j k l
z x c v b n m
在上面的示例中,单词balloon将具有SSP,4如以下序列中所述:
1) Start at `b` (line segments = 0)
2) slide to `a` (line segments = 1)
3) slide to `l` (line segments = 2)
4) slide to `o` (line segments = 3)
5) slide to `n` (line segments = 4)
字符串qwerty具有SSP= 1,因为切换该单词时不需要改变方向。
输入值
单个字符串,包含a-z通过STDIN,函数参数或命令行中的任何一个。
输出量
通过STDOUT打印,返回或使用您的语言最接近的替代品打印,该数字n表示字符串的SSP。
outut中有一个尾随换行符可选。不允许出现标准漏洞。以字节为单位的最短提交获胜。
笔记
- 方向改变会开始一个新的线段。
- 重复的字母仅计数一次(例如:
bookkeeper应视为bokeper)。 - 通常,Swpye通过查看相邻字母并填充其最佳猜测来纠正丢失的字母。对于此挑战,假设没有自然语言增强,预测性文本或错误纠正。
- 大写
A-Z输入被视为小写输入。 - 忽略
0-9输入中的任何数字。 - 对角线路径允许-即,直线覆盖字母
o,k,n,例如,计为1段。此规则适用于任何斜纹(例如:字母c,h,i都行)。
例子
Input Output
---------------------
a 0
aa 0
aaaaaa 0
aaaaaabc 2
in 1
int 2
java 3
qwerty 1
chicago 5
balloon 4
BALLOON 4
typewriter 5
bookkeeper 6
stackexchange 11
2hello7 3
2HELLO7 3
h在从c到i的直线上,但是c和o之间没有字母?
—
Sparr
如果提交的内容还必须支持大写字母,我建议在测试用例中包括一些字母。
—
丹尼斯
@Sparr正确。
—
CzarMatt 2015年
@Dennis好话-添加了测试用例。
—
CzarMatt 2015年
我确实喜欢用Swype打字,但是我不知道为线路编程...
—
mbomb007 2015年