Re: Detecting number ranges
- From: "Jesús Gabriel y Galán" <jgabrielygalan@xxxxxxxxx>
- Date: Wed, 26 Sep 2007 17:18:58 +0900
On 9/26/07, Jay Levitt <jay+news@xxxxxx> wrote:
I had to write a script this evening to take an unsorted input file of the
form:
database 1 is on server 3
database 8 is on server 7
...
and output it in the form:
server 3 handles database 1 through 7
server 7 handles database 8 through 11
I feel like there's a much nicer way to express this in Ruby, but can't
think of what it might be...
Does this feel nicer?
$ cat db_ranges.rb && ruby db_ranges.rb
# db_ranges.rb
# 26 September 2007
#
require 'enumerator'
file =<<END
database 8 is on server 7
database 10 is on server 7
database 9 is on server 7
database 5 is on server 9
database 1 is on server 3
database 2 is on server 3
database 133 is on server 3
database 4 is on server 144
END
dbs = Hash.new {|h,k| h[k] = []}
file.each do |line|
m = line.match(/^database (.*) is on server (.*)/)
db_n = m[1].to_i
server_n = m[2].to_i
dbs[server_n] << db_n
end
dbs.each do |server, db|
result = [[db[0]]]
db.sort.each_cons(2) {|x, y| if y == x + 1 then result.last << y;
else result << [y]; end}
result.each {|x| puts "Server #{server} handles databases #{x.first}
to #{x.last}"}
end
Server 144 handles databases 4 to 4
Server 7 handles databases 8 to 10
Server 3 handles databases 1 to 2
Server 3 handles databases 133 to 133
Server 9 handles databases 5 to 5
Kind regards,
Jesus.
.
- Follow-Ups:
- Re: Detecting number ranges
- From: Jay Levitt
- Re: Detecting number ranges
- References:
- Detecting number ranges
- From: Jay Levitt
- Detecting number ranges
- Prev by Date: Re: How to print FULL stacktrace of exception w/ line #?
- Next by Date: Re: Ruby Gmail Chat Group
- Previous by thread: Re: Detecting number ranges
- Next by thread: Re: Detecting number ranges
- Index(es):
Relevant Pages
|