We needed to find duplicate characters in multiple arrays for Saturday’s Advent of Code.

In the first part of the problem, it was among two arrays, so I did something quick like this:

1
first_array.select { |char| second_array.include?(char) }

This worked as expected, but in part 2, you needed to perform a similar search across three arrays.

I could have chained a second select or duplicated the line entirely, but I figured there was a more straightforward way…and of course, in Ruby, there is almost always a more straightforward way.

I do not have a traditional comp sci background, so my mind rarely jumps to Bitwise operators, but in this case, this is the Bitwise & operator is exactly what we needed.

@scott pointed this is not Bitwise when dealing with strings:

It is the unary and operator. On arrays, #& is a method that returns the set union of two arrays. On integers, it is indeed implemented as a bitwise and.

1
2
3
4
5
a = "vJrwpWtwJgWrhcsFMMfFFhFp".chars
b = "jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL".chars
c = "PmmdzqPrVvPwwTWBwg".chars

duplicates = a & b & c

Even better, this easily scales across N arrays.