On Fri, 2 Sep 2005, 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! rule of thumb - never chain bang methods: harp:~ > irb irb(main):001:0> 'foobar'.downcase! => nil so the code will throw like so: irb(main):002:0> 'foobar'.downcase!.chomp! NoMethodError: private method `chomp!' called for nil:NilClass from (irb):2 so maybe: harp:~ > cat a.rb palindrome = lambda{|s| s = s.strip and s == s.reverse} IO::foreach("words"){|w| puts w if palindrome[ w ]} harp:~ > ruby a.rb bib bob boob civic dad deed did dud eke ere ewe eye gag gig huh level madam non noon nun peep pep pip pop pup radar redder refer reviver rotator rotor sees sexes solos tit cheers. -a -- =============================================================================== | email :: ara [dot] t [dot] howard [at] noaa [dot] gov | phone :: 303.497.6469 | Your life dwells amoung the causes of death | Like a lamp standing in a strong breeze. --Nagarjuna ===============================================================================