Peter
Peter Campbell Smith

Sorted them both

Weekly challenge 217 — 15 May 2023

Week 217 - 15 May 2023

Task 1

Task — Sorted matrix

You are given a n x n matrix where n >= 2. Write a script to find 3rd smallest element in the sorted matrix.

Analysis

All that is needed here is to concatenate the rows, sort them numerically, and the answer is the third element in the list.

Try it 

Example: [1, 2, 4], [4, 5, 6], [7, 8, 3]

Script


#!/usr/bin/perl

use v5.16;    # The Weekly Challenge - 2023-05-15
use utf8;     # Week 217 task 1 - Sorted matrix
use strict;   # Peter Campbell Smith
use warnings; # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge

sorted_matrix([3, 1, 2], [5, 2, 4], [0, 1, 3]);
sorted_matrix([2, 1], [4, 5]);
sorted_matrix([1, 0, 3], [0, 0, 0], [1, 2, 1]);
sorted_matrix([1, 2, 3, 4, 5], [3, 4, 5, 6, 7], [9, 8, 7, 6, 5], [0, 2, 4, 6, 8], [9, 7, 5, 3, 1]);

sub sorted_matrix {
    
    my (@list, @rows, $j);

    # concatenate rows and then sort the list
    push @list, @$_ for @_;
    @list = sort { $a <=> $b } @list;
    
    # show results
    $rows[$j ++] = '[' . join(', ', @$_) . ']' for @_;
    say qq[\nInput:  \@matrix = (] . join(', ', @rows) . ')';
    say qq[Output: $list[2]];
}

Output


Input:  @matrix = ([3, 1, 2], [5, 2, 4], [0, 1, 3])
Output: 1

Input:  @matrix = ([2, 1], [4, 5])
Output: 4

Input:  @matrix = ([1, 0, 3], [0, 0, 0], [1, 2, 1])
Output: 0

Input:  @matrix = ([1, 2, 3, 4, 5], [3, 4, 5, 6, 7], [9, 8, 7, 6, 5], [0, 2, 4, 6, 8], [9, 7, 5, 3, 1])
Output: 1