[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Fwd: Pre-spoiler period solution for RubyQuiz #133

James Gray

8/5/2007 10:08:00 PM

Begin forwarded message:

> From: "Rick DeNatale" <rick.denatale@gmail.com>
> Date: August 3, 2007 3:47:48 PM CDT
> To: submission@rubyquiz.com
> Subject: Pre-spoiler period solution for RubyQuiz #133
>
> This was a particularly easy quiz, adding the options parsing took
> longer than actually solving the problem.
>
> #! /usr/bin/ruby
>
> # defaults
> base = 16
> min = 3
> wl_file = "/usr/share/dict/words"
> capitals = false
>
> require 'optparse'
>
> opts = OptionParser.new
> opts.on(
> "-b=integer",
> "--base=integer",
> "number base, must be between 10 and 36, default is 16",
> Integer
> ) {|val| base = val.to_i}
>
> opts.on(
> "-w=filename",
> "--word-list=filename",
> "filename of word list file, default is /usr/share/dict/words",
> String
> ) {|val| wl_file = val}
> opts.on("--min=integer", "minimum length word to be considered,
> default is 3", Integer) {|val| min = val}
> opts.on(
> "-C",
> "--allow-capitals",
> "words containing capital letters are normally not considered, this
> option overrides that"
> ) {|val| capitals = true}
>
> rest = opts.parse(*ARGV)
>
> errors = []
> errors << "Unknown option#{rest.size > 1 ? "s" : ""} #{rest.join(',
> ')}" unless rest.empty?
> errors << "Base must be between 10, and 36" unless (10..36).include?
> (base)
> errors << "Minimum value of #{min} is unacceptable" unless min >= 1
> min = min.to_i
> errors << "Word list #{wl_file} not found" unless File.exist?(wl_file)
>
> if errors.empty?
> # The real work gets done here.
> # For any given base, where 10 <= base <= 36, there will be 11-base
> letter 'digits'
> # starting with 'a'
> pat = capitals ?
> /^[#{"a-#{'abcdefghijklmnopqrstuvwxyz'[(base-11)].chr}"}]{#{min},}$/oi
> :
>
> /^[#{"a-#{'abcdefghijklmnopqrstuvwxyz'[(base-11)].chr}"}]{#{min},}$/o
> File.open(wl_file) do |f|
> f.each do |word|
> puts word if word =~ pat
> end
> end
> else
> print errors
> puts
> puts opts.to_s
> end
>
>
> --
> Rick DeNatale
>
> My blog on Ruby
> http://talklikeaduck.denh...