Bits distribution

Weekly challenge 269 — 13 May 2024

Week 269 - 13 May 2024

Task 1

You are given an array of positive integers, `@ints`

.
Write a script to find out if it is possible to select two or more elements of the given array such that the bitwise OR of the selected elements has at least one trailing zero in its binary representation.

Example 1Input: @ints = (1, 2, 3, 4, 5) Output: true Say, we pick 2 and 4, their bitwise OR is 6. The binary representation of 6 is 110. Return true since we have one trailing zero.Example 2Input: @ints = (2, 3, 8, 16) Output: true Say, we pick 2 and 8, their bitwise OR is 10. The binary representation of 10 is 1010. Return true since we have one trailing zero.Example 3Input: @ints = (1, 2, 5, 7, 9) Output: false

The bitwise **or** of two non-negative integers will only end in zero if the
bitwise representation of each of them ends in zero (that is, they are multiples of 2).

My solution uses `grep`

to filter `@ints`

for such numbers, and returns
**true** if it finds at least two of them, or **false** if not.

#!/usr/bin/perl # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge use v5.26; # The Weekly Challenge - 2024-05-13 use utf8; # Week 269 - task 1 - Bitwise or use warnings; # Peter Campbell Smith binmode STDOUT, ':utf8'; bitwise_or(1, 2, 3, 4, 5); bitwise_or(2, 3, 9, 16); bitwise_or(1, 2, 5, 7, 9); bitwise_or(1, 3, 3, 7, 5, 9, 19, 20, 99, 100); bitwise_or(1, 3, 3, 7, 5, 9, 19, 20, 99, 101); sub bitwise_or { # filter out even numbers my @result = grep { ! ($_ & 1) } @_; # there are at least 2 of them if $result[1] is defined say sprintf(qq[\nInput: \@ints = (%s)], join(', ', @_)); say qq[Output: ] . ($result[1] ? qq[true ($result[0], $result[1])] : 'false'); }

Input: @ints = (1, 2, 3, 4, 5) Output: true (2, 4) Input: @ints = (2, 3, 9, 16) Output: true (2, 16) Input: @ints = (1, 2, 5, 7, 9) Output: false Input: @ints = (1, 3, 3, 7, 5, 9, 19, 20, 99, 100) Output: true (20, 100) Input: @ints = (1, 3, 3, 7, 5, 9, 19, 20, 99, 101) Output: false

The content of
this website
is licensed by
Peter
Campbell Smith under a
Creative Commons Attribution 4.0 International Licence