rindex with array of arrays

S

STEPHEN BECKER I V

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")
Do i need a string match type of thing?


####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='' if a[loc]==a
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 = 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
 
D

David A. Black

Hi --

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='' if a[loc]==a
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 = 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
 
S

STEPHEN BECKER I V

One day i will program in a ruby way. I am searching the CHM file that
comes with the windows installer they only thing that has matrix is
"Math mode (fraction and matrix support is available)." under the IRB.
I am going to delete the CHM file and just use the
http://www.ruby-doc.org/stdlib/ pages. But the matrix class does not
seem to be useful for what i want. It would be good for linear
algebra. Thank you again for your help.

Stephen


Hi --

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='' if a[loc]==a
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 = 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
 
S

STEPHEN BECKER I V

(a.split(//).concat(('a'..'z').to_a) - ["j"]).uniq.join
does not take care of white space .
split(/\s*/) does :) I dont know why but i kept tring slice and was
over looking split. Thank you again
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,763
Messages
2,569,562
Members
45,038
Latest member
OrderProperKetocapsules

Latest Threads

Top