Weekly Challenge 085
Simon Green
Posted on November 3, 2020
Short blog this week, because this seems relatively straight forward, so doesn't need much explanation.
TASK #1 › Triplet Sum
It seems the majority of solutions for task 2 of challenge 083 was to use binary operations to flip bits.
I did the same for this task. Counting from 7
(the smallest number with three bits set) to 2 ** scalar(numbers) - 1
, I check if that number has only 3 bits set, and use this to decide what numbers to sum. If 1 < $sum < 2
, then I print the result. If I reach the end of the array, I print 0
.
Examples
» ./ch-1.pl 1.2 0.4 0.1 2.5
Output: 1 as 1 < 1.2 + 0.4 + 0.1 < 2
» ./ch-1.pl 0.2 1.5 0.9 1.1
Output: 0
» ./ch-1.pl 0.5 1.1 0.3 0.7
Output: 1 as 1 < 0.5 + 1.1 + 0.3 < 2
TASK #2 › Power of Two Integers
Let's start with Math 101. The formula to find the nth root is x(1 ÷ n). Have said that Perl 5.30 has a very odd quirk, probably due to a precision rounding error.
# perl -E 'say 125**(1/3)'
5
# perl -E 'say int(125**(1/3))'
4
To work around this, I use a counter for the power value, starting at two. I use the nth root and sprintf to get the nearest integer, and then return true that integer ** power is the target value. Definitely a lot more messier than I would have liked.`
Examples
`
» ./ch-2.pl 8
Output: 1 as 8 = 2 ^ 3
» ./ch-2.pl 15
Output: 0
» ./ch-2.pl 125
Output: 1 as 125 = 5 ^ 3
`
Posted on November 3, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.