diff options
46 files changed, 2927 insertions, 1962 deletions
diff --git a/challenge-178/jaldhar-h-vyas/blog.txt b/challenge-178/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..b71a1d2383 --- /dev/null +++ b/challenge-178/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2022/08/perl_weekly_challenge_week_178.html
\ No newline at end of file diff --git a/challenge-178/jaldhar-h-vyas/perl/ch-1.pl b/challenge-178/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..ef0f386183 --- /dev/null +++ b/challenge-178/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,28 @@ +#!/usr/bin/perl +use 5.030; +use warnings; +use Math::Prime::Util qw/ todigits /; +use POSIX qw/ floor /; + +# based on http://www.rosettacode.org/wiki/Negative_base_numbers#Perl +sub quaterImaginaryBase { + my($n) = @_; + my @result; + my $r = 0; + + while ($n) { + $r = $n % -4; + $n = floor($n / -4); + if ($r < 0) { + $n++; + $r += 4; + } + push @result, todigits($r, 4) || 0; + } + + return join '0', reverse @result; +} + +my ($n) = shift // die "Need an integer\n"; + +say quaterImaginaryBase($n);
\ No newline at end of file diff --git a/challenge-178/jaldhar-h-vyas/perl/ch-2.pl b/challenge-178/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..1007e7e389 --- /dev/null +++ b/challenge-178/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl +use 5.030; +use warnings; +use DateTime; +use English; + +sub nextBusinessDay { + my ($dt) = @_; + my $next = $dt->clone; + if ($dt->day_of_week == 5) { + $next->add(days => 3); + } elsif ($dt->day_of_week == 6) { + $next->add(days => 2); + } else { + $next->add(days => 1); + } + + return $next->set(hour => 9, minute => 0) +} + +sub usage() { + print<<"-USAGE-"; +Usage: + $PROGRAM_NAME <timestamp> <duration> + + <timestamp> a datetime string in the format YYYY-MM-DD HH:MM + <duration> a duration as a decimal number of hours +-USAGE- + exit 0; +} + +if (scalar @ARGV != 2) { + usage; +} + +my ($timestamp, $duration) = @ARGV; + +my ($year, $month, $day, $hour, $minute); +if ($timestamp =~ / ^ (\d{4}) [-] (\d{2}) \- (\d{2}) [ ] (\d{2}) [:] (\d{2}) $/msx) { + ($year, $month, $day, $hour, $minute) = @{^CAPTURE}; +} else { + die "Bad timestamp format\n"; +} + +my $start = DateTime->new( + year => $year, + month => $month, + day => $day, + hour => $hour, + minute => $minute +); + +my $endOfDay = $start->clone->set(hour => 18, minute => 0); +my $endOfDuration = $start->clone->add(hours => $duration); +if ($endOfDuration <= $endOfDay) { + say $endOfDuration->strftime('%F %H:%M'); +} else { + my $difference = $endOfDuration - $endOfDay; + say nextBusinessDay($start)->add($difference)->strftime('%F %H:%M'); +} diff --git a/challenge-178/jaldhar-h-vyas/raku/ch-1.sh b/challenge-178/jaldhar-h-vyas/raku/ch-1.sh new file mode 100755 index 0000000000..101ac3837b --- /dev/null +++ b/challenge-178/jaldhar-h-vyas/raku/ch-1.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +raku -MBase::Any -e 'to-base(@*ARGS[0].Int, 2i).say;' $@
\ No newline at end of file diff --git a/challenge-178/jaldhar-h-vyas/raku/ch-2.raku b/challenge-178/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..d5a9bf5e8c --- /dev/null +++ b/challenge-178/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,56 @@ +#!/usr/bin/raku + +sub format($self) { + sprintf "%04d-%02d-%02d %02d:%02d", .year, .month, .day, .hour, .minute + given $self; +} + +sub nextBusinessDay(DateTime $dt) { + my $next = DateTime.new( + date => $dt.Date, + hour => 9, + minute => 0, + formatter => &format + ); + + if ($dt.day-of-week == 5) { + $next = $next.later(days => 3); + } elsif ($dt.day-of-week == 6) { + $next = $next.later(days => 2); + } else { + $next = $next.later(days => 1); + } + + return $next; +} + +sub MAIN( + Str $timestamp, #= a datetime string in the format YYYY-MM-DD HH:MM + Real $duration #= a duration as a decimal number of hours +) { + my ($year, $month, $day, $hour, $minute); + + if $timestamp.match(/ ^ (\d ** 4) '-' (\d ** 2) '-' (\d ** 2) ' ' (\d ** 2) ':' (\d ** 2) $/) { + ($year, $month, $day, $hour, $minute) = $/.List; + } else { + die "Bad timestamp format"; + } + + my $start = DateTime.new( + year => $year, + month => $month, + day => $day, + hour => $hour, + minute => $minute, + formatter => &format + ); + + my $endOfDay = DateTime.new(date => $start.Date, hour => 18, minute => 0); + my $endOfDuration = $start.clone.later(seconds => 3_600 * $duration); + if $endOfDuration <= $endOfDay { + say $endOfDuration; + } else { + my $difference = $endOfDuration - $endOfDay; + say nextBusinessDay($start).later(seconds => $difference); + } +}
\ No newline at end of file diff --git a/challenge-179/dario-mazzeo/perl/ch-1.pl b/challenge-179/dario-mazzeo/perl/ch-1.pl new file mode 100755 index 0000000000..6a09035b3b --- /dev/null +++ b/challenge-179/dario-mazzeo/perl/ch-1.pl @@ -0,0 +1,52 @@ +# THE WEEKLY CHALLENGE - 179
+# Task 1: Ordinal Number Spelling
+# Autore: Dario Mazzeo
+
+my $n=$ARGV[0];
+print NumeroInTesto($n);
+exit;
+
+
+sub NumeroInTesto{
+ my $n=$_[0];
+
+ if (length($n)==1){
+ if ($n==0){return "";}
+ elsif ($n==1){return "uno";}
+ elsif ($n==2){return "due";}
+ elsif ($n==3){return "tre";}
+ elsif ($n==4){return "quattro";}
+ elsif ($n==5){return "cinque";}
+ elsif ($n==6){return "sei";}
+ elsif ($n==7){return "sette";}
+ elsif ($n==8){return "otto";}
+ elsif ($n==9){return "nove";}
+ }
+ elsif (length($n)==2){
+ if ($n==10){return "dieci";}
+ elsif ($n==11){return "undici";}
+ elsif ($n==12){return "dodici";}
+ elsif ($n==13){return "tredici";}
+ elsif ($n==14){return "quattordici";}
+ elsif ($n==15){return "quindici";}
+ elsif ($n==16){return "sedici";}
+ elsif ($n==17){return "diciassette";}
+ elsif ($n==18){return "diciotto";}
+ elsif ($n==19){return "diciannove";}
+
+ my $n1=substr($n,0,1);
+ my $str="";
+ if ($n1==2){$str="venti";}
+ elsif ($n1==3){$str="trenta";}
+ elsif ($n1==4){$str="quaranta";}
+ elsif ($n1==5){$str="cinquanta";}
+ elsif ($n1==6){$str="sessanta";}
+ elsif ($n1==7){$str="settanta";}
+ elsif ($n1==8){$str="ottanta";}
+ elsif ($n1==9){$str="novanta";}
+
+ my $str=$str.(NumeroInTesto(substr($n,1,1)));
+ $str=~s/[ia]([uo])/$1/;
+ return $str;
+ }
+}
\ No newline at end of file diff --git a/challenge-179/eric-cheung/python/ch-1.py b/challenge-179/eric-cheung/python/ch-1.py new file mode 100755 index 0000000000..6ab2c37ac5 --- /dev/null +++ b/challenge-179/eric-cheung/python/ch-1.py @@ -0,0 +1,6 @@ +
+from num2words import num2words
+
+print (num2words(11).replace("-", " "))
+print (num2words(62).replace("-", " "))
+print (num2words(99).replace("-", " "))
diff --git a/challenge-179/eric-cheung/python/ch-2.py b/challenge-179/eric-cheung/python/ch-2.py new file mode 100755 index 0000000000..94c09ffbfd --- /dev/null +++ b/challenge-179/eric-cheung/python/ch-2.py @@ -0,0 +1,29 @@ +## -*- coding: utf-8 -*-
+
+## Unicode: 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608
+bar = '▁▂▃▄▅▆▇█'
+barcount = len(bar)
+
+def sparkline(numbers):
+ mn, mx = min(numbers), max(numbers)
+ extent = mx - mn
+ sparkline = ''.join(bar[min([barcount - 1, int((n - mn) / extent * barcount)])] for n in numbers)
+ return mn, mx, sparkline
+
+
+if __name__ == '__main__':
+ import re
+
+ for line in ("0 0 1 1; 0 1 19 20; 0 999 4000 4999 7000 7999;"
+ "1 2 3 4 5 6 7 8 7 6 5 4 3 2 1;"
+ "1.5, 0.5 3.5, 2.5 5.5, 4.5 7.5, 6.5 ").split(';'):
+
+ print("\nNumbers:", line)
+
+ numbers = [float(n) for n in re.split(r'[\s,]+', line.strip())]
+
+ mn, mx, sp = sparkline(numbers)
+
+ print(' min: %5f; max: %5f' % (mn, mx))
+ print(" " + sp)
+
diff --git a/challenge-179/luca-ferrari/blog-1.txt b/challenge-179/luca-ferrari/blog-1.txt new file mode 100644 index 0000000000..ece2925a72 --- /dev/null +++ b/challenge-179/luca-ferrari/blog-1.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task1 diff --git a/challenge-179/luca-ferrari/blog-2.txt b/challenge-179/luca-ferrari/blog-2.txt new file mode 100644 index 0000000000..456d0905ff --- /dev/null +++ b/challenge-179/luca-ferrari/blog-2.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task2 diff --git a/challenge-179/luca-ferrari/blog-3.txt b/challenge-179/luca-ferrari/blog-3.txt new file mode 100644 index 0000000000..a20ed84896 --- /dev/null +++ b/challenge-179/luca-ferrari/blog-3.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task1plperl diff --git a/challenge-179/luca-ferrari/blog-4.txt b/challenge-179/luca-ferrari/blog-4.txt new file mode 100644 index 0000000000..30a4ecbc8d --- /dev/null +++ b/challenge-179/luca-ferrari/blog-4.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task2plperl diff --git a/challenge-179/luca-ferrari/blog-5.txt b/challenge-179/luca-ferrari/blog-5.txt new file mode 100644 index 0000000000..75ef4f8453 --- /dev/null +++ b/challenge-179/luca-ferrari/blog-5.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task1plpgsql diff --git a/challenge-179/luca-ferrari/blog-6.txt b/challenge-179/luca-ferrari/blog-6.txt new file mode 100644 index 0000000000..7e8929e903 --- /dev/null +++ b/challenge-179/luca-ferrari/blog-6.txt @@ -0,0 +1 @@ +https://fluca1978.github.io/2022/08/22/PerlWeeklyChallenge179.html#task2plpgsql diff --git a/challenge-179/luca-ferrari/postgresql/ch-1.plperl b/challenge-179/luca-ferrari/postgresql/ch-1.plperl new file mode 100644 index 0000000000..f495dabed6 --- /dev/null +++ b/challenge-179/luca-ferrari/postgresql/ch-1.plperl @@ -0,0 +1,54 @@ +-- Perl Weekly Challenge 179 +-- Task 1 + +CREATE SCHEMA IF NOT EXISTS pwc179; + +CREATE OR REPLACE FUNCTION +pwc179.task1_plperl( int ) +RETURNS text +AS $CODE$ + my @units = qw/ + first + second + third + foruth + fifth + sixth + seventh + eigth + nineth + tenth + /; + + my @teens = qw / + eleven + twelve + thriteen + fourteen + fifteen + sixteen + seventeen + eigtheen + nineteen + /; + my @non_teens = qw/ + twenty + thirty + fourty + fifty + sixty + seventy + eighty + ninety + /; + + my ( $n ) = @_; + return 'Cannot spell' if ( $n >= 100 ); + return $units[ $n - 1 ] if ( $n <= 10 ); + return $teens[ ( $n - 1 ) % 10 ] if ( $n > 10 && $n < 20 ); + return $non_teens[ ( $n / 10 ) - 2 ] if ( $n >= 20 && $n % 10 == 0 ); + return $non_teens[ ( $n / 10 ) - 2 ] . $units[ ( $n % 10 ) - 1 ] if ( $n > 20 ); + + +$CODE$ +LANGUAGE plperl; diff --git a/challenge-179/luca-ferrari/postgresql/ch-1.sql b/challenge-179/luca-ferrari/postgresql/ch-1.sql new file mode 100644 index 0000000000..106916ec2c --- /dev/null +++ b/challenge-179/luca-ferrari/postgresql/ch-1.sql @@ -0,0 +1,79 @@ +-- Perl Weekly Challenge 179 +-- Task 1 + +CREATE SCHEMA IF NOT EXISTS pwc179; + +CREATE TABLE IF NOT EXISTS +pwc179.number2words +( + v int PRIMARY KEY + , t text +); + +TRUNCATE pwc179.number2words; + +INSERT INTO pwc179.number2words +VALUES + ( 1, 'first' ) +, ( 2, 'second' ) +, ( 3, 'third' ) +, ( 4, 'fourth' ) +, ( 5, 'fifth' ) +, ( 6, 'sixth' ) +, ( 7, 'seventh' ) +, ( 8, 'eigth' ) +, ( 9, 'nineth' ) +, ( 10, 'tenth' ) +, ( 11, 'eleventh' ) +, ( 12, 'twelveth' ) +, ( 13, 'thirteenth' ) +, ( 14, 'fourtineenth' ) +, ( 15, 'fifteenth' ) +, ( 16, 'sixteenth' ) +, ( 17, 'seventeenth' ) +, ( 18, 'eigthteenth' ) +, ( 19, 'nineteenth' ) +, ( 20, 'twentyth' ) +, ( 30, 'thirtyth' ) +, ( 40, 'fourtyth' ) +, ( 50, 'fiftyth' ) +, ( 60, 'sixtyth' ) +, ( 70, 'seventyth' ) +, ( 80, 'eightyth' ) +, ( 90, 'ninetyth' ); + + +CREATE OR REPLACE FUNCTION +pwc179.task1_plpgsql( n int ) +RETURNS TEXT +AS $CODE$ + +DECLARE + w text; + s text; +BEGIN + SELECT t + INTO w + FROM pwc179.number2words + WHERE v = n; + + IF FOUND THEN + RETURN w; + ELSE + -- not found, compose the word + SELECT t + INTO w + FROM pwc179.number2words + WHERE v = ( n / 10 )::int; + + SELECT t + INTO s + FROM pwc179.number2words + WHERE v = ( n % 10 )::int; + + RETURN replace( w, 'th', 'ty') || s; + END IF; +END + +$CODE$ +LANGUAGE plpgsql; diff --git a/challenge-179/luca-ferrari/postgresql/ch-2.plperl b/challenge-179/luca-ferrari/postgresql/ch-2.plperl new file mode 100644 index 0000000000..1a45a69416 --- /dev/null +++ b/challenge-179/luca-ferrari/postgresql/ch-2.plperl @@ -0,0 +1,28 @@ +-- Perl Weekly Challenge 179 +-- Task 2 + +CREATE SCHEMA IF NOT EXISTS pwc179; + +CREATE OR REPLACE FUNCTION +pwc179.task2_plperl( int[] ) +RETURNS text +AS $CODE$ + + my ($n) = shift; + my @n; + + my @symbols = map {chr($_)} (0x2581..0x2588); + + my ($min, $max) = (-1,-1); + + # compute min and max over the values + for my $current ( @$n ) { + $max = $current if ( $current > $max ); + $min = $current if ( $min == -1 || $current < $min ); + push @n, $current; + } + + my @graph = map { ( $_ - $min ) / ( $max - $min ) * scalar( @$n ) } @$n; + return join( '', @symbols[ @graph ] ); +$CODE$ +LANGUAGE plperl; diff --git a/challenge-179/luca-ferrari/postgresql/ch-2.sql b/challenge-179/luca-ferrari/postgresql/ch-2.sql new file mode 100644 index 0000000000..10e3b13341 --- /dev/null +++ b/challenge-179/luca-ferrari/postgresql/ch-2.sql @@ -0,0 +1,57 @@ +-- Perl Weekly Challenge 179 +-- Task 2 + +CREATE SCHEMA IF NOT EXISTS pwc179; + +CREATE TABLE IF NOT EXISTS pwc179.symbols +( + v int PRIMARY KEY + , s text +); + +TRUNCATE pwc179.symbols; + +INSERT INTO pwc179.symbols +VALUES +( 0, '▁') +,(1, '▁') +,(2,'▂') +,(3, '▃') +,(4, '▄') +,(5, '▅') +,(6, '▆') +,(7,'▇') +,(8, '█') +,(9, '█'); + + +CREATE OR REPLACE FUNCTION +pwc179.task2_plpgsql( n int[] ) +RETURNS text +AS $CODE$ +DECLARE + c int; + t text; + tt text; + scale_max int; + scale_min int; + scale_count int; +BEGIN + t := ''; + + SELECT min(v), max(v), count(v) + INTO scale_min, scale_max, scale_count + FROM pwc179.symbols; + + FOREACH c IN ARRAY n LOOP + SELECT s + INTO tt + FROM pwc179.symbols + WHERE v = ( ( c - scale_min ) / ( scale_max - scale_min ) ); + t := t || tt; + END LOOP; + + RETURN t; +END +$CODE$ +LANGUAGE plpgsql; diff --git a/challenge-179/luca-ferrari/raku/ch-1.p6 b/challenge-179/luca-ferrari/raku/ch-1.p6 new file mode 100755 index 0000000000..da58bbe2bb --- /dev/null +++ b/challenge-179/luca-ferrari/raku/ch-1.p6 @@ -0,0 +1,32 @@ +#!raku + +# Perl Weekly Challenge 179 + +sub MAIN( Int $n where { 0 < $n < 100 } ) { + + my @units = 'first', + 'second', + 'third', + 'foruth', + 'fifth', + 'sixth', + 'seventh', + 'eigth', + 'nineth', + 'tenth'; + + my @teens = 'eleven', 'twelve', 'thriteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', + 'eigtheen', 'nineteen'; + my @non-teens = 'twenty', 'thirty', 'fourty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'; + + given ( $n ) { + when $_ <= 10 { @units[ $n - 1 ].say; } + when $_ < 20 { @teens[ ( $n - 1 ) % 10 ].say; } + when $_ >= 20 { + say @non-teens[ ( $n / 10 ).Int - 2 ] + ~ ( $n %% 10 ?? '' !! @units[ ( $n % 10 ) - 1 ] ); + } + default { "Cannot spell $n".say; } + } + +} diff --git a/challenge-179/luca-ferrari/raku/ch-2.p6 b/challenge-179/luca-ferrari/raku/ch-2.p6 new file mode 100755 index 0000000000..d6fc43fb4d --- /dev/null +++ b/challenge-179/luca-ferrari/raku/ch-2.p6 @@ -0,0 +1,10 @@ +#!raku + +# Perl Weekly Challenge 179 + +sub MAIN( *@n where { @n.grep( * ~~ Int ).elems == @n.elems } ) { + my @symbols = '▁' ... '█'; + my ($min, $max) = @n.min, @n.max; + my @graph = @n.map: { ( $_ - $min ) / ( $max - $min ) * @n.elems }; + @symbols[ @graph ].join.say; +} diff --git a/challenge-179/roger-bell-west/javascript/ch-2.js b/challenge-179/roger-bell-west/javascript/ch-2.js new file mode 100755 index 0000000000..6c4838eed9 --- /dev/null +++ b/challenge-179/roger-bell-west/javascript/ch-2.js @@ -0,0 +1,35 @@ +#! /usr/bin/node + +"use strict" + +function sparkline(nn) { + let bar = []; + for (let bc = 9601; bc <= 9608; bc++) { + bar.push(String.fromCharCode(bc)); + } + let mn = Math.min(...nn); + let mx = Math.max(...nn); + let inscale = mx - mn; + let outscale = bar.length; + let out = ""; + for (let v of nn) { + let va = Math.min(Math.floor((v - mn) / inscale * outscale), + outscale - 1); + out += bar[va]; + } + return out; +} + +if (sparkline([0, 100]) == "▁█") { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write(" "); + +if (sparkline([1, 2, 3, 4, 5, 6, 7, 8]) == "▁▂▃▄▅▆▇█") { + process.stdout.write("Pass"); +} else { + process.stdout.write("FAIL"); +} +process.stdout.write("\n"); diff --git a/challenge-179/roger-bell-west/kotlin/ch-2.kt b/challenge-179/roger-bell-west/kotlin/ch-2.kt new file mode 100644 index 0000000000..d970b9aecf --- /dev/null +++ b/challenge-179/roger-bell-west/kotlin/ch-2.kt @@ -0,0 +1,34 @@ +fun sparkline(nn: List<Int>): String { + var bar = ArrayList<Char>(); + for (bc in 9601..9608) { + bar.add(bc.toChar()) + } + val mn = nn.minOrNull()!! + val mx = nn.maxOrNull()!! + val inscale = mx - mn + val outscale = bar.size + var out = "" + for (v in nn) { + var va = ((v-mn).toDouble()/inscale.toDouble() * outscale.toDouble()).toInt() + if (va > outscale - 1) { + va = outscale - 1 + } + out += bar[va] + } + return out +} + +fun main() { + if (sparkline(listOf(0,100)) == "▁█") { + print("Pass") + } else { + print("FAIL") + } + print(" ") + if (sparkline(listOf(1, 2, 3, 4, 5, 6, 7, 8)) == "▁▂▃▄▅▆▇█") { + print("Pass") + } else { + print("FAIL") + } + println("") +} diff --git a/challenge-179/roger-bell-west/lua/ch-2.lua b/challenge-179/roger-bell-west/lua/ch-2.lua new file mode 100755 index 0000000000..9225e21744 --- /dev/null +++ b/challenge-179/roger-bell-west/lua/ch-2.lua @@ -0,0 +1,35 @@ +#! /usr/bin/lua + +function sparkline(nn) + local bar = {} + for c = 0x2581, 0x2588 do + table.insert(bar, utf8.char(c)) + end + local mn = math.min(table.unpack(nn)) + local mx = math.max(table.unpack(nn)) + local inscale = mx - mn + local outscale = #bar + local out = "" + for k,v in pairs(nn) do + va = 1 + math.floor((v - mn) / inscale * outscale) + if va > outscale then + va = outscale + end + out = out .. bar[va] + end + return out +end + +if sparkline({0, 10}) == "▁█" then + io.write("Pass") +else + io.write("FAIL") +end +io.write(" ") + +if sparkline({1, 2, 3, 4, 5, 6, 7, 8}) == "▁▂▃▄▅▆▇█" then + io.write("Pass") +else + io.write("FAIL") +end +print("") diff --git a/challenge-179/roger-bell-west/perl/ch-1.pl b/challenge-179/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..9e762785e4 --- /dev/null +++ b/challenge-179/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,13 @@ +#! /usr/bin/perl + +use strict; +use warnings; +use experimental 'signatures'; + +use Lingua::EN::Numbers qw(num2en_ordinal); + +use Test::More tests => 3; + +is(num2en_ordinal(11),"eleventh",'example 1'); +is(num2en_ordinal(62),"sixty-second",'example 2'); +is(num2en_ordinal(99),"ninety-ninth",'example 3'); |
