aboutsummaryrefslogtreecommitdiff
path: root/challenge-174
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2022-07-19 23:33:24 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2022-07-19 23:33:24 +0100
commitcbadb2c76098dbbf5f5d3a5e2cb73e46dd58adea (patch)
tree474590597eec94e9f005fbd4cb7d9730bb663348 /challenge-174
parent34b4535feb8f28d524db90f36f17af1b81c99269 (diff)
downloadperlweeklychallenge-club-cbadb2c76098dbbf5f5d3a5e2cb73e46dd58adea.tar.gz
perlweeklychallenge-club-cbadb2c76098dbbf5f5d3a5e2cb73e46dd58adea.tar.bz2
perlweeklychallenge-club-cbadb2c76098dbbf5f5d3a5e2cb73e46dd58adea.zip
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-174')
-rw-r--r--challenge-174/laurent-rosenfeld/awk/ch-1.awk23
-rw-r--r--challenge-174/laurent-rosenfeld/bc/ch-1.bc22
-rw-r--r--challenge-174/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-174/laurent-rosenfeld/c/ch-1.c36
-rw-r--r--challenge-174/laurent-rosenfeld/julia/ch-1.jl14
-rw-r--r--challenge-174/laurent-rosenfeld/perl/ch-1.pl18
-rw-r--r--challenge-174/laurent-rosenfeld/python/ch-1.py17
-rw-r--r--challenge-174/laurent-rosenfeld/raku/ch-1.raku12
8 files changed, 143 insertions, 0 deletions
diff --git a/challenge-174/laurent-rosenfeld/awk/ch-1.awk b/challenge-174/laurent-rosenfeld/awk/ch-1.awk
new file mode 100644
index 0000000000..1b1cc37279
--- /dev/null
+++ b/challenge-174/laurent-rosenfeld/awk/ch-1.awk
@@ -0,0 +1,23 @@
+function is_disarium(num) {
+ n = num
+ sum = 0
+ len = length(n)
+ while (n > 0) {
+ sum += (n % 10) ^ len
+ n = int(n/10)
+ len--
+ }
+ return (sum == num)
+}
+
+BEGIN {
+ count = 0
+ i = 0
+ while (count < 19) {
+ if (is_disarium(i)) {
+ printf("%d\n", i)
+ count++
+ }
+ i++
+ }
+}
diff --git a/challenge-174/laurent-rosenfeld/bc/ch-1.bc b/challenge-174/laurent-rosenfeld/bc/ch-1.bc
new file mode 100644
index 0000000000..0b51683e3b
--- /dev/null
+++ b/challenge-174/laurent-rosenfeld/bc/ch-1.bc
@@ -0,0 +1,22 @@
+define is_disarium (num) {
+ n = num
+ sum = 0
+ len = length(n)
+ while (n > 0) {
+ sum += (n % 10) ^ len
+ n = n/10
+ len -= 1
+ }
+ return (sum == num)
+}
+
+count = 0
+i = 0
+while (count < 19) {
+ if (is_disarium(i)) {
+ print i, "\n"
+ count += 1
+ }
+ i += 1
+}
+quit
diff --git a/challenge-174/laurent-rosenfeld/blog.txt b/challenge-174/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..b625ad10ec
--- /dev/null
+++ b/challenge-174/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+http://blogs.perl.org/users/laurent_r/2022/07/perl-weekly-challenge-174-disarium-numbers-and-permutation-rankings.html
diff --git a/challenge-174/laurent-rosenfeld/c/ch-1.c b/challenge-174/laurent-rosenfeld/c/ch-1.c
new file mode 100644
index 0000000000..813b22c6f9
--- /dev/null
+++ b/challenge-174/laurent-rosenfeld/c/ch-1.c
@@ -0,0 +1,36 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+int power (int base, int exponent) {
+ int result = 1;
+ for (int i = 1; i <= exponent; i++) {
+ result *= base;
+ }
+ return result;
+}
+
+int is_disarium (int num) {
+ int n = num;
+ int sum = 0;
+ int len = n <= 9 ? 1 : floor(log10(n)) + 1;
+ while (n > 0) {
+ sum += power(n % 10, len);
+ n /= 10;
+ len--;
+ }
+
+ return num == sum;
+}
+
+int main() {
+ int count = 0;
+ int i = 0;
+ while (count < 19) {
+ if (is_disarium(i)) {
+ printf("%d\n", i);
+ count++;
+ }
+ i++;
+ }
+}
diff --git a/challenge-174/laurent-rosenfeld/julia/ch-1.jl b/challenge-174/laurent-rosenfeld/julia/ch-1.jl
new file mode 100644
index 0000000000..a7a1c3110c
--- /dev/null
+++ b/challenge-174/laurent-rosenfeld/julia/ch-1.jl
@@ -0,0 +1,14 @@
+function is_disarium(n)
+ s = sum(i ^ p for (p, i) in enumerate(reverse(digits(n))))
+ return s == n
+end
+
+count = 0
+i = 0
+while count < 19
+ if is_disarium(i)
+ println(i)
+ global count += 1
+ end
+ global i += 1
+end
diff --git a/challenge-174/laurent-rosenfeld/perl/ch-1.pl b/challenge-174/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..8c2c0ce4eb
--- /dev/null
+++ b/challenge-174/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,18 @@
+use strict;
+use warnings;
+use feature "say";
+
+sub is_disarium {
+ my $num = shift;
+ my @digits = split '', $num;
+ my $i = 1;
+ my $sum = 0;
+ $sum += $_ for map { $_ ** $i++ } @digits;
+ return $num == $sum;
+}
+my $i = 0;
+my $count = 0;
+while ($count < 19) {
+ say $i and $count++ if is_disarium $i;
+ $i++;
+}
diff --git a/challenge-174/laurent-rosenfeld/python/ch-1.py b/challenge-174/laurent-rosenfeld/python/ch-1.py
new file mode 100644
index 0000000000..476c6831e6
--- /dev/null
+++ b/challenge-174/laurent-rosenfeld/python/ch-1.py
@@ -0,0 +1,17 @@
+def is_disarium(num):
+ n = num
+ size = len(str(n))
+ sum = 0
+ while n > 0:
+ sum += (n % 10) ** size
+ n //= 10
+ size -= 1
+ return sum == num
+
+i = 0
+count = 0
+while count < 19:
+ if is_disarium(i):
+ print(i)
+ count += 1
+ i += 1
diff --git a/challenge-174/laurent-rosenfeld/raku/ch-1.raku b/challenge-174/laurent-rosenfeld/raku/ch-1.raku
new file mode 100644
index 0000000000..171bebd568
--- /dev/null
+++ b/challenge-174/laurent-rosenfeld/raku/ch-1.raku
@@ -0,0 +1,12 @@
+sub is-disarium($num) {
+ my @digits = $num.comb;
+ my $sum = [+] map { $^b ** ($^a + 1) }, @digits.kv;
+ return $num == $sum;
+}
+my $count = 0;
+my $i = 0;
+while $count < 19 {
+ ++$count and say $i if is-disarium($i);
+ $i++;
+ # say "i: $i";
+}