DEV Community

loading...

Weekly Challenge 085

simongreennet profile image Simon Green ・2 min read

Challenge 085

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
`

Discussion

pic
Editor guide