From: "David A. Black" Date: 2004-09-28T23:59:21+09:00 Subject: Re: rindex with array of arrays Hi -- On Tue, 28 Sep 2004, STEPHEN BECKER I V wrote: > Should rindex work for an array of arrays? I am starting the playfair > cypher, you get a key and append the alphabet to it then remove dups > and change J to I, then make that in to a matrix . > > mat[0].rindex("b") works right > but not > mat.rindex("b") If mat is an array of arrays, then none of its elements are "b", so there will be no match there. > Do i need a string match type of thing? Maybe, but have you looked at the Matrix class? I'm not sure, but it might have the kind of search mechanism you need. > ####code > def removedup(a) # i want to change a to an array then use uniq > b=('a'..'z').to_a > a< a.gsub!("j","i") > a.gsub!(/\s/, '') > loc=0 > while loc > for i in loc+1 .. a.size > a[i]='' if a[loc]==a[i] > end > loc+=1 > end > > return a > end > > def makematrix(a) > count = 0 > mx = Array.new(5) > for i in 0 .. (5 - 1) > row = Array.new(5, 0) > for j in 0 .. (5 - 1) > row[j] = a[count].chr #make a matrix of the letters in a > count += 1 > end > mx[i] = row > end > return mx > end > > print "Enter a key: " > a=gets.downcase > > print removedup(a) > tmat=makematrix(a) > print tmat.rindex("x") # will this work? > ####code Slightly shorter version of your code (I think it does the same thing), just for fun :-) def removedup(a) (a.split(//).concat(('a'..'z').to_a) - ["j"]).uniq.join end def makematrix(a) a.scan(/.{5}/).map {|row| row.split(//)} end print "Enter a key: " a=gets.downcase.chomp r = removedup(a) puts r tmat=makematrix(r) p tmat I haven't used Matrix, but again, you might want to look at that too. David -- David A. Black dblack@wobblini.net