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