Weekly Challenge 241
Each week Mohammad S. Anwar sends out The Weekly Challenge, a chance for all of us to come up with solutions to two weekly tasks. My solutions are written in Python first, and then converted to Perl. It's a great way for us all to practice some coding.
Task 1: Arithmetic Triplets
Submitted by: Mohammad S Anwar
You are given an array (3 or more members) of integers in increasing order and a positive integer.
Write a script to find out the number of unique Arithmetic Triplets satisfying the following rules:
i < j < k
nums[j] - nums[i] == diff
nums[k] - nums[j] == diff
My solution
This seems pretty straight forward. For any given number in the list, check if that number + diff and that number + diff × 2 are also in the list. If it is, increment the count
variable by one.
for i in ints:
if i+diff in ints and i+diff*2 in ints:
count += 1
My Perl solution follows the same logic. As Perl does not have an in-built in
function, I first create a hash of the numbers. I could have use List::Util's any function, but that gets a bit messy for my liking. YMMV :)
my %ints = map { $_, 1 } @ints;
Examples
$ ./ch-1.py 0 1 4 6 7 10 3
2
$ ./ch-1.py 4 5 6 7 8 9 2
2
Task 2: Prime Order
Task
You are given an array of unique positive integers greater than 2.
Write a script to sort them in ascending order of the count of their prime factors, tie-breaking by ascending value.
My solution
This is very similar to the second task three weeks ago, and the second task from challenge 233. Read my original post about how I do the sorting in this task.
To determine the prime factors of a number, I created a function all count_primes. It has two variables, primes
is the number of primes while count
is the (possibly prime) divisor we are looking at.
I iterate until the input is 1. If the number is divisible by count
, then I add one to prime
. If it is not, I add one to count
and loop again.
primes = 0
count = 2
while i > 1:
if i % count == 0:
primes += 1
i = i / count
else:
count += 1
return primes
Examples
$ ./ch-2.py 11 8 27 4
(11, 4, 8, 27)
Top comments (0)