Go Back   CodingForums.com > :: Server side development > Ruby & Ruby On Rails

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 07-17-2010, 03:55 PM   PM User | #1
JamesShijie
New to the CF scene

 
Join Date: Jul 2010
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
JamesShijie is an unknown quantity at this point
Infinite Loop Problem

Hi all,

I'm new to ruby, and I'm Having trouble with my code. It's an exercise for learning ruby, and I'm plowing through it. The explanation of the exercise is this:

For each person in your group, you want to assign a "spy" such that no one spies on themselves or someone with the same last name.

Input: A file you will name "people.txt" of the form:
Code:
Luke Skywalker <luke@theforce.net> 
Leia Skywalker <leia@therebellion.org> 
John Wayne <John@Western.com> 
Clark      Kent <super@gmail.com> 
Lois Ken <super2@gmail.com> 
Pop Eye              <popeye@gmail.com> 
Private           Eye <wise@gmail.com> 
Robotic Eye <me@gmail.com> 
Vicki             Allan   <Vicki.Allan@usu.edu> 
Joe Allan              <joeTheAllan@usu.edu> 
Terrance           Allan <Terry.All@gmail.com> 
Philip Allan <PhilDoll@gmail.com>
That's the text file I have to work with. It has all those random spacings in there for a reason, so it's a bit trickier to get the right input. Here's my implementation:

Code:
class People # Contains all information about a person
  attr_accessor :fname, :lname, :email, :found
  def initialize(fname, lname, email,found)
    @fname = fname
    @lname = lname
    @email = email
    @found = found
  end
end
#========================================================================
  
# This method gets all the names, and puts them in a string, line by line
def get_the_names()
  people_array = IO.readlines("people.txt")
  people_array
end
#========================================================================

#counts the lines in the file
count = 0
File.open("people.txt", 'r') { |fh|
  count += 1 while fh.gets
}
#========================================================================

#the raw names, gotten from get_the_names()
raw_names = get_the_names()
#========================================================================

#Takes the raw_names, strips them, and puts them into
#an array called "stripped"
stripped = Array.new(count)
count.times { |index|
  stripped[index] = raw_names[index].scan(/\w+/)
}
#========================================================================


#make the array of People objects
spies = Array.new(count)
for i in 0..(count-1) do
  #this command re-creates the email address, because it was split into 3 parts
  email = "<" + stripped[i][2] + "@" + stripped[i][3] + "." + stripped[i][4] + ">"
  #0 will always be fname, and 1 will always be last name, which is why they're hard-coded
  spies[i] = People.new(stripped[i][0],stripped[i][1],email,false)
end
#========================================================================


#perform some spying! Making sure no one spies on themselves,
#or someone with their same last name
r_spies = spies.sort_by{ rand }
rand_spies = r_spies.dup

found = 12
index = 0

while found > 0 do
  for k in 0..spies.length()-1 do
    for l in 0..rand_spies.length()-1 do
      if spies[k].lname == rand_spies[l].lname
        next
      end
      if spies[k].email.to_s == rand_spies[l].email.to_s
        next
      end
      if spies[k].found == true || rand_spies[l].found == true
        next
      end
      spies[k].found = true
      rand_spies[l].found = true
      puts "Person " + spies[k].fname.to_s + " " + spies[k].lname.to_s + " at " + spies[k].email.to_s + " spies on " + "Person " + rand_spies[l].fname.to_s + " " + rand_spies[l].lname.to_s + " at " + rand_spies[l].email.to_s
      found = found-1
    end
  end
end
The problem is this: It correctly spies on 6 people, but it hangs on an infinite loop after the 6th one, and I can't figure it out. Any help would be GREATLY appreciated.
JamesShijie is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 01:35 AM.


Advertisement
Log in to turn off these ads.