```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<<b.to_s
> a.gsub!("j","i")
> a.gsub!(/\s/, '')
>        loc=0
> 	while loc<a.size
>
> 		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

```