Evens go first and

untangling the route

Weekly challenge 213 — 17 April 2023

Week 213 - 17 Apr 2023

Task 1

You are given a list of positive integers. Write a script to sort the all even integers first then all odds in ascending order.

Perhaps not the most efficient way to do it, but:

- add a million to all the odd numbers,
- sort the array,
- subtract a million from the numbers >= a million.

... and that works provided none of the integers is >= a million.

#!/usr/bin/perl use v5.16; # The Weekly Challenge - 2023-04-17 use utf8; # Week 213 task 1 - Fun sort use strict; # Peter Campbell Smith use warnings; # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge my ($j, @list); fun_sort([1, 2, 3, 4, 5, 6]); fun_sort([1, 2]); fun_sort([1]); # longer example for $j (1 .. 50) { push @list, int(rand(50) + 1); } fun_sort(\@list); sub fun_sort { # add a million to all the odd numbers, then # sort and then subtract a million from the odd ones my @list = map {$_ & 1 ? $_ - 1000000 : $_} sort {$a <=> $b} map {$_ & 1 ? $_ + 1000000 : $_} @{$_[0]}; say qq[\nInput: \@list = (] . join(', ', @{$_[0]}) . q[)]; say qq[Output: \@list = (] . join(', ', @list) . q[)]; }

Input: @list = (1, 2, 3, 4, 5, 6) Output: @list = (2, 4, 6, 1, 3, 5) Input: @list = (1, 2) Output: @list = (2, 1) Input: @list = (1) Output: @list = (1) Input: @list = (11, 28, 14, 7, 38, 48, 43, 14, 34, 42, 47, 22, 47, 32, 36, 36, 14, 2, 9, 29, 40, 11, 20, 23, 12, 15, 40, 12, 43, 35, 39, 43, 27, 37, 29, 4, 41, 49, 9, 25, 27, 39, 5, 17, 21, 7, 17, 10, 39, 42) Output: @list = (2, 4, 10, 12, 12, 14, 14, 14, 20, 22, 28, 32, 34, 36, 36, 38, 40, 40, 42, 42, 48, 5, 7, 7, 9, 9, 11, 11, 15, 17, 17, 21, 23, 25, 27, 27, 29, 29, 35, 37, 39, 39, 39, 41, 43, 43, 43, 47, 47, 49)

The content of this website which has been created by

Peter Campbell Smith is hereby placed in the public domain

Peter Campbell Smith is hereby placed in the public domain