Project

General

Profile

Actions

Bug #16395

closed

.any? and .all? methods, flawed.

Added by stiuna (Juan Gregorio) over 4 years ago. Updated over 4 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
2.6.5
[ruby-core:96075]

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.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0