From 5510a3b1a1e2f17fe73d0882fc24dd3e87234e46 Mon Sep 17 00:00:00 2001 From: Alexander Pankoff Date: Tue, 25 Jan 2022 12:56:54 +0100 Subject: Add solution for challenge 148 task 1 --- challenge-148/alexander-pankoff/perl/ch-1.pl | 40 ++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 challenge-148/alexander-pankoff/perl/ch-1.pl diff --git a/challenge-148/alexander-pankoff/perl/ch-1.pl b/challenge-148/alexander-pankoff/perl/ch-1.pl new file mode 100644 index 0000000000..824e05188c --- /dev/null +++ b/challenge-148/alexander-pankoff/perl/ch-1.pl @@ -0,0 +1,40 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use feature qw'say signatures'; +no warnings qw'experimental::signatures'; + +run() unless caller(); + +# Write a script to generate all Eban Numbers <= 100. +# +# An Eban number is a number that has no letter ā€˜e’ in it when the number is spelled in English (American or British). +# +# Example +# +# 2, 4, 6, 30, 32 are the first 5 Eban numbers. + +# one two three four five six seven eight nine ten eleven twelve thirteen +# ten twenty thirty fourty fifty sixty seventy eighty ninety + +sub run() { + say join( ", ", eban_numbers() ); +} + +sub eban_numbers { + my @eban = grep { is_eban($_) } 1 .. 100; + return @eban; + +} + +# only works for numbers up between 1 and 100 +sub is_eban($n) { + if ( length $n == 1 ) { + return grep { $n == $_ } qw(0 2 4 6); + } + if ( length $n == 2 ) { + my ( $n1, $n2 ) = split( '', $n ); + return ( grep { $n1 == $_ } qw{3 4 5 6} ) && is_eban($n2); + } + return 0; +} -- cgit