Bug #16395
closed.any? and .all? methods, flawed.
Description
The dynamics of the script is simple, no explanations needed, look for yourselves:
# 100E1 312A3 8B64 282F C4A B28F
result = '99E2E403100E1A685A63312A308B6478282F2B2C4A34B28F7E'
virus = ['100E1', '312A3', '8B64', '282F', 'C4A', 'B28F']
count = 0
virus.all? {|i|
puts i
if result.include? i
count += 1
end
}
puts "Coincidences: #{count}"
Out:
100E1
312A3
8B64
282F
C4A
B28F
Coincidences: 6
That's correct. Now change .all? for .any?
Out:
100E1
Coincidences: 1
That's not right. Now let's modify the .any? block like this:
virus.any? {|i|
if result.include? i
count += 1
puts "#{count}:#{i}"
end
}
Out:
1:100E1
2:312A3
3:8B64
4:282F
5:C4A
6:B28F
Coincidences: 6
That's correct. Now change .any? for .all?
Out:
1:100E1
Coincidences: 1
That's not right. Now let's modify the .all? block like this:
virus.all? {|i|
if result.include? i
puts "#{count}:#{i}"
count += 1
end
}
Out:
0:100E1
1:312A3
2:8B64
3:282F
4:C4A
5:B28F
Coincidences: 6
That's correct. If you look only I have changed the order of the instructions puts and count.
In case you don't understand me, I'll put the complete code with each method:
result = '99E2E403100E1A685A63312A308B6478282F2B2C4A34B28F7E'
virus = ['100E1', '312A3', '8B64', '282F', 'C4A', 'B28F']
count = 0
virus.any? {|i|
if result.include? i
# If these two lines change order the program fails.
count += 1
puts "#{count}:#{i}"
end
}
puts "Coincidences: #{count}"
The output will print 6 coincidences, but if you change the order of the instructions puts and count the program returns 1 coincidence.
Now with .all?
result = '99E2E403100E1A685A63312A308B6478282F2B2C4A34B28F7E'
virus = ['100E1', '312A3', '8B64', '282F', 'C4A', 'B28F']
count = 0
virus.all? {|i|
if result.include? i
# If these two lines change order the program fails. Compare the order with .any?
puts "#{count}:#{i}"
count += 1
end
}
puts "Coincidences: #{count}"
The output will print 6 coincidences, but if you change the order of the instructions puts and count the program returns 1 coincidence.