Peter
Peter Campbell Smith

JortSort and long primes

Weekly challenge 139 — 15 November 2021

Week 139 - 15 Nov 2021

Task 1

Task — JortSort

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.

Examples


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.

Analysis

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.'

Try it 

Try running the script with any input:



example: 1, 2, 3, 4, 2

Script


#!/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];
}

Output


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