diff options
| author | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2024-10-07 23:28:47 +0100 |
|---|---|---|
| committer | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2024-10-07 23:28:47 +0100 |
| commit | cf2dbf376ff18f6927327e27e4e2cee16295ab88 (patch) | |
| tree | 0251e248497f7f4ae63c6faa389f286976c9cee7 | |
| parent | 9b5af89cb0d8d882b42981ab999e29af04b6134b (diff) | |
| download | perlweeklychallenge-club-cf2dbf376ff18f6927327e27e4e2cee16295ab88.tar.gz perlweeklychallenge-club-cf2dbf376ff18f6927327e27e4e2cee16295ab88.tar.bz2 perlweeklychallenge-club-cf2dbf376ff18f6927327e27e4e2cee16295ab88.zip | |
- Added solutions by Eric Cheung.
- Added solutions by Ulrich Rieke.
- Added solutions by PokGoPun.
- Added solutions by Matthias Muth.
- Added solutions by E. Choroba.
- Added solutions by Lubos Kolouch.
- Added solutions by Luca Ferrari.
- Added solutions by Peter Pentchev.
- Added solutions by Conor Hoekstra.
- Added solutions by Peter Campbell Smith.
- Added solutions by David Ferrone.
35 files changed, 3714 insertions, 3143 deletions
diff --git a/challenge-290/eric-cheung/python/ch-1.py b/challenge-290/eric-cheung/python/ch-1.py new file mode 100755 index 0000000000..7dbc4d7262 --- /dev/null +++ b/challenge-290/eric-cheung/python/ch-1.py @@ -0,0 +1,19 @@ +
+from itertools import combinations
+
+def IsDoubleExist (arrInput):
+ return arrInput[0] == 2 * arrInput[1]
+
+## arrInts = [6, 2, 3, 3] ## Example 1
+## arrInts = [3, 1, 4, 13] ## Example 2
+arrInts = [2, 1, 4, 2] ## Example 3
+
+arrCombList = combinations(arrInts, 2)
+
+bFlag = False
+for arrLoop in list(arrCombList):
+ if IsDoubleExist (arrLoop):
+ bFlag = True
+ break
+
+print (bFlag)
diff --git a/challenge-290/eric-cheung/python/ch-2.py b/challenge-290/eric-cheung/python/ch-2.py new file mode 100755 index 0000000000..1812e04fba --- /dev/null +++ b/challenge-290/eric-cheung/python/ch-2.py @@ -0,0 +1,14 @@ +
+def GetSumDigits (nInput):
+ return sum([int(strDigit) for strDigit in str(nInput)])
+
+## strInput = "17893729974" ## Example 1
+## strInput = "4137 8947 1175 5904" ## Example 2
+strInput = "4137 8974 1175 5904" ## Example 3
+
+strInputRev = "".join([strLoop for strLoop in strInput if strLoop.isdigit()])
+
+nPayLoad = int(strInputRev[-1])
+nSum = sum([GetSumDigits(int(strLoop) * (2 if nIndx % 2 == 0 else 1)) for nIndx, strLoop in enumerate(strInputRev[:-1][::-1])])
+
+print ((nSum + nPayLoad) % 10 == 0)
diff --git a/challenge-290/ulrich-rieke/cpp/ch-1.cpp b/challenge-290/ulrich-rieke/cpp/ch-1.cpp new file mode 100755 index 0000000000..5256cd8161 --- /dev/null +++ b/challenge-290/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,39 @@ +#include <iostream>
+#include <string>
+#include <sstream>
+#include <vector>
+
+std::vector<std::string> split( const std::string & text , char delimiter ) {
+ std::vector<std::string> tokens ;
+ std::istringstream istr { text } ;
+ std::string word ;
+ while ( std::getline( istr , word , delimiter )) {
+ tokens.push_back( word ) ;
+ }
+ return tokens ;
+}
+
+int main( ) {
+ std::cout << "Enter some integers, separated by blanks!\n" ;
+ std::string line ;
+ std::getline( std::cin , line ) ;
+ auto tokens { split( line , ' ' ) } ;
+ std::vector<int> numbers ;
+ for ( auto v : tokens )
+ numbers.push_back( std::stoi( v ) ) ;
+ int len = numbers.size( ) ;
+ bool result = false ;
+ for ( int i = 0 ; i < len - 1 ; i++ ) {
+ if ( numbers[i] > 1 ) {
+ for ( int j = i + 1 ; j < len ; j++ ) {
+ if ( numbers[i] == 2 * numbers[j] ) {
+ result = true ;
+ break ;
+ }
+ }
+ }
+ }
+ std::cout << std::boolalpha << result << '\n' ;
+ return 0 ;
+}
+
diff --git a/challenge-290/ulrich-rieke/cpp/ch-2.cpp b/challenge-290/ulrich-rieke/cpp/ch-2.cpp new file mode 100755 index 0000000000..7d2719a20e --- /dev/null +++ b/challenge-290/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,52 @@ +#include <iostream>
+#include <string>
+#include <algorithm>
+#include <regex>
+#include <vector>
+#include <numeric>
+
+int digitsum( int number ) {
+ int sum = 0 ;
+ while ( number != 0 ) {
+ sum += number % 10 ;
+ number /= 10 ;
+ }
+ return sum ;
+}
+
+int main( ) {
+ std::cout << "Enter a term consisting of digits only!\n" ;
+ std::string term ;
+ std::getline( std::cin , term ) ;
+ std::reverse( term.begin( ) , term.end( ) ) ;
+ int payload = std::stoi(term.substr( 0 , 1 )) ;
+ int count = 1 ;
+ std::vector<int> sums ;
+ std::string num_pattern = "\\d" ;
+ auto numberpattern = std::regex( num_pattern ) ;
+ for ( int i = 1 ; i < term.length( ) ; i++ ) {
+ if ( std::regex_match( term.substr( i , 1 ) , numberpattern ) ) {
+ int number = std::stoi(term.substr( i , 1 )) ;
+ if ( count % 2 == 1 ) {
+ int localsum = 2 * number ;
+ if ( localsum < 10 ) {
+ sums.push_back( localsum ) ;
+ }
+ else {
+ int the_sum = digitsum( localsum ) ;
+ sums.push_back( the_sum ) ;
+ }
+ }
+ else {
+ sums.push_back( number ) ;
+ }
+ count++ ;
+ }
+ }
+ int totalsum = std::accumulate( sums.begin( ) , sums.end( ) , 0 ) ;
+ std::cout << std::boolalpha << ((( totalsum + payload ) % 10) == 0) <<
+ '\n' ;
+ return 0 ;
+}
+
+
diff --git a/challenge-290/ulrich-rieke/haskell/ch-1.hs b/challenge-290/ulrich-rieke/haskell/ch-1.hs new file mode 100755 index 0000000000..0059d553fe --- /dev/null +++ b/challenge-290/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,19 @@ +module Challenge290
+ where
+import Data.List ((!!))
+
+makePairs :: [Int] ->[(Int , Int)]
+makePairs list = [(list !! i , list !! j) | i <- [0..l - 2] , j <- [i + 1 ..
+ l - 1]]
+ where
+ l = length list
+
+solution :: [Int] -> Bool
+solution list = any (\p -> fst p == (2 * ( snd p )) ) $ makePairs list
+
+main :: IO ( )
+main = do
+ putStrLn "Enter some integers separated by blanks!"
+ numberline <- getLine
+ print $ solution $ map read $ words numberline
+
diff --git a/challenge-290/ulrich-rieke/haskell/ch-2.hs b/challenge-290/ulrich-rieke/haskell/ch-2.hs new file mode 100755 index 0000000000..4bf235c943 --- /dev/null +++ b/challenge-290/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,31 @@ +module Challenge290_2
+ where
+import Data.Char ( isDigit , digitToInt , isSpace )
+import Data.List ( tail )
+
+digitSum :: Int -> Int
+digitSum = sum . map digitToInt . show
+
+findSums :: String -> Int
+findSums term = sum $ map myFunction $ zip [1,2..] (filter isDigit term )
+ where
+ myFunction :: (Int , Char ) -> Int
+ myFunction ( i , c )
+ |even i = digitToInt c
+ |otherwise = if mySum < 10 then mySum else digitSum mySum
+ where
+ mySum = 2 * ( digitToInt c )
+
+luhnCheck :: String -> Bool
+luhnCheck numberterm =
+ let condensed = filter ( not . isSpace ) numberterm
+ reversed = reverse condensed
+ payload = digitToInt $ head reversed
+ totalsum = findSums $ tail reversed
+ in mod (totalsum + payload) 10 == 0
+
+main :: IO ( )
+main = do
+ putStrLn "Enter a string consisting of numbers only!"
+ number <- getLine
+ print $ luhnCheck number
diff --git a/challenge-290/ulrich-rieke/perl/ch-1.pl b/challenge-290/ulrich-rieke/perl/ch-1.pl new file mode 100755 index 0000000000..9cbd50d2eb --- /dev/null +++ b/challenge-290/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,22 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+say "Enter some integers, separated by blanks!" ;
+my $line = <STDIN> ;
+chomp $line ;
+my @numbers = split( /\s+/ , $line ) ;
+my $len = scalar( @numbers ) ;
+my $result = "false" ;
+for my $outer( 0..$len - 2 ) {
+ if ( $numbers[$outer] > 1 ) {
+ for my $inner( $outer + 1 .. $len - 1 ) {
+ if ( $numbers[$outer] == 2 * $numbers[$inner] ) {
+ $result = "true" ;
+ last ;
+ }
+ }
+ }
+}
+say $result ;
diff --git a/challenge-290/ulrich-rieke/perl/ch-2.pl b/challenge-290/ulrich-rieke/perl/ch-2.pl new file mode 100755 index 0000000000..e2956f93a2 --- /dev/null +++ b/challenge-290/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,52 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+use POSIX ;
+use List::Util qw ( sum ) ;
+
+sub digitsum {
+ my $number = shift ;
+ my $sum = 0 ;
+ while ($number != 0 ) {
+ $sum += $number % 10 ;
+ $number = floor( int( $number / 10 ) ) ;
+ }
+ return $sum ;
+}
+
+say "Enter a term consisting of digits only!" ;
+my $term = <STDIN> ;
+chomp $term ;
+$term =~ s/\s+//g ;
+my $reversed = join( '' , reverse split( // , $term) ) ;
+my $payload = substr( $reversed , 0 , 1 ) ;
+my @sums ;
+my $count = 1 ;
+for my $pos( 1..length $reversed - 1 ) {
+ if ( substr( $reversed , $pos , 1 ) =~ /[0-9]/ ) {
+ my $number = substr( $reversed , $pos , 1 ) ;
+ if ( $count % 2 == 1 ) {
+ my $possum = 2 * $number ;
+ if ( $possum < 10 ) {
+ push( @sums, $possum ) ;
+ }
+ else {
+ my $localsum = digitsum( $possum ) ;
+ push( @sums , $localsum ) ;
+ }
+ }
+ else {
+ push( @sums, $number ) ;
+ }
+ $count++ ;
+ }
+}
+my $allSum = sum( @sums ) ;
+if ( ($allSum + $payload) % 10 == 0 ) {
+ say "true" ;
+}
+else {
+ say "false" ;
+}
+
diff --git a/challenge-290/ulrich-rieke/raku/ch-1.raku b/challenge-290/ulrich-rieke/raku/ch-1.raku new file mode 100755 index 0000000000..244dee251a --- /dev/null +++ b/challenge-290/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,18 @@ +use v6 ;
+
+say "Enter some integers , separated by blanks!" ;
+my $numberline = $*IN.get ;
+my @numbers = $numberline.words.map( {.Int} ) ;
+my $len = @numbers.elems ;
+my $result = False ;
+for (0..$len - 2) -> $outer {
+ if ( @numbers[$outer] > 1 ) {
+ for ( $outer + 1 .. $len - 1 ) -> $inner {
+ if ( @numbers[$outer] == 2 * @numbers[$inner] ) {
+ $result = True ;
+ last ;
+ }
+ }
+ }
+}
+say $result ;
diff --git a/challenge-290/ulrich-rieke/raku/ch-2.raku b/challenge-290/ulrich-rieke/raku/ch-2.raku new file mode 100755 index 0000000000..86f3751aef --- /dev/null +++ b/challenge-290/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,40 @@ +use v6 ;
+
+say "Enter a term consisting of digits!" ;
+my $term = $*IN.get ;
+$term ~~ s:g/\s// ;
+my $reversed = $term.flip ;
+my $count = 1 ;#we start with 1 since we initiate payload with last charact.
+my $payload = $reversed.substr( 0 , 1 ).Int ;
+my @sums ;
+for (1..$reversed.chars - 1 ) -> $pos {
+ if ( $reversed.substr( $pos , 1 ) ~~ /<[0..9]>/ ) {
+ my $number = +$reversed.substr( $pos , 1 ) ;
+ if ( $count %% 2 ) {
+ @sums.push( $number ) ;
+ }
+ else {
+ my $sum = 2 * $number ;
+ if ( $sum > 9 ) {
+ @sums.push( digitsum( $sum ) ) ;
+ }
+ else {
+ @sums.push( $sum ) ;
+ }
+ }
+ $count++ ;
+ }
+}
+my $totalSum = [+] @sums ;
+say ($totalSum + $payload) %% 10 ;
+
+sub digitsum( $number is copy ) {
+ my $sum = 0 ;
+ while ( $number != 0 ) {
+ $sum += $number mod 10 ;
+ $number div= 10 ;
+ }
+ return $sum ;
+}
+
+
diff --git a/challenge-290/ulrich-rieke/rust/ch-1.rs b/challenge-290/ulrich-rieke/rust/ch-1.rs new file mode 100755 index 0000000000..df48fc3338 --- /dev/null +++ b/challenge-290/ulrich-rieke/rust/ch-1.rs @@ -0,0 +1,23 @@ +use std::io ; + +fn main() { + println!("Enter some integers, separated by blanks!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( &mut inline ).unwrap( ) ; + let entered_line : &str = inline.as_str( ).trim( ) ; + let numbers : Vec<i32> = entered_line.split_whitespace( ).map( |s| + s.parse::<i32>( ).unwrap( ) ).collect( ) ; + let mut result : bool = false ; + let len = numbers.len( ) ; + for n in 0..len - 1 { + if numbers[n] > 1 { + for i in n + 1 ..len { + if numbers[n] == 2 * numbers[i] { + result = true ; + break ; + } + } + } + } + println!("{}" , result ) ; +} diff --git a/challenge-290/ulrich-rieke/rust/ch-2.rs b/challenge-290/ulrich-rieke/rust/ch-2.rs new file mode 100755 index 0000000000..b8288a72c1 --- /dev/null +++ b/challenge-290/ulrich-rieke/rust/ch-2.rs @@ -0,0 +1,50 @@ +use std::io ; + +fn digit_sum( mut number : u32 ) -> u32 { + let mut sum : u32 = 0 ; + while number != 0 { + sum += number % 10 ; + number /= 10 ; + } + sum +} + +fn main() { + println!("Enter a string consisting of digits!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( &mut inline ).unwrap( ) ; + let entered_line : &str = inline.as_str( ).trim( ) ; + let mut count : u16 = 0 ; + let mut all_sums : Vec<u32> = Vec::new( ) ; + let mut payload : u32 = 0 ; + let mut iter = entered_line.chars( ).rev( ) ; + while let Some( c ) = iter.next( ) { + if c.is_ascii_digit( ) { + let num : u32 = match c.to_digit( 10 ) { + Some( n ) => n , + None => 0 + } ; + if count == 0 { + payload = num ; + } + else { + if count % 2 == 1 { + let product : u32 = 2 * num ; + if product < 10 { + all_sums.push( product ) ; + } + else { + let the_sum : u32 = digit_sum( product ) ; + all_sums.push( the_sum ) ; + } + } + else { + all_sums.push( num ) ; + } + } + count += 1 ; + } + } + let total_sum : u32 = all_sums.into_iter( ).sum( ) ; + println!("{}" , (total_sum + payload) % 10 == 0 ) ; +} diff --git a/stats/pwc-challenge-289.json b/stats/pwc-challenge-289.json new file mode 100644 index 0000000000..8e07ca6c57 --- /dev/null +++ b/stats/pwc-challenge-289.json @@ -0,0 +1,733 @@ +{ + "plotOptions" : { + "series" : { + "dataLabels" : { + "enabled" : 1, + "format" : "{point.y}" + }, + "borderWidth" : 0 + } + }, + "xAxis" : { + "type" : "category" + }, + "title" : { + "text" : "The Weekly Challenge - 289" + }, + "tooltip" : { + "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", + "followPointer" : 1, + "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>" + }, + "legend" : { + "enabled" : 0 + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "series" : [ + { + "colorByPoint" : 1, + "data" : [ + { + "name" : "Adam Russell", + "y" : 4, + "drilldown" : "Adam Russell" + }, + { + "drilldown" : "Ali Moradi", + "y" : 3, + "name" : "Ali Moradi" + }, + { + "y" : 3, + "drilldown" : "Andre Ploger", + "name" : "Andre Ploger" + }, + { + "drilldown" : "Arne Sommer", + "y" : 3, + "name" : "Arne Sommer" + }, + { + "name" : "Asher Harvey-Smith", + "y" : 2, + "drilldown" : "Asher Harvey-Smith" + }, + { + "name" : "Athanasius", + "y" : 4, + "drilldown" : "Athanasius" + }, + { + "name" : "BarrOff", + "drilldown" : "BarrOff", + "y" : 2 + }, + { + "name" : "Bob Lied", + "y" : 2, + "drilldown" : "Bob Lied" + }, + { + "drilldown" : "Cheok-Yin Fung", + "y" : 1, + "name" : "Cheok-Yin Fung" + }, + { + "name" : "Dave Jacoby", + "drilldown" : "Dave Jacoby", + "y" : 3 + }, + { + "name" : "David Ferrone", + "y" : 2, + "drilldown" : "David Ferrone" + }, + { + "name" : "E. Choroba", + "drilldown" : "E. Choroba", + "y" : 2 + }, + { + "name" : "Jaldhar H. Vyas", + "y" : 5, + "drilldown" : "Jaldhar H. Vyas" + }, + { + "y" : 2, + "drilldown" : "Jan Krnavek", + "name" : "Jan Krnavek" + }, + { + "drilldown" : "Jorg Sommrey", + "y" : 3, + "name" : "Jorg Sommrey" + }, + { + "drilldown" : "Kjetil Skotheim", + "y" : 2, + "name" : "Kjetil Skotheim" + }, + { + "name" : "Laurent Rosenfeld", + "drilldown" : "Laurent Rosenfeld", + "y" : 6 + }, + { + "name" : "Lubos Kolouch", + "drilldown" : "Lubos Kolouch", + "y" : 2 + }, + { + "name" : "Luca Ferrari", + "y" : 12, + "drilldown" : "Luca Ferrari" + }, + { + "y" : 2, + "drilldown" : "Mark Anderson", + "name" : "Mark Anderson" + }, + { + "y" : 2, + "drilldown" : "Matthew Neleigh", + "name" : "Matthew Neleigh" + }, + { + "name" : "Matthias Muth", + "drilldown" : "Matthias Muth", + "y" : 3 + }, + { + "y" : 2, + "drilldown" : "Niels van Dijke", + "name" : "Niels van Dijke" + }, + { + "name" : "Packy Anderson", + "y" : 5, + "drilldown" : "Packy Anderson" + }, + { + "name" : "Paulo Custodio", + "y" : 2, + "drilldown" : "Paulo Custodio" + }, + { + "drilldown" : "Peter Campbell Smith", + "y" : 3, + "name" : "Peter Campbell Smith" + }, + { + "name" : "Peter Meszaros", + "y" : 2, + "drilldown" : "Peter Meszaros" + }, + { + "name" : "Reinier Maliepaard", + "y" : 2, + "drilldown" : "Reinier Maliepaard" + }, + { + "name" : "Robbie Hatley", + "drilldown" : "Robbie Hatley", + "y" : 2 + }, + { + "name" : "Roger Bell_West", + "drilldown" : "Roger Bell_West", + "y" : 5 + }, + { + "name" : "Ryan Thompson", + "drilldown" : "Ryan Thompson", + "y" : 3 + }, + { + "name" : "Simon Green", + "drilldown" : "Simon Green", + "y" : 2 + }, + { + "y" : 4, + "drilldown" : "Thomas Kohler", + "name" : "Thomas Kohler" + }, + { + "drilldown" : "Tim King", + "y" : 3, + "name" : "Tim King" + }, + { + "y" : 3, + "drilldown" : "Torgny Lyon", + "name" : "Torgny Lyon" + }, + { + "name" : "Ulrich Rieke", + "y" : 4, + "drilldown" : "Ulrich Rieke" + }, + { + "y" : 2, + "drilldown" : "Vinod Kumar K", + "name" : "Vinod Kumar K" + }, + { + "drilldown" : "W. Luis Mochan", + "y" : 3, + "name" : "W. Luis Mochan" + }, + { + "drilldown" : "Wanderdoc", + "y" : 2, + "name" : "Wanderdoc" + } + ], + "name" : "The Weekly Challenge - 289" + } + ], + "subtitle" : { + "text" : "[Champions: 39] Last updated at 2024-10-07 22:28:04 GMT" + }, + "drilldown" : { + "series" : [ + { + "id" : "Adam Russell", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 2 + ] + ], + "name" : "Adam Russell" + }, + { + "name" : "Ali Moradi", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Ali Moradi" + }, + { + "id" : "Andre Ploger", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "name" : "Andre Ploger" + }, + { + "id" : "Arne Sommer", + "name" : "Arne Sommer", + "data" : [ + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "id" : "Asher Harvey-Smith", + "data" : [ + [ + "Raku", + 2 + ] + ], + "name" : "Asher Harvey-Smith" + }, + { + "name" : "Athanasius", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ] + ], + "id" : "Athanasius" + }, + { + "data" : [ + [ + "Raku", + 2 + ] + ], + "name" : "BarrOff", + "id" : "BarrOff" + }, + { + "id" : "Bob Lied", + "data" : [ + [ + "Perl", + 2 + ] + ], + "name" : "Bob Lied" + }, + { + "id" : "Cheok-Yin Fung", + "data" : [ + [ + "Perl", + 1 + ] + ], + "name" : "Cheok-Yin Fung" + }, + { + "id" : "Dave Jacoby", + "name" : "Dave Jacoby", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ] + }, + { + "data" : [ + [ + "Perl", + 2 + ] + ], + "name" : "David Ferrone", + "id" : "David Ferrone" + }, + { + "id" : "E. Choroba", + "data" : [ + [ + "Perl", + 2 + ] + ], + "name" : "E. Choroba" + }, + { + "id" : "Jaldhar H. Vyas", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ], + [ + "Blog", + 1 + ] |
