aboutsummaryrefslogtreecommitdiff
path: root/challenge-059/noud/raku/ch-2.p6
blob: 1c1b1fb693eef5aa3deccf0286e345d6a02ebc1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Helper Function
#
# For this task, you will most likely need a function f(a,b) which returns the
# count of different bits of binary representation of a and b.
#
# For example, f(1,3) = 1, since:
#
# Binary representation of 1 = 01
# Binary representation of 3 = 11
#
# There is only 1 different bit. Therefore the subroutine should return 1. Note
# that if one number is longer than the other in binary, the most significant
# bits of the smaller number are padded (i.e., they are assumed to be zeroes).
#
# Script Output
#
# You script should accept n positive numbers. Your script should sum the
# result of f(a,b) for every pair of numbers given:
# For example, given 2, 3, 4, the output would be 6, since f(2,3) + f(2,4) +
# f(3,4) = 1 + 2 + 3 = 6

sub f($a, $b) {
    return [+] ($a +^ $b).base(2).comb;
}

sub pair-sum(@a) {
    return [+] @a.combinations(2).map({ f($_[0], $_[1]); });
}

say pair-sum([2, 3]);
say pair-sum([2, 3, 4]);
say pair-sum([2, 3, 4, 5]);
say pair-sum([2, 3, 4, 5, 6]);
say pair-sum([2, 3, 4, 5, 6, 7]);
say pair-sum([2, 3, 4, 5, 6, 7, 8]);
say pair-sum([2, 3, 4, 5, 6, 7, 8, 9]);
say pair-sum([2, 3, 4, 5, 6, 7, 8, 9, 10]);

# Note: This sequence is unknown in the online encyclopedia of integer
# sequences (OEIS). I'm surprised it's not in there. Is this pair-sum function
# somehow a well know function? If it isn't I think it's a good idea to add it
# to the OEIS.