diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-07-13 19:35:20 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-13 19:35:20 +0100 |
| commit | 3f99799ed05fca680eed2faa9a1e1a168f67fac0 (patch) | |
| tree | 059f41be1d35750e36d3d95c37aff45c6996b0ab | |
| parent | 29b45dc080e1a5d10e6211710d5975c4fdde2928 (diff) | |
| parent | 8e85b42e5756a505e07749b924195f26b624dc68 (diff) | |
| download | perlweeklychallenge-club-3f99799ed05fca680eed2faa9a1e1a168f67fac0.tar.gz perlweeklychallenge-club-3f99799ed05fca680eed2faa9a1e1a168f67fac0.tar.bz2 perlweeklychallenge-club-3f99799ed05fca680eed2faa9a1e1a168f67fac0.zip | |
Merge pull request #1940 from wanderdoc/master
Solutions to challenge-069.
| -rw-r--r-- | challenge-069/wanderdoc/perl/ch-1.pl | 61 | ||||
| -rw-r--r-- | challenge-069/wanderdoc/perl/ch-2.pl | 38 |
2 files changed, 99 insertions, 0 deletions
diff --git a/challenge-069/wanderdoc/perl/ch-1.pl b/challenge-069/wanderdoc/perl/ch-1.pl new file mode 100644 index 0000000000..39fdf4a1d5 --- /dev/null +++ b/challenge-069/wanderdoc/perl/ch-1.pl @@ -0,0 +1,61 @@ +#!perl +use strict; +use warnings FATAL => qw(all); + +=prompt +A strobogrammatic number is a number that looks the same when looked at upside down. +You are given two positive numbers $A and $B such that 1 <= $A <= $B <= 10^15. +Write a script to print all strobogrammatic numbers between the given two numbers. +Example +Input: $A = 50, $B = 100 +Output: 69, 88, 96 +=cut + + +my $cnt = 1; + +my $start = shift || 50; +my $end = shift || 10**10; # 10**15; +my $number = $start; +while ( $number <= $end ) +{ + if ( $number =~ /[23457]/ ) + { + while ( $number =~ /[23457]/ ) + { + + my @num_array = split(//,$number); + @num_array = map { + my $digit = $_; + if ( $digit =~ /[23457]/ ) + { + $digit++; + }; + $digit; } + @num_array; + $number = join('', @num_array); + } + } + + + elsif ( $number =~ /0$/ ) + { + $number++; + + } + else + { + print join(": ", $cnt++, $number), $/ if ( $number == make_sgn($number)); + + $number++; + } +} +# 4_995 numbers if $start == 50 and $end == 10**10. +sub make_sgn +{ + my $str = $_[0]; + $str = reverse $str; + + $str =~ tr/69/96/; + return $str; +}
\ No newline at end of file diff --git a/challenge-069/wanderdoc/perl/ch-2.pl b/challenge-069/wanderdoc/perl/ch-2.pl new file mode 100644 index 0000000000..9d123cf484 --- /dev/null +++ b/challenge-069/wanderdoc/perl/ch-2.pl @@ -0,0 +1,38 @@ +#!perl +use strict; +use warnings FATAL => qw(all); + +=prompt +A “0/1 string” is a string in which every character is either 0 or 1. +Write a script to perform switch and reverse to generate S1000 as described below: + +switch: Every 0 becomes 1 and every 1 becomes 0. For example, “101” becomes “010”. +reverse: The string is reversed. For example, "001” becomes “100”. + +To generate S1000 string, please follow the rule as below: + +S0 = “” +S1 = “0” +S2 = “001” +S3 = “0010011” +… +SN = SN-1 + “0” + switch(reverse(SN-1)) + +=cut + +my $string = ''; +my $counter = 0; + + +while ( $counter < 30 ) +{ + my $new_part = switch(scalar reverse($string)); + $string .= '0'; + $string .= $new_part; + printf("S%02d: %10d$/", ++$counter, length($string)); +} +# print $string, $/; # length($string) = 1_073_741_823. +sub switch +{ + my $str = $_[0]; $str =~ tr/01/10/; return $str; +} |
