我有一个初始化为array1
的19位长的数组(0
)和另一个64位长的数组(clave
)。我想迭代array1
64次,同时检查clave
。我这样做了:
def fase2
j=0
for i in 0..63
@array1[j]=@array1[18].to_i^@array1[17].to_i^@array1[16].to_i^@array1[13].to_i^@clave[i].to_i
j=j+1
if j>19
j=0
end
end
print @array1
gets
end
有更简洁的方法吗??
答案 0 :(得分:1)
我可以想到一些改进。
将所有变量名称称为更有意义的名称。 @array1
中的内容是什么?整型?考虑称之为@ints
。将数组称为复数名称是很好的。如果可能,j
和i
也是如此。
使用(0..63).each do |i|
代替for i in 0..63
。更像红宝石
在运算符之间使用间距,尤其是等于。 j = 0
不是j=0
小条件可以放在一行:j = 0 if j > 19
为什么神奇的数字?为什么18,17,16和13特别?将它们放在一个适当命名的数组中以启动,然后像这样使用Array#reduce
special_indeces = [18, 17, 16, 13]
... and then in loop ...
xor = special_indeces.reduce do |val, index|
val ^ @array1[index].to_i
end
gets
是什么?有什么意义呢?祝你好运,该代码需要认真的工作。
答案 1 :(得分:0)
这是未经测试的,但更多的是我如何编写内部循环:
def fase2
@clave.each do |clave|
(0..19).each do |j|
@array1[j] = @array1[18].to_i ^ @array1[17].to_i ^ @array1[16].to_i ^ @array1[13].to_i ^ clave.to_i
end
end
print @array1
gets
end