From: "Christoffer Lernö" Date: 2007-03-12T04:34:50+09:00 Subject: Re: directly modify a part on an array for quiz #117 purposes On Mar 11, 2007, at 20:24 , Albert Ng wrote: > From Ruby quiz #117 (much fun) > > #bad code by me, interesting bits shamelessly stolen from Dave Burt > neighborhood=[@grid[x0][y0], @grid[x0][y1], @grid[x1][y0], @grid[x1] > [y1]] > > where each element of @grid[][] is a string, x1 = x0+1, and y1=y0+1 > > is there a way to do the following: > @grid[x0][y0], @grid[x0][y1], @grid[x1][y0], @grid[x1][y1] = @grid > [x1][y0], > @grid[x0][y0], @grid[x1][y1], @grid[x0][y1] > > in a more readable way > > I thought > > *neighborhood = @grid[x1][y0], @grid[x0][y0], @grid[x1][y1], @grid > [x0][y1] > > would be equivalent, but it isn't. Did you have a look at my code? I used this: 2.times do |y| 2.times do |x| class_eval "def xy#{x}#{y}; @grid[@x + #{x}, @y + #{y}]; end" class_eval "def xy#{x}#{y}=(v); @grid[@x + #{x}, @y + #{y}] = v; end" end end To allow me to write the rotations as def ccw90 self.xy00, self.xy10, self.xy01, self.xy11 = xy10, xy11, xy00, xy01 end def cw90 self.xy00, self.xy10, self.xy01, self.xy11 = xy01, xy00, xy11, xy10 end Might be an idea? /Christoffer