diff options
| author | CY Fung <fungcheokyin@gmail.com> | 2022-07-21 05:21:21 +0800 |
|---|---|---|
| committer | CY Fung <fungcheokyin@gmail.com> | 2022-07-21 05:21:21 +0800 |
| commit | 57bfe0772b99880652ca06b9914ad55fee405749 (patch) | |
| tree | 6cc2cf7317d597ede3f128351e35191e292ec9ff | |
| parent | f448cdd65285d9ae08a2abdb58a87c80e7c1e0b5 (diff) | |
| download | perlweeklychallenge-club-57bfe0772b99880652ca06b9914ad55fee405749.tar.gz perlweeklychallenge-club-57bfe0772b99880652ca06b9914ad55fee405749.tar.bz2 perlweeklychallenge-club-57bfe0772b99880652ca06b9914ad55fee405749.zip | |
Task 1 NodeJS soln, Task 1 & 2 Perl soln
| -rw-r--r-- | challenge-174/cheok-yin-fung/node/ch-1.js | 29 | ||||
| -rw-r--r-- | challenge-174/cheok-yin-fung/perl/ch-1.pl | 31 | ||||
| -rw-r--r-- | challenge-174/cheok-yin-fung/perl/ch-2.pl | 62 |
3 files changed, 122 insertions, 0 deletions
diff --git a/challenge-174/cheok-yin-fung/node/ch-1.js b/challenge-174/cheok-yin-fung/node/ch-1.js new file mode 100644 index 0000000000..9259b4f334 --- /dev/null +++ b/challenge-174/cheok-yin-fung/node/ch-1.js @@ -0,0 +1,29 @@ +// The Weekly Challenge 174 +// Task 1 Disarium Numbers +// Node.js Solution + +let disar = 0; +for (let n=0; n < 9999999; n++) { + let total = 0; + for([i, v] of n.toString().split("").entries()) { + total += v**(i+1); + } + if (total === n) { + console.log(n); + disar++; + } + if (disar===19) {break;} +} + + +/* 0 to 9 +89 +135 +175 +518 +598 +1306 +1676 +2427 +2646798 +*/ diff --git a/challenge-174/cheok-yin-fung/perl/ch-1.pl b/challenge-174/cheok-yin-fung/perl/ch-1.pl new file mode 100644 index 0000000000..9ac06ce057 --- /dev/null +++ b/challenge-174/cheok-yin-fung/perl/ch-1.pl @@ -0,0 +1,31 @@ +#!/usr/bin/perl +# The Weekly Challenge 174 +# Task 1 Disarium Numbers +use v5.30.0; +use warnings; + +my $d = 0; +my $n = 0; +while ($d < 19) { + my @arr = split "", $n; + my $total = 0; + $total += $arr[$_]**($_+1) for 0..$#arr; + if ($total == $n) { + say $n; + $d++; + } + $n++; +} + +=pod +0 to 9 +89 +135 +175 +518 +598 +1306 +1676 +2427 +2646798 + diff --git a/challenge-174/cheok-yin-fung/perl/ch-2.pl b/challenge-174/cheok-yin-fung/perl/ch-2.pl new file mode 100644 index 0000000000..f0fb2df3e6 --- /dev/null +++ b/challenge-174/cheok-yin-fung/perl/ch-2.pl @@ -0,0 +1,62 @@ +# The Weekly Challenge 174 +# Task 2 Permutation Ranking +# O(n^2) solution, translation of Python code on +# https://tryalgo.org/en/permutations/2016/09/05/permutation-rank/ +use v5.30.0; +use warnings; +use List::Util qw/first/; + + + +sub factorial { + my $ans = 1; + for (1..$_[0]) { + $ans *= $_; + } + return $ans; +} + + + +sub permutation2rank { + my @list = $_[0]->@*; + my $n = scalar @list; + my $fact = factorial($n-1); + my $r = 0; + my @unused_list = sort {$a<=>$b} @list; + for my $i (0..$n-2) { + my $q = first { $unused_list[$_] == $list[$i] } 0..$#unused_list; + $r += $q*$fact; + splice @unused_list, $q, 1; + $fact = int $fact / ($n-$i-1); + } + return $r; +} + + + +sub rank2permutation { + my @list = $_[0]->@*; + my $r = $_[1]; + my $n = scalar @list; + my $fact = factorial($n-1); + my @unused_list = sort {$a<=>$b} @list; + my @p = (); + for my $i (0..$n-1) { + my $q = int $r / $fact; + $r %= $fact; + push @p, $unused_list[$q]; + splice @unused_list, $q, 1; + $fact = int $fact / ($n-1-$i) if $i != $n-1; + } + return [@p]; +} + + + +use Test::More tests=>3; +use Test::Deep; +ok permutation2rank([1,3,2,4,5]) == 6; +cmp_deeply rank2permutation([1,6,9],3), [6,9,1]; +ok permutation2rank([9,7,5,3,1]) == 119; + |
