diff options
| -rw-r--r-- | challenge-147/lubos-kolouch/python/ch-1.py | 20 | ||||
| -rw-r--r-- | challenge-147/lubos-kolouch/python/ch-2.py | 26 | ||||
| -rw-r--r-- | challenge-148/lubos-kolouch/perl/ch-1.pl | 63 | ||||
| -rw-r--r-- | challenge-148/lubos-kolouch/perl/ch-2.pl | 31 | ||||
| -rw-r--r-- | challenge-148/lubos-kolouch/python/ch-1.py | 53 | ||||
| -rw-r--r-- | challenge-148/lubos-kolouch/python/ch-2.py | 22 |
6 files changed, 215 insertions, 0 deletions
diff --git a/challenge-147/lubos-kolouch/python/ch-1.py b/challenge-147/lubos-kolouch/python/ch-1.py new file mode 100644 index 0000000000..49e8c707d2 --- /dev/null +++ b/challenge-147/lubos-kolouch/python/ch-1.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from sympy import isprime + + +def left_truncatable_primes(n): + primes = [] + queue = list(map(str, range(1, 10))) # we start from single-digit primes + while len(primes) < n: + num_str = queue.pop(0) + if isprime(int(num_str)): + primes.append(int(num_str)) + # adding digits to the end to try to form the next primes + for i in range(10): + queue.append(num_str + str(i)) + return primes[:n] + + +print(left_truncatable_primes(20)) diff --git a/challenge-147/lubos-kolouch/python/ch-2.py b/challenge-147/lubos-kolouch/python/ch-2.py new file mode 100644 index 0000000000..bd1577bd45 --- /dev/null +++ b/challenge-147/lubos-kolouch/python/ch-2.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import math + + +def is_pentagonal(num): + return (math.sqrt(24 * num + 1) + 1) % 6 == 0 + + +def pentagonal_numbers(): + index = 1 + pentagonal_nums = [] + while True: + pentagonal_num = index * (3 * index - 1) // 2 + pentagonal_nums.append(pentagonal_num) + for j in range(index - 1, 0, -1): + if is_pentagonal(pentagonal_num - pentagonal_nums[j - 1]) and is_pentagonal( + pentagonal_num + pentagonal_nums[j - 1] + ): + return pentagonal_nums[j - 1], pentagonal_num + index += 1 + + +pair = pentagonal_numbers() +print(f"Pair of Pentagon Numbers: {pair[0]}, {pair[1]}") 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)) |
