http://shootout.alioth.debian.org/
If you have a few moments please contribute stylish Ruby programs.
best wishes, Isaac
Here's a shorter and, I think, slightly faster program to count
word-frequencies.
freq = Hash.new(0)
loop {
data = (STDIN.read(4095) or break) + (STDIN.gets || "")
for word in data.downcase!.tr!('^a-z',' ').split
freq[word] += 1
end
}
print freq.to_a.map{|x| sprintf("%7d %s\n",x[1],x[0])}.sort.reverse
Can anyone explain why the Perl version is 4 times as fast as the
Ruby one?
Excellent!
Before we can use it I'm afraid you have to contribute it to the
shootout, we can't just skim programs from other places.
Please send programs to the mailing list or send them using the message
form or email them to igouy2
http://shootout.alioth.debian.org/faq.php?sort=fullcpu
best wishes, Isaac
Ruby gurus: before this is sent to the shootout, would you check
it to see if it can be made faster? (It has already been checked
for correctness.)
But "a".downcase! => nil ... And the same with most !-methods (they return
nil when nothing was changed).
That always bothered me, since I lose my method chaining with !
methods. Like this:
line.strip!.downcase!
must be
line.strip.downcase
to work properly. But then you lose some efficiency.
I'd prefer that ! methods returned 'self'. In the *rare* case that I
need to know if something changed, I'll use == or something. RCR in
the making?
Dan
It's been discussed a lot over the years. My impression is that
Matz likes this behavior, in which case it would be unlikely to
change.
Hal
No need to subscribe to the mailing-list.
No need for a user-id or login.
See the FAQ "How can I contribute a program?"
http://shootout.alioth.debian.org/faq.php?sort=fullcpu