aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubos Kolouch <lubos@kolouch.net>2023-07-08 16:05:01 +0200
committerLubos Kolouch <lubos@kolouch.net>2023-07-08 16:05:01 +0200
commit78e5c329fe663736c2ebc443037253d2fe8bdaac (patch)
tree02566dda31d0263cbd12855a5211958f4f9d6097
parentd3821609694b5df45981b134d2bc8671743247d7 (diff)
downloadperlweeklychallenge-club-78e5c329fe663736c2ebc443037253d2fe8bdaac.tar.gz
perlweeklychallenge-club-78e5c329fe663736c2ebc443037253d2fe8bdaac.tar.bz2
perlweeklychallenge-club-78e5c329fe663736c2ebc443037253d2fe8bdaac.zip
feat(challenge-148/lubos-kolouch/perl,python/): Challenge 148 LK Perl Python
-rw-r--r--challenge-148/lubos-kolouch/perl/ch-1.pl63
-rw-r--r--challenge-148/lubos-kolouch/perl/ch-2.pl31
-rw-r--r--challenge-148/lubos-kolouch/python/ch-1.py53
-rw-r--r--challenge-148/lubos-kolouch/python/ch-2.py22
4 files changed, 169 insertions, 0 deletions
diff --git a/challenge-148/lubos-kolouch/perl/ch-1.pl b/challenge-148/lubos-kolouch/perl/ch-1.pl
new file mode 100644
index 0000000000..0d95e4a76f
--- /dev/null
+++ b/challenge-148/lubos-kolouch/perl/ch-1.pl
@@ -0,0 +1,63 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+sub generate_eban_numbers {
+ my $limit = shift;
+
+ my %words = (
+ 1 => 'one',
+ 2 => 'two',
+ 3 => 'three',
+ 4 => 'four',
+ 5 => 'five',
+ 6 => 'six',
+ 7 => 'seven',
+ 8 => 'eight',
+ 9 => 'nine',
+ 10 => 'ten',
+ 11 => 'eleven',
+ 12 => 'twelve',
+ 13 => 'thirteen',
+ 14 => 'fourteen',
+ 15 => 'fifteen',
+ 16 => 'sixteen',
+ 17 => 'seventeen',
+ 18 => 'eighteen',
+ 19 => 'nineteen',
+ 20 => 'twenty',
+ 30 => 'thirty',
+ 40 => 'forty',
+ 50 => 'fifty',
+ 60 => 'sixty',
+ 70 => 'seventy',
+ 80 => 'eighty',
+ 90 => 'ninety',
+ 100 => 'one hundred'
+ );
+
+ my @eban_numbers;
+ for my $num ( 1 .. $limit ) {
+ my $word;
+ if ( $num <= 20 || $num == 100 ) {
+ $word = $words{$num};
+ }
+ elsif ( $num < 100 ) {
+ $word = $words{ int( $num / 10 ) * 10 } . " " . $words{ $num % 10 };
+ }
+ else {
+ $word =
+ $words{ int( $num / 100 ) } . " "
+ . $words{100} . " "
+ . $words{ $num % 100 };
+ }
+
+ if ( $word !~ /e/ ) {
+ push @eban_numbers, $num;
+ }
+ }
+
+ return @eban_numbers;
+}
+
+print join( ", ", generate_eban_numbers(100) );
diff --git a/challenge-148/lubos-kolouch/perl/ch-2.pl b/challenge-148/lubos-kolouch/perl/ch-2.pl
new file mode 100644
index 0000000000..a27727f53f
--- /dev/null
+++ b/challenge-148/lubos-kolouch/perl/ch-2.pl
@@ -0,0 +1,31 @@
+use strict;
+use warnings;
+use Math::Complex;
+
+sub generate_cardano_triplets {
+ my $n = shift;
+ my @triplets;
+ my $a = 1;
+
+ while ( @triplets < $n ) {
+ for my $b ( 0 .. $a ) {
+ next unless $b % 2 == 0; # b is even
+ for my $c ( 1 .. $a ) {
+ next unless $c % 2 != 0; # c is odd
+ my $val = cbrt( $a + $b * $c**2 ) + cbrt( $a - $b * $c**2 );
+ if ( abs( $val - 1 ) < 1e-10 ) {
+ push @triplets, [ $a, $b, $c ];
+ last if @triplets == $n;
+ }
+ }
+ }
+ $a += 2; # a is odd
+ }
+
+ return @triplets;
+}
+
+my @triplets = generate_cardano_triplets(5);
+for my $triplet (@triplets) {
+ print join( ", ", @$triplet ), "\n";
+}
diff --git a/challenge-148/lubos-kolouch/python/ch-1.py b/challenge-148/lubos-kolouch/python/ch-1.py
new file mode 100644
index 0000000000..776d87d20f
--- /dev/null
+++ b/challenge-148/lubos-kolouch/python/ch-1.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+def generate_eban_numbers(limit):
+ words = {
+ 1: "one",
+ 2: "two",
+ 3: "three",
+ 4: "four",
+ 5: "five",
+ 6: "six",
+ 7: "seven",
+ 8: "eight",
+ 9: "nine",
+ 10: "ten",
+ 11: "eleven",
+ 12: "twelve",
+ 13: "thirteen",
+ 14: "fourteen",
+ 15: "fifteen",
+ 16: "sixteen",
+ 17: "seventeen",
+ 18: "eighteen",
+ 19: "nineteen",
+ 20: "twenty",
+ 30: "thirty",
+ 40: "forty",
+ 50: "fifty",
+ 60: "sixty",
+ 70: "seventy",
+ 80: "eighty",
+ 90: "ninety",
+ 100: "one hundred",
+ }
+
+ eban_numbers = []
+ for num in range(1, limit + 1):
+ if num <= 20 or num == 100:
+ word = words[num]
+ elif num < 100:
+ if num % 10 == 0:
+ word = words[num]
+ else:
+ word = words[num // 10 * 10] + " " + words[num % 10]
+ else:
+ word = words[num // 100] + " " + words[100] + " " + words[num % 100]
+
+ if "e" not in word:
+ eban_numbers.append(num)
+
+ return eban_numbers
+
+
+print(generate_eban_numbers(100))
diff --git a/challenge-148/lubos-kolouch/python/ch-2.py b/challenge-148/lubos-kolouch/python/ch-2.py
new file mode 100644
index 0000000000..6b72d78044
--- /dev/null
+++ b/challenge-148/lubos-kolouch/python/ch-2.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import cmath
+
+
+def generate_cardano_triplets(n):
+ triplets = []
+ a = 1
+ while len(triplets) < n:
+ for b in range(0, a, 2): # b is even
+ for c in range(1, a, 2): # c is odd
+ val = (a + b * c**2) ** (1 / 3) + (a - b * c**2) ** (1 / 3)
+ if abs(val.real - 1) < 1e-10 and abs(val.imag) < 1e-10:
+ triplets.append((a, b, c))
+ if len(triplets) == n:
+ return triplets
+ a += 2 # a is odd
+ return triplets
+
+
+print(generate_cardano_triplets(5))