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