linux下带的好玩小巧的东东就是多啊!本猫又找到一个spell程序,如果单词是可拼写的则神马也不输出,否则输出疑似拼错的单词.可以把若干单词放在文件中,也可以用管道输入spell.为了简便本猫采用了后一种方法,可能会慢一点啊!稍后会实现前一种方法,看看效率提高了多少.

首先是随机生成单词的方法:

def rand_words(n=10000,min_len=2,max_len=12)chars = (("a".."z").to_a * max_len).freezewords = []srandn.times do |x|len = min_len + (rand*1000).to_i % max_lenidxes = []len.times {idxes<<(rand*100)%26}chars.shufflewords << chars.values_at(*idxes).joinidxes.clearend words
end

考虑到同一个字母在单词中可以出现多次,符合实际点的做法是将字母表重复max_len次,极端情况下max_len个字母都可以是相同的.然后再写下判断单词是否可拼写的方法:

#ret word that can spell or ret nil
def spell_word(word)cmd = `echo #{word}|spell`.chompif cmd == wordreturn nilelsereturn wordend
end

最后用参数的方式调用试一下:

rand_words(ARGV[0].to_i,ARGV[1].to_i,ARGV[2].to_i).each do |w|printf w+" " if spell_word(w)end

上测试代码:

wisy@wisy-ThinkPad-X61:~/src/ruby_src$ time ./a.rb 2000 3 12
usage : a.rb [-all|-all2] words_count min_len max_len
eta war raw chum lab err woe coil pee swum yap sap mud who sin
real    0m22.770s
user    0m3.350s
sys 0m7.216s

速度貌似不甚理想啊,2000个单词用了22秒多!下面用传递文件给spell的方法看看速度如何,遂写一个spell_words方法:

#spell all words by tmpfile
def spell_words(words)puts "using spell_words..."f = Tempfile.new("#{$$}_spell_blablabla")#f = File.open("spell_test","w+")#f.write Marshal.dump(words)f.write words.join(" ")f.closecmd = `spell #{f.path}`no_spell_words = cmd.split("\n")words - no_spell_words
end

修改参数调用方式:

if ARGV[0] =~ /^-all$/puts spell_words(rand_words(ARGV[1].to_i,ARGV[2].to_i,ARGV[3].to_i)).join(" ")
elserand_words(ARGV[0].to_i,ARGV[1].to_i,ARGV[2].to_i).each do |w|printf w+" " if spell_word(w)end
end

看一下速度有没有提升啊:

wisy@wisy-ThinkPad-X61:~/src/ruby_src$ time ./a.rb -all 2000 3 12
usage : a.rb [-all|-all2] words_count min_len max_len
using spell_words...
work bah air hop pus etc bobreal    0m3.945s
user    0m0.163s
sys 0m0.050s

效率有变快,只用了不到4秒啊!最后如果spell直接将结果写入文件,然后再读出的方式会不会更快呢?再写一个spell_words2方法吧

#spell all words by tmpfile and spell ret is also use tmpfile
def spell_words2(words)puts "using spell_words2..."f_words = Tempfile.new("#{$$}_spell_words")f_ret = Tempfile.new("#{$$}_spell_ret")f_ret.closef_words.write words.join(" ")f_words.closecmd = `spell #{f_words.path} > #{f_ret.path}`f=File.open(f_ret.path)no_spell_words = f.read.split("\n")f.closewords - no_spell_words
end

最终修改后的源代码如下:

#!/usr/bin/ruby
#code by hopy 2014.12.08
#random create some words and check if a valid word!require 'tempfile'def rand_words(n=10000,min_len=2,max_len=12)chars = (("a".."z").to_a * max_len).freezewords = []srandn.times do |x|len = min_len + (rand*1000).to_i % max_lenidxes = []len.times {idxes<<(rand*100)%26}chars.shufflewords << chars.values_at(*idxes).joinidxes.clearend words
end#ret word that can spell or ret nil
def spell_word(word)cmd = `echo #{word}|spell`.chompif cmd == wordreturn nilelsereturn wordend
end#spell all words by tmpfile
def spell_words(words)puts "using spell_words..."f = Tempfile.new("#{$$}_spell_blablabla")#f = File.open("spell_test","w+")#f.write Marshal.dump(words)f.write words.join(" ")f.closecmd = `spell #{f.path}`no_spell_words = cmd.split("\n")words - no_spell_words
end#spell all words by tmpfile and spell ret is also use tmpfile
def spell_words2(words)puts "using spell_words2..."f_words = Tempfile.new("#{$$}_spell_words")f_ret = Tempfile.new("#{$$}_spell_ret")f_ret.closef_words.write words.join(" ")f_words.closecmd = `spell #{f_words.path} > #{f_ret.path}`f=File.open(f_ret.path)no_spell_words = f.read.split("\n")f.closewords - no_spell_words
endputs "usage : #{$0[2..-1]} [-all|-all2] words_count min_len max_len"if ARGV[0] =~ /^-all$/puts spell_words(rand_words(ARGV[1].to_i,ARGV[2].to_i,ARGV[3].to_i)).join(" ")
elsif ARGV[0] =~ /^-all2$/puts spell_words2(rand_words(ARGV[1].to_i,ARGV[2].to_i,ARGV[3].to_i)).join(" ")
elserand_words(ARGV[0].to_i,ARGV[1].to_i,ARGV[2].to_i).each do |w|printf w+" " if spell_word(w)end
end

测试如下:

wisy@wisy-ThinkPad-X61:~/src/ruby_src$ time ./a.rb -all2 2000 3 12
usage : a.rb [-all|-all2] words_count min_len max_len
using spell_words2...
pus tty sis aft cutreal 0m4.443s
user    0m0.163s
sys 0m0.050s

貌似spell_words2的方法比spell_words还要略慢啊!?2种方法基本效率差不多啊!一种功能却写了3种实现方法,本猫是不是闲的蛋疼呢?也不尽然,只能说多一种尝试,多一种可能吧!

随机产生单词然后判别其是否是真正的(可拼写的)单词:)相关推荐

  1. 用集合java字符串第一个单词_Java小程序 输入一个字符串,将每一个单词首字母大写...

    Java 小程序 01 输入一个字符串,将每一个单词首字母大写 1.首先写一个接收传入的单词,并将传入单词首字母大写.这一步比较简单,没什么好说的! private String titleCase ...

  2. 深信服:输入一个字符串,帮忙统计字符串里面的每个单词出现的次数,以及非法单词的次数。非法单词的定义为:包含数字(0-9)的单词

    深信服2018秋招笔试题: 输入一个字符串,帮忙统计字符串里面的每个单词出现的次数,以及非法单词的次数.非法单词的定义为:包含数字(0-9)的单词 输入一个字符串,长度小于1000,输入的字符仅包含( ...

  3. 每天一道LeetCode-----将单词数组分成多行,每行长度相同,单词之间用空格分隔,要求空格尽量均匀分布

    Text Justification 原题链接Text Justification 将以这个字符串数组重组成几行,每个字符串用空格分隔,要求 每行的长度相同 每行的空格需要均匀分配,且每个单词之间至少 ...

  4. 编写程序计算 sentence 中有多少个单词,并指出其中最长和最短的单词。如果有多个最长或最短的单词,则将它们全部输出。

    /*已知有如下 string 对象:  9.39:  string line1 = "We were her pride of 10 she  named us:";   stri ...

  5. 推荐背单词最有效的方法:使用艾宾浩斯记忆曲线背单词

    推荐背单词最有效的方法:使用艾宾浩斯记忆曲线背单词! 1.英语学习的根本难点在哪里? 答:是遗忘.记忆过程往往是建立在重复基础上,由"记忆-遗忘-再记忆"组成.以单词学习为例,通常 ...

  6. javascript英语单词音节拆分_英语启蒙:自然拼读之单词合成与分割

    这是软实力英语的第542篇原创文章. 培养孩子的语音意识,是培养阅读能力的重要组成部分.研究表明,语音意识差的孩子阅读能力也较差. 具体来说,就是自然拼读(phonics)的过程,包括:1. 字母及字 ...

  7. 程序员面试金典——解题总结: 9.18高难度题 18.5有个内含单词的超大文本文件,给定任意两个单词,找出在这个文件中这两个单词的最短距离

    #include <iostream> #include <stdio.h> #include <vector> #include <string> # ...

  8. 复试编程训练真题——C语言,统计各单词(字符)出现的次数,并将各单词(字符)和其出现的次数输出到屏幕和文件中

    119.已有文本文件test.txt,其中的内容为hello,how are you.Welcome you to China!编写一个程序,读取test.txt,统计各单词出现的次数,并将各单词和其 ...

  9. 【python】取txt文件中的单词存到SQLite数据库,并且从bing词典爬取单词详情

    自己做一个单词词典,打算从bing词典爬单词. 单词怎么来? 取一些英文文本的txt文件,写一个py文件取txt中的单词存到SQLite数据库中. py文件的功能是: 选择出txt文本中的所有单词,正 ...

最新文章

  1. 使用Silverlight4无边窗口
  2. Hdu 4738 Caocao's Bridges (连通图+桥)
  3. win10装sql2000卡在选择配置_恢复win10系统安装SQL2000卡在MADC不动的妙计
  4. java中的双与_java 双冒号是什么操作符?
  5. python整数逆序输出_利用Python实现倒序任意整数
  6. React开发(267):ant design upload简单上传
  7. 2021母婴行业洞察报告.pdf(附下载链接)
  8. Hexo NexT主题添加点击爱心效果
  9. 机器学习模型可解释性进行到底 ——PDPICE图(三)
  10. System x 服务器制作ServerGuide U盘安装Windows Server 2003 操作系统
  11. 黑苹果 中文四叶草下载
  12. 计算机网络——Cisco Packet Tracer 实验
  13. 【期末大作业】简单的学生网页作业源码 基于html css javascript南京大学网页校园教育网站html模板(3页)
  14. php Guzzle源码,php中的curl类 guzzle 的使用
  15. 前端工作第一天,准备事项,配置环境
  16. 连连支付提现人民币的时候汇率是怎么样的?
  17. 笑抽了~~关于程序员的爆笑gif图片
  18. Test multipath feature by openstack lioadm (by quqi99)
  19. 【视频架构day1】美拍短视频系统架构:1亿流量的应对之道
  20. wince调节屏幕亮度

热门文章

  1. 免费WiFi软件,你还太单纯
  2. 集合Set边遍历边删除
  3. 解决wine中文变成方块
  4. PS2023神经元滤镜离线安装教程,解决PS神经滤镜灰色不可用!
  5. 反应谱 matlab,冲击响应谱计算的matlab程序.doc
  6. tcp/ip网络里的客户端和服务器端 信息交流 与 安全
  7. 索引(B+树)、B+树一个节点有多大?(一千万条数据,B+树多高?)
  8. import php 返回flas,从php发布到Flas
  9. 2022-2028全球激光印刷电路板钻孔机器行业调研及趋势分析报告
  10. 新车可以无牌上路7天_男子刚买新车太兴奋 临牌没申请就上路被扣12分