Я хочу выполнить вычисление XOR с другим смещением для списка в расчете.
Пример:
key = [0, 1, 0] text = ["0", "1", "0", "1", "0", "1", "0", "1", "1", "1"]
Расчет XOR:
key[0] ^ text[0] ; key[1] ^ text[1] ; key[2] ^ text[2] ; key[0] ^ text[3] ; key[1] ^ text[4] ; key[2] ^ text[5] ; key[0] ^ text[6] ; key[1] ^ text[7] ; key[2] ^ text[8] ; key[0] ^ text[9] ;
Как это сделать?
Вы можете использовать метод Array#cycle для "циклического" переключения вашего ключа на необходимое количество:
Array#cycle
text.zip(key.cycle).map{|t,k| t.to_i ^ k} # => [0, 0, 0, 1, 1, 1, 0, 0, 1, 1]
Ruby 1.9 имеет .cycle:
key = [0, 1, 0] text = ["0", "1", "0", "1", "0", "1", "0", "1", "1", "1"] key_looper = key.cycle p text.map{|el|key_looper.next ^ el.to_i} #=> [0, 0, 0, 1, 1, 1, 0, 0, 1, 1]