JortSort and long primes
Weekly challenge 139 — 15 November 2021
Week 139: 15 Nov 2021
You are given a @list
of numbers.
Write a script to implement JortSort. It should return true/false depending if the given list of numbers is already sorted.
Example 1: Input: @n = (1,2,3,4,5) Output: 1 Since the array is sorted, it prints 1. Example 2: Input: @n = (1,3,2,4,5) Output: 0 Since the array is NOT sorted, it prints 0.
I cannot think of any better way than comparing each element in turn with the following one; if it is less than or equal then keep going, or else report that the array is not sorted.
However, the home of JortSort claims that the correct algorithm is to sort the array and then compare it with the original, returning 0 if they don't match or 1 if they do. That way, it 'guarantees efficiency because you don't have to sort ever again.'
A footnote explains that 'JortSort is considered a work of satire.'
#!/usr/bin/perl # Peter Campbell Smith - 2021-11-15 # PWC 139 task 1 use v5.20; use warnings; use strict; my ($lists, $list, $this, $result, $prev); # inputs to test $lists = [[1, 2, 3, 4, 5], [1, 2, 5, 4, 3], [2, 1, 3, 4, 5], [1, 100, 100, 12345, 123456789, 123456788], [-1, 0, 0, 0, 0, 1], [-100..100, 99], [12.34, 12.35, 12.36], [-1e6 + 0.1, -1e5-0.1, 1e4 + 0.1, 1e4 + 0.100001]]; # loop over inputs for $list (@$lists) { say qq[\nInput: ] . join(', ', @$list); # assume good until proved otherwise $result = 1; $prev = $list->[0]; for $this (@$list) { $result = $this < $prev ? 0 : 1; last unless $result; # no need to check the rest of the list $prev = $this; } say qq[Output: $result]; }
Input: 1, 2, 3, 4, 5 Output: 1 Input: 1, 2, 5, 4, 3 Output: 0 Input: 2, 1, 3, 4, 5 Output: 0 Input: 1, 100, 100, 12345, 123456789, 123456788 Output: 0 Input: -1, 0, 0, 0, 0, 1 Output: 1 Input: -100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -71, -70, -69, -68, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 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, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 99 Output: 0 Input: 12.34, 12.35, 12.36 Output: 1 Input: -999999.9, -100000.1, 10000.1, 10000.100001 Output: 1
Any content of this website which has been created by Peter Campbell Smith is in the public domain