aboutsummaryrefslogtreecommitdiff
path: root/challenge-107
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-04-12 01:52:12 +0100
committerGitHub <noreply@github.com>2021-04-12 01:52:12 +0100
commitee3b89e38878a17ff678323b3bcd4036dcfdf346 (patch)
tree071d2c0cd1d5ae98a21d8aba346fffebf4105972 /challenge-107
parentfad6fd8049bbaa0b2c36e4eabffe069441891b5b (diff)
parentafac06bf3918be02ba7a6c1410464177deee4f0a (diff)
downloadperlweeklychallenge-club-ee3b89e38878a17ff678323b3bcd4036dcfdf346.tar.gz
perlweeklychallenge-club-ee3b89e38878a17ff678323b3bcd4036dcfdf346.tar.bz2
perlweeklychallenge-club-ee3b89e38878a17ff678323b3bcd4036dcfdf346.zip
Merge pull request #3872 from jaldhar/challenge-107
Challenge 107 by Jaldhar H. Vyas
Diffstat (limited to 'challenge-107')
-rw-r--r--challenge-107/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-107/jaldhar-h-vyas/perl/ch-1.pl70
-rwxr-xr-xchallenge-107/jaldhar-h-vyas/perl/ch-2.pl20
-rwxr-xr-xchallenge-107/jaldhar-h-vyas/raku/ch-1.raku47
-rwxr-xr-xchallenge-107/jaldhar-h-vyas/raku/ch-2.raku16
5 files changed, 154 insertions, 0 deletions
diff --git a/challenge-107/jaldhar-h-vyas/blog.txt b/challenge-107/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..c55ca55aff
--- /dev/null
+++ b/challenge-107/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2021/04/perl_weekly_challenge_week_107.html
diff --git a/challenge-107/jaldhar-h-vyas/perl/ch-1.pl b/challenge-107/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..fa6b833238
--- /dev/null
+++ b/challenge-107/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,70 @@
+#!/usr/bin/perl
+use 5.020;
+use warnings;
+
+sub base {
+ my ($number, $base) = @_;
+ my @digits = (0 .. 9, 'A' .. 'Z');
+ my @result;
+ while ($number > ($base - 1)) {
+ my $digit = $number % $base;
+ push @result, $digits[$digit];
+ $number /= $base;
+ }
+ push @result, $digits[$number];
+
+ return join '', reverse @result;
+}
+
+sub is_harshad {
+ my ($n) = @_;
+ my $total = 0;
+ my @digits = split //, $n;
+ for my $digit (@digits) {
+ $total += $digit;
+ }
+
+ return @digits == $total;
+}
+
+sub is_sdn {
+ my ($n) = @_;
+
+ if (!is_harshad($n)) {
+ return undef;
+ }
+
+ my @digits = split //, $n;
+
+ my %count;
+ for my $i (0 .. scalar @digits - 1) {
+ $count{ $digits[$i] }++;
+ }
+
+ for my $i (0 .. scalar @digits - 1) {
+ if (!exists $count{$i}) {
+ next;
+ }
+ if ($count{$i} != $digits[$i]) {
+ return undef;
+ }
+ }
+
+ return 1;
+}
+
+my @sdns;
+
+for my $base (4 .. 5) {
+ for my $i (10 ** ($base - 2) .. 10 ** ($base - 1) - 1) {
+ my $n = base($i, $base);
+ if (is_sdn($n)) {
+ push @sdns, $n;
+ }
+ if (scalar @sdns == 3) {
+ last;
+ }
+ }
+}
+
+say join q{, }, @sdns; \ No newline at end of file
diff --git a/challenge-107/jaldhar-h-vyas/perl/ch-2.pl b/challenge-107/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..dfc410e6fb
--- /dev/null
+++ b/challenge-107/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,20 @@
+#!/usr/bin/perl
+
+package Calc
+{
+ use strict;
+ use warnings;
+
+ sub new { bless {}, shift; }
+ sub add { }
+ sub mul { }
+ sub div { }
+ 1;
+}
+package main;
+use 5.020;
+use warnings;
+
+for my $key (sort keys %Calc::) {
+ say $key;
+} \ No newline at end of file
diff --git a/challenge-107/jaldhar-h-vyas/raku/ch-1.raku b/challenge-107/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..5c001f5ddc
--- /dev/null
+++ b/challenge-107/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,47 @@
+#!/usr/bin/raku
+
+sub is_harshad(Str $n) {
+ return $n % $n.comb.sum == 0;
+}
+
+sub is_sdn(Str $n) {
+ if !is_harshad($n) {
+ return False;
+ }
+
+ my @digits = $n.comb;
+
+ my %count;
+ for 0 ..^ @digits.elems -> $i {
+ %count{ @digits[$i] }++;
+ }
+
+ for 0 ..^ @digits.elems -> $i {
+ if %count{$i}:!exists {
+ next;
+ }
+ if %count{$i} != @digits[$i] {
+ return False;
+ }
+ }
+
+ return True;
+}
+
+sub MAIN() {
+ my @sdns;
+
+ for 4 .. 5 -> $base {
+ for 10 ** ($base - 2) ..^ 10 ** ($base - 1) -> $i {
+ my $n = $i.base($base);
+ if is_sdn($n) {
+ @sdns.push($n);
+ }
+ if (@sdns.elems == 3) {
+ last;
+ }
+ }
+ }
+
+ @sdns.join(q{, }).say;
+} \ No newline at end of file
diff --git a/challenge-107/jaldhar-h-vyas/raku/ch-2.raku b/challenge-107/jaldhar-h-vyas/raku/ch-2.raku
new file mode 100755
index 0000000000..7ae9ee4dd8
--- /dev/null
+++ b/challenge-107/jaldhar-h-vyas/raku/ch-2.raku
@@ -0,0 +1,16 @@
+#!/usr/bin/raku
+
+class Calc
+{
+ method new { }
+ method add { }
+ method mul { }
+ method div { }
+}
+
+sub MAIN(
+) {
+ for Calc.^methods -> $method {
+ say $method;
+ }
+} \ No newline at end of file