From 22eb11d6f37d91f264267895f633ce53c1d5babf Mon Sep 17 00:00:00 2001 From: drbaggy Date: Wed, 6 Jul 2022 02:15:50 +0100 Subject: tidying up and using $#_ for n-1 size of parameter array --- challenge-172/james-smith/README.md | 37 ++++++++++++++++++---------------- challenge-172/james-smith/perl/ch-2.pl | 13 +++++++----- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/challenge-172/james-smith/README.md b/challenge-172/james-smith/README.md index 7d1e63731f..34c223f1e5 100644 --- a/challenge-172/james-smith/README.md +++ b/challenge-172/james-smith/README.md @@ -83,27 +83,29 @@ These each take a similar form. * We then compute the value for that index ```perl sub fivenum_avg { - my @sort = sort { $a <=> $b } @_; # sort values + my @sort = sort { $a <=> $b } @_; # sort values [ - map { $_->[1] # If lies between 2 points - ? ( 1 - $_->[1] ) * $sort[ $_->[0] ] + # compute weighted average + map { $_->[1] # If lies between 2 points + ? ( 1 - $_->[1] ) * $sort[ $_->[0] ] + # compute weighted average $_->[1] * $sort[ $_->[0] + 1 ] - : $sort[ $_->[0] ] # o/w return value + : $sort[ $_->[0] ] # o/w return value } - map { [ int $_, $_ - int $_ ] } # get LH-index, and distance of point from this - map { $_/4*(@_-1) } 0..4 # calculate index + map { [ int $_, $_ - int $_ ] } # get LH-index, and distance of point from this + map { $_/4*$#_ } # calculate index + 0 .. 4 ]; } sub fivenum_mid { - my @sort = sort { $a <=> $b } @_; # sort values + my @sort = sort { $a <=> $b } @_; # sort values [ - map { $_->[1] # If lies between 2 points - ? ($sort[$_->[0]] + $sort[$_->[0]+1])/2 # compute average - : $sort[$_->[0]] # o/w return value + map { $_->[1] # If lies between 2 points + ? ($sort[$_->[0]] + $sort[$_->[0]+1])/2 # compute average + : $sort[$_->[0]] # o/w return value } - map { [ int $_, ($_ == int $_) ? 0 : 1 ] } # get LH-index {and flag if point lies between 2 numbers - map { $_/4*(@_-1) } 0..4 # calculate index + map { [ int $_, ($_ == int $_) ? 0 : 1 ] } # get LH-index {and flag if point lies between 2 numbers} + map { $_/4*$#_ } # calculate index + 0 .. 4 ]; } @@ -111,11 +113,12 @@ sub fivenum_range { my @sort = sort { $a <=> $b } @_; # sort values [ map { $_->[1] && $sort[$_->[0]] != $sort[$_->[0]+1] # If lies between 2 points - ? '<'.$sort[$_->[0]].'-'.$sort[$_->[0]+1].'>' # return "range" - : $sort[$_->[0]] # o/w return value - } - map { [ int $_, ($_ == int $_) ? 0 : 1 ] } # get LH-index {and flag if point lies between 2 numbers - map { $_/4*(@_-1) } 0..4 # calculate index + ? '<'.$sort[$_->[0]].'-'.$sort[$_->[0]+1].'>' # return "range" + : $sort[$_->[0]] # o/w return value + } + map { [ int $_, ($_ == int $_) ? 0 : 1 ] } # get LH-index {and flag if point lies between 2 numbers} + map { $_/4*$#_ } # calculate index + 0 .. 4 ]; } ``` diff --git a/challenge-172/james-smith/perl/ch-2.pl b/challenge-172/james-smith/perl/ch-2.pl index ba7d0f1dbd..1dd5b16c7a 100644 --- a/challenge-172/james-smith/perl/ch-2.pl +++ b/challenge-172/james-smith/perl/ch-2.pl @@ -36,7 +36,8 @@ sub fivenum_avg { : $sort[ $_->[0] ] } map { [ int $_, $_ - int $_ ] } - map { $_/4*(@_-1) } 0..4 + map { $_/4*$#_ } + 0 .. 4 ]; } @@ -51,7 +52,8 @@ sub fivenum_mid { : $sort[ $_->[0] ] } map { [ int $_, ($_ == int $_) ? 0 : 1 ] } - map { $_/4*(@_-1) } 0..4 + map { $_/4*$#_ } + 0 .. 4 ]; } @@ -61,10 +63,11 @@ sub fivenum_range { my @sort = sort { $a <=> $b } @_; [ map { $_->[1] && $sort[$_->[0]]!=$sort[$_->[0]+1] - ? '<'.$sort[$_->[0]].'-'.$sort[$_->[0]+1].'>' - : $sort[$_->[0]] } + ? '<'.$sort[$_->[0]].'-'.$sort[$_->[0]+1].'>' + : $sort[$_->[0]] } map { [ int $_, ($_ == int $_) ? 0 : 1 ] } - map { $_/4*(@_-1) } 0..4 + map { $_/4*$#_ } + 0 .. 4 ]; } -- cgit