From: Mark Hubbart Date: 2005-09-02T00:26:29+09:00 Subject: Re: palindrome finder On 9/1/05, Berger, Daniel wrote: > > -----Original Message----- > > From: Josh Charles [mailto:josh.charles@gmail.com] > > Sent: Thursday, September 01, 2005 9:06 AM > > To: ruby-talk ML > > Subject: palindrome finder > > > > > > I've been working on this piece of code and it's starting to > > drive me crazy. I think it's a problem with reference vs > > value type, but I'm not sure. I'm just writing a simple > > program to process a list of words and print out all the > > palindromes (words that read the same forward and backward) > > > > Here is my code: > > > > file = File.open("testdict.txt", "r" ) do |file| > > file.each_line("\n") do |line| > > #filelist.push( line ) > > line.downcase! > > if (line == line.reverse) > > puts line > > end > > end > > end > > > > I've made sure each line is being read properly, and it is. > > The if statement never returns true, however. I'm new to > > ruby, so I'm probably just doing something really stupid, but > > I can't figure it out yet. > > That can be shortened to: > > IO.foreach("testdict.txt"){ |line| > line.downcase!.chomp! > puts line if line == line.reverse? > } > > Note the chomp! Beware of the bang methods. They can be dangerous when chained: a="test\n" ==>"test\n" a.downcase!.chomp! NoMethodError: private method `chomp!' called for nil:NilClass from (irb):50 a ==>"test\n" instead, use: line=line.downcase.chomp or line = line.downcase.strip ... which will remove *all* surrounding whitespace, not just newlines. cheers, Mark