Calcul XOR : array , times.

A

aix aix

Hello ,

I have problems with my code for XOR calcul :

a =3D [1, 0, 1, 1, 0, 0, 1]
b =3D ["101101", "101100", "110011", "000111", "010110"]
# good result : 000001, 011010,101000, 001010,110000
# false result : ["000001", "000000", "011111", "101011", "111010"]
=3D> output with this code
# Why ? Because he spends that time with respect b.lenght ( =3D 6
generally ) that prevents take in this case the element 7 and 8 of "a".
# works in case a.length <b [x]. length
# How to resolv this problem ?
i =3D j =3D x =3D 0
c =3D []
d =3D []
f =3D []
5.times { |x| c.push b[x].split('') }

5.times { |i|
e =3D c.length
e.times { |j| d.push(a[j % 7].to_i ^ c[j].to_i) }
f.push d
d =3D []
}
puts "R=C3=A9sultat brute: "
p f

z =3D f.length
z.times { |h| f[h] =3D f[h].join("")}

puts "R=C3=A9sultats :"
p f



In this case :

a =3D [1, 0, 1, 1, 0, 0, 1]
b =3D ["101101", "101100", "110011", "000111", "010110"]

After splitting

b : [["1","0","1","1","0","1"], ["1","0","1","1","0","0"],
["1","1","0","0","1","1"],
["0","0","0","1","1","1"], ["0","1","0","1","1","0"]]

But `a.length =3D> 7` and `b[x].length =3D>6`

In this code, the xor calcul is performed with only 6 elements in a on
7.

So the calculation is performed here:

a[0] ^ b[0][0] ; a[1] ^ b[0][1] ; a[2] ^ b[0][2] ; a[3] ^ b[0][3] ;
a[4] ^ b[0][4] ; a[5] ^ b[0][5] ;
a[0] ^ b[1][0] ; a[1] ^ b[1][1] ; a[2] ^ b[1][2] ; a[3] ^ b[1][3] ;
a[4] ^ b[1][4] ; a[5] ^ b[1][5] ;
a[0] ^ b[2][0] ; a[1] ^ b[2][1] ; a[2] ^ b[2][2] ; a[3] ^ b[2][3] ;
a[4] ^ b[2][4] ; a[5] ^ b[2][5] ;
a[0] ^ b[3][0] ; a[1] ^ b[3][1] ; a[2] ^ b[3][2] ; a[3] ^ b[3][3] ;
a[4] ^ b[3][4] ; a[5] ^ b[3][5] ;
a[0] ^ b[4][0] ; a[1] ^ b[4][1] ; a[2] ^ b[4][2] ; a[3] ^ b[4][3] ;
a[4] ^ b[4][4] ; a[5] ^ b[4][5] ;

`a[6]` is never use.

and the calculation should be done:

a[0] ^ b[0][0] ; a[1] ^ b[0][1] ; a[2] ^ b[0][2] ; a[3] ^ b[0][3] ;
a[4] ^ b[0][4] ; a[5] ^ b[0][5] ;
a[6] ^ b[1][0] ; a[0] ^ b[1][1] ; a[1] ^ b[1][2] ; a[2] ^ b[1][3] ;
a[3] ^ b[1][4] ; a[4] ^ b[1][5] ;
a[5] ^ b[2][0] ; a[6] ^ b[2][1] ; a[0] ^ b[2][2] ; a[1] ^ b[2][3] ;
a[2] ^ b[2][4] ; a[3] ^ b[2][5] ;
a[4] ^ b[3][0] ; a[5] ^ b[3][1] ; a[6] ^ b[3][2] ; a[0] ^ b[3][3] ;
a[1] ^ b[3][4] ; a[2] ^ b[3][5] ;
a[3] ^ b[4][0] ; a[4] ^ b[4][1] ; a[5] ^ b[4][2] ; a[6] ^ b[4][3] ;
a[0] ^ b[4][4] ; a[1] ^ b[4][5] ;

I want to make the right calculation of course but I do not see how to
this.

How to use a[6] as above ?

Thanks

-- =

Posted via http://www.ruby-forum.com/.=
 
H

Harry Kakueki

Hello ,

I have problems with my code for XOR calcul :

=A0 =A0a =3D [1, 0, 1, 1, 0, 0, 1]
=A0 =A0b =3D ["101101", "101100", "110011", "000111", "010110"]
=A0 =A0# good result : 000001, 011010,101000, 001010,110000
=A0 =A0# false result : ["000001", "000000", "011111", "101011", "111010"= ]


How to use a[6] as above ?


Sorry, I did not look for a problem with your code. I did it another way.
This is not tested so it may have some problems but maybe it will give
you some ideas.

a =3D [1, 0, 1, 1, 0, 0, 1]
b =3D ["101101", "101100", "110011", "000111", "010110"]

bmod =3D b.join.split(//).map{|x| x.to_i}
amod =3D a*(bmod.size/a.size+1)
res =3D amod[0...bmod.size].zip(bmod).map{|z| z[0]^z[1]}

p [].tap{|y| b.size.times{y << res.slice!(0...b[0].size)}}.map{|g| g.join}




Harry
 
7

7stud --

7stud -- wrote in post #998575:
aix aix wrote in post #998497:
How to use a[6] as above ?

Thanks

You want Array#cycle.


Here's an example using Enumerator#next:

a = [1, 0, 1, 1, 0, 0, 1]
b = ["101101", "101100", "110011", "000111", "010110"]

enum = a.cycle

b.each do |str|
int_arr = str.split(//).map(&:to_i)

result_arr = int_arr.map do |int|
int ^ enum.next
end

p result_arr.join('')
end

--output:--
"000001"
"011010"
"101000"
"001010"
"110000"
 

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

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top