diff options
| author | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2024-09-12 15:14:05 +0100 |
|---|---|---|
| committer | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2024-09-12 15:14:05 +0100 |
| commit | eb98e39e73f94883aa8975576dcf1bd7b30db182 (patch) | |
| tree | 795f7f1abf923c3a27a58b39ae12c1f757e5e9b7 | |
| parent | 1a35295d8345ec48b29dac02a59257ae5f267965 (diff) | |
| download | perlweeklychallenge-club-eb98e39e73f94883aa8975576dcf1bd7b30db182.tar.gz perlweeklychallenge-club-eb98e39e73f94883aa8975576dcf1bd7b30db182.tar.bz2 perlweeklychallenge-club-eb98e39e73f94883aa8975576dcf1bd7b30db182.zip | |
- Added solutions by Ulrich Rieke.
32 files changed, 2906 insertions, 2625 deletions
diff --git a/challenge-286/ulrich-rieke/cpp/ch-1.cpp b/challenge-286/ulrich-rieke/cpp/ch-1.cpp new file mode 100755 index 0000000000..7bc70c9a1c --- /dev/null +++ b/challenge-286/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,43 @@ +#include <vector>
+#include <string>
+#include <sstream>
+#include <fstream>
+#include <random>
+#include <iostream>
+
+std::vector<std::string> split( const std::string & text ,
+ const char delimiter ) {
+ std::istringstream istr { text } ;
+ std::vector<std::string> tokens ;
+ std::string word ;
+ while ( std::getline( istr , word , delimiter ) ) {
+ if ( word.length( ) > 0 ) {
+ tokens.push_back( word ) ;
+ }
+ }
+ return tokens ;
+}
+
+int main( ) {
+ std::ifstream infile( "challenge286.cpp" ) ;
+ std::vector<std::string> allWords ;
+ if ( infile.is_open( ) ) {
+ std::string line ;
+ while ( infile ) {
+ std::getline( infile , line ) ;
+ if ( ! line.empty( ) ) {
+ std::vector<std::string> tokens { split( line , ' ' ) } ;
+ for ( auto s : tokens )
+ allWords.push_back( s ) ;
+ }
+ }
+ }
+ infile.close( ) ;
+ int len = allWords.size( ) ;
+ std::random_device rd ;
+ std::mt19937 gen( rd( ) ) ;
+ std::uniform_int_distribution<> distri(0 , len - 1 ) ;
+ int pos = distri( gen ) ;
+ std::cout << allWords[pos] << '\n' ;
+ return 0 ;
+}
diff --git a/challenge-286/ulrich-rieke/cpp/ch-2.cpp b/challenge-286/ulrich-rieke/cpp/ch-2.cpp new file mode 100755 index 0000000000..7b1579b314 --- /dev/null +++ b/challenge-286/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,49 @@ +#include <iostream>
+#include <vector>
+#include <sstream>
+#include <utility>
+#include <numeric>
+
+//routine for splitting a string at a given delimiter
+std::vector<std::string> split( const std::string & text , const 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 2 ^ n integers, where n is a positive integer!\n" ;
+ std::string line ;
+ std::getline( std::cin , line ) ;
+ auto tokens = split( line , ' ' ) ;
+ std::vector<int> numbers ;
+ for ( auto s : tokens )
+ numbers.push_back( std::stoi( s ) ) ;
+ bool last_was_min = false ;//did we determine the minimum last time ?
+ while ( numbers.size( ) > 1 ) {
+ std::vector<std::pair<int , int>> allPairs ;// all neighbouring pairs
+ for ( int i = 0 ; i < numbers.size( ) - 1 ; i += 2 ) {
+ allPairs.push_back( std::make_pair( numbers[i] , numbers[i + 1] )) ;
+ }
+ std::vector<int> intermediate ; //for the minima and maxima
+ for ( auto it = allPairs.begin( ) ; it != allPairs.end( ) ; it++ ) {
+ if ( last_was_min ) {
+ intermediate.push_back( std::max( it->first , it->second ) ) ;
+ last_was_min = false ; //toggle the boolean value
+ }
+ else {
+ intermediate.push_back( std::min( it->first , it->second ) ) ;
+ last_was_min = true ;
+ }
+ }
+ numbers = intermediate ;
+ intermediate.clear( ) ;
+ }
+ std::cout << *numbers.begin( ) << '\n' ;
+ return 0 ;
+}
diff --git a/challenge-286/ulrich-rieke/haskell/ch-1.hs b/challenge-286/ulrich-rieke/haskell/ch-1.hs new file mode 100755 index 0000000000..a24d918173 --- /dev/null +++ b/challenge-286/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,17 @@ +module Challenge286
+ where
+import System.Random
+import Data.List ( (!!) )
+
+pickWord :: [String] -> String
+pickWord words = words !! pos
+ where
+ gen = mkStdGen 137
+ pos = fst $ uniformR ( 0 :: Int , length words - 1 :: Int ) gen
+
+main :: IO ( )
+main = do
+ allLines <- readFile "Challenge286.hs"
+ let allTheWords = words allLines
+ relevantWords = filter ( not . null ) allTheWords
+ print $ pickWord relevantWords
diff --git a/challenge-286/ulrich-rieke/haskell/ch-2.hs b/challenge-286/ulrich-rieke/haskell/ch-2.hs new file mode 100755 index 0000000000..db350ca355 --- /dev/null +++ b/challenge-286/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,17 @@ +module Challenge286_2
+ where
+import Data.List.Split ( chunksOf ) ;
+
+solution :: [Int] -> Int
+solution list = head $ until ( (== 1 ) . length ) step list
+ where
+ step :: [Int] -> [Int]
+ step someList = map (\p -> if (fst p ) then min ( head $ snd p ) ( last $ snd
+ p ) else max ( head $ snd p ) ( last $ snd p ) ) $ zip ( cycle [True ,
+ False] ) (chunksOf 2 someList)
+
+main :: IO ( )
+main = do
+ putStrLn "Enter 2 ^ n integers where n is a positive integer!"
+ numberstrings <- getLine
+ print $ solution $ map read $ words numberstrings
diff --git a/challenge-286/ulrich-rieke/perl/ch-1.pl b/challenge-286/ulrich-rieke/perl/ch-1.pl new file mode 100755 index 0000000000..aeba026e89 --- /dev/null +++ b/challenge-286/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,20 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+my @allWords ;
+my $fh ;
+open ( $fh , "< Challenge286.pl") or die "can't open file!" ;
+my @lines = <$fh> ;
+close( $fh ) ;
+for my $line( @lines ) {
+ if ( $line ) {
+ my @words = split( /\s+/ , $line ) ;
+ map { push( @allWords , $_ ) } @words ;
+ }
+}
+my $len = scalar( @allWords ) ;
+srand( time( )) ;
+my $pos = int( rand( $len ) ) ;
+say $allWords[ $pos ] ;
diff --git a/challenge-286/ulrich-rieke/perl/ch-2.pl b/challenge-286/ulrich-rieke/perl/ch-2.pl new file mode 100755 index 0000000000..8ba8400e06 --- /dev/null +++ b/challenge-286/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,29 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+use List::Util qw ( pairs min max ) ;
+
+say "Enter 2 ^ n integers , where n is a positive integer!" ;
+my $line = <STDIN> ;
+chomp $line ;
+#I do no input checking here...
+my @numbers = split( /\s+/ , $line ) ;
+my $last_was_min = 0 ;#did we determine the minimum last time, if not , 0!
+while ( scalar( @numbers ) > 1 ) {
+ my @pairs = pairs( @numbers ) ;
+ my @intermediate ; #for the minima and maxima
+ for my $pair ( @pairs ) {
+ if ( $last_was_min ) { #we now have to find the maximum
+ push( @intermediate , max( @$pair ) ) ;
+ $last_was_min = 0 ; #toggle the boolean value
+ }
+ else { #the other way round
+ push( @intermediate , min( @$pair ) ) ;
+ $last_was_min = 1 ;
+ }
+ }
+ @numbers = @intermediate ;
+ @intermediate = ( ) ;
+}
+say $numbers[0] ;
diff --git a/challenge-286/ulrich-rieke/raku/ch-1.raku b/challenge-286/ulrich-rieke/raku/ch-1.raku new file mode 100755 index 0000000000..ca150d9b41 --- /dev/null +++ b/challenge-286/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,5 @@ +use v6 ;
+
+my $code = "Challenge286.raku".IO.slurp ;
+my @words = $code.words ;
+say @words.pick ;
diff --git a/challenge-286/ulrich-rieke/raku/ch-2.raku b/challenge-286/ulrich-rieke/raku/ch-2.raku new file mode 100755 index 0000000000..ba7c8122d2 --- /dev/null +++ b/challenge-286/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,23 @@ +use v6 ;
+
+say "Enter 2 ^ n many integers, where n is a positive integer!" ;
+my $line = $*IN.get ;
+my @numbers = $line.words.map( {.Int} ) ;
+my $last_was_min = False ; #did we determine the minimum last time ?
+while ( @numbers.elems > 1 ) {
+ my @pairs = @numbers.rotor( 2 ) ;
+ my @intermediate ; #for the minima and maxima of neighbouring pairs
+ for @pairs -> $pair {
+ if ( $last_was_min ) { #we must find the maximum
+ @intermediate.push( $pair.max ) ;
+ $last_was_min = False ; #toggle the boolean value
+ }
+ else {
+ @intermediate.push( $pair.min ) ;
+ $last_was_min = True ;
+ }
+ }
+ @numbers = @intermediate ;
+ @intermediate = ( ) ;
+}
+say @numbers[0] ;
diff --git a/challenge-286/ulrich-rieke/rust/ch-1.rs b/challenge-286/ulrich-rieke/rust/ch-1.rs new file mode 100755 index 0000000000..2f8e025067 --- /dev/null +++ b/challenge-286/ulrich-rieke/rust/ch-1.rs @@ -0,0 +1,25 @@ +use std::io::{self , BufRead , BufReader} ; +use std::fs::File ; +use rand ; + +fn main() -> io::Result<()>{ + let path = "main.rs" ; + let source_file = File::open( path )? ; + let reader = BufReader::new( source_file ) ; + let mut all_words : Vec<String> = Vec::new( ) ; + for line in reader.lines( ) { + let codeline = line.unwrap( ) ; + if codeline.len( ) > 0 { + let codewords : &str = codeline.as_str( ) ; + codewords.split_whitespace( ).for_each( | s | { + let str = s.into( ) ; + all_words.push( str ) ; + } ) ; + } + } + let len = all_words.len( ) ; + let selected : u32 = rand::random::<u32>( ) ; + let select_pos : usize = (selected as usize) % len ; + println!("{:?}" , all_words[select_pos] ) ; + Ok(() ) +} diff --git a/challenge-286/ulrich-rieke/rust/ch-2.rs b/challenge-286/ulrich-rieke/rust/ch-2.rs new file mode 100755 index 0000000000..4c34f0c644 --- /dev/null +++ b/challenge-286/ulrich-rieke/rust/ch-2.rs @@ -0,0 +1,30 @@ +use std::{io , cmp} ; + +fn main() { + println!("Enter an number of integers( there must be a 2 exponent of them!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( &mut inline ).unwrap( ) ; + let entered_line : &str = inline.as_str( ).trim( ) ; + let mut numbers : Vec<u32> = entered_line.split_whitespace( ).map( |s| + s.parse::<u32>( ).unwrap( ) ).collect( ) ; + while numbers.len( ) > 1 { + let mut last_was_min : bool = false ; + let slice = &numbers[..] ; + let mut chu = slice.chunks( 2 ) ; + let mut intermediate : Vec<u32> = Vec::new( ) ; + while let Some( p ) = chu.next( ) { + if last_was_min { + let maxi = cmp::max( p[0] , p[1] ) ; + intermediate.push( maxi ) ; + last_was_min = false ; + } + else { + let mini = cmp::min( p[0] , p[1] ) ; + intermediate.push( mini ) ; + last_was_min = true ; + } + } + numbers = intermediate ; + } + println!("{}" , numbers[0] ) ; +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index b98e26e793..37622400fb 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,46 +1,39 @@ { - "title" : { - "text" : "The Weekly Challenge - 286" - }, - "plotOptions" : { - "series" : { - "borderWidth" : 0, - "dataLabels" : { - "enabled" : 1, - "format" : "{point.y}" - } - } - }, "legend" : { "enabled" : 0 }, - "chart" : { - "type" : "column" + "title" : { + "text" : "The Weekly Challenge - 286" + }, + "tooltip" : { + "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", + "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", + "followPointer" : 1 }, "drilldown" : { "series" : [ { - "id" : "Alexander Karelas", + "name" : "Alexander Karelas", "data" : [ [ "Perl", 1 ] ], - "name" : "Alexander Karelas" + "id" : "Alexander Karelas" }, { + "id" : "Cheok-Yin Fung", "data" : [ [ "Perl", 1 ] ], - "id" : "Cheok-Yin Fung", "name" : "Cheok-Yin Fung" }, { - "name" : "David Ferrone", + "id" : "David Ferrone", "data" : [ [ "Perl", @@ -51,39 +44,40 @@ 1 ] ], - "id" : "David Ferrone" + "name" : "David Ferrone" }, { + "id" : "E. Choroba", + "name" : "E. Choroba", "data" : [ [ "Perl", 2 ] - ], - "id" : "E. Choroba", - "name" : "E. Choroba" + ] }, { - "name" : "Feng Chang", + "id" : "Feng Chang", "data" : [ [ "Raku", 2 ] ], - "id" : "Feng Chang" + "name" : "Feng Chang" }, { + "id" : "Kjetil Skotheim", "name" : "Kjetil Skotheim", "data" : [ [ "Perl", 2 ] - ], - "id" : "Kjetil Skotheim" + ] }, { + "name" : "Laurent Rosenfeld", "data" : [ [ "Perl", @@ -98,22 +92,21 @@ 2 ] ], - "id" : "Laurent Rosenfeld", - "name" : "Laurent Rosenfeld" + "id" : "Laurent Rosenfeld" }, { - "id" : "Matthew Neleigh", "data" : [ [ "Perl", 2 ] ], - "name" : "Matthew Neleigh" + "name" : "Matthew Neleigh", + "id" : "Matthew Neleigh" }, { - "name" : "Niels van Dijke", "id" : "Niels van Dijke", + "name" : "Niels van Dijke", "data" : [ [ "Perl", @@ -146,11 +139,10 @@ 2 ] ], - "id" : "Paulo Custodio", - "name" : "Paulo Custodio" + "name" : "Paulo Custodio", + "id" : "Paulo Custodio" }, { - "name" : "Peter Campbell Smith", "data" : [ [ "Perl", @@ -161,31 +153,35 @@ 1 ] ], + "name" : "Peter Campbell Smith", "id" : "Peter Campbell Smith" }, { + "id" : "Peter Meszaros", + "name" : "Peter Meszaros", "data" : [ [ "Perl", 2 ] - ], - "id" : "Peter Meszaros", - "name" : "Peter Meszaros" + ] }, { + "name" : "Peter Pentchev", "data" : [ [ "Perl", 2 + ], + [ + "Blog", + 1 ] ], - "id" : "Peter Pentchev", - "name" : "Peter Pentchev" + "id" : "Peter Pentchev" }, { "name" : "Robbie Hatley", - "id" : "Robbie Hatley", "data" : [ [ "Perl", @@ -195,11 +191,10 @@ "Blog", 1 ] - ] + ], + "id" : "Robbie Hatley" }, { - "name" : "Roger Bell_West", - "id" : "Roger Bell_West", "data" : [ [ "Perl", @@ -209,10 +204,11 @@ "Raku", 1 ] - ] + ], + "name" : "Roger Bell_West", + "id" : "Roger Bell_West" }, { - "name" : "Thomas Kohler", "id" : "Thomas Kohler", "data" : [ [ @@ -223,10 +219,10 @@ "Blog", 2 ] - ] + ], + "name" : "Thomas Kohler" }, { - "name" : "Torgny Lyon", "id" : "Torgny Lyon", "data" : [ [ @@ -237,9 +233,25 @@ "Blog", 1 ] + ], + "name" : "Torgny Lyon" + }, + { + "id" : "Ulrich Rieke", + "name" : "Ulrich Rieke", + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ] ] }, { + "id" : "W. Luis Mochan", "name" : "W. Luis Mochan", "data" : [ [ @@ -250,23 +262,12 @@ "Blog", 1 ] - ], - "id" : "W. Luis Mochan" + ] } ] }, "subtitle" : { - "text" : "[Champions: 19] Last updated at 2024-09-11 16:31:49 GMT" - }, - "tooltip" : { - "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>", - "headerFormat" : "<span style='font-size:11px'>{series.name}</span><br/>", - "followPointer" : 1 - }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } + "text" : "[Champions: 20] Last updated at 2024-09-12 14:13:36 GMT" }, "series" : [ { @@ -274,19 +275,19 @@ "name" : "The Weekly Challenge - 286", "data" : [ { - "name" : "Alexander Karelas", "drilldown" : "Alexander Karelas", + "name" : "Alexander Karelas", "y" : 1 }, { "name" : "Cheok-Yin Fung", - "drilldown" : "Cheok-Yin Fung", - "y" : 1 + "y" : 1, + "drilldown" : "Cheok-Yin Fung" }, { "drilldown" : "David Ferrone", - "y" : 3, - "name" : "David Ferrone" + "name" : "David Ferrone", + "y" : 3 }, { "name" : "E. Choroba", @@ -299,39 +300,39 @@ "drilldown" : "Feng Chang" }, { + "name" : "Kjetil Skotheim", "y" : 2, - "drilldown" : "Kjetil Skotheim", - "name" : "Kjetil Skotheim" + "drilldown" : "Kjetil Skotheim" }, { - "drilldown" : "Laurent Rosenfeld", + "name" : "Laurent Rosenfeld", "y" : 6, - "name" : "Laurent Rosenfeld" + "drilldown" : "Laurent Rosenfeld" }, { - "y" : 2, "drilldown" : "Matthew Neleigh", - "name" : "Matthew Neleigh" + "name" : "Matthew Neleigh", + "y" : 2 }, { "y" : 2, - "drilldown" : "Niels van Dijke", - "name" : "Niels van Dijke" + "name" : "Niels van Dijke", + "drilldown" : "Niels van Dijke" }, { - "name" : "Packy Anderson", "y" : 5, + "name" : "Packy Anderson", "drilldown" : "Packy Anderson" }, { - "y" : 2, "drilldown" : "Paulo Custodio", - "name" : "Paulo Custodio" + "name" : "Paulo Custodio", + "y" : 2 }, { + "name" : "Peter Campbell Smith", "y" : 3, - "drilldown" : "Peter Campbell Smith", - "name" : "Peter Campbell Smith" + "drilldown" : "Peter Campbell Smith" }, { "drilldown" : "Peter Meszaros", @@ -340,38 +341,60 @@ }, { "name" : "Peter Pentchev", - "y" : 2, + "y" : 3, "drilldown" : "Peter Pentchev" }, { - "drilldown" : "Robbie Hatley", "y" : 3, - "name" : "Robbie Hatley" + "name" : "Robbie Hatley", + "drilldown" : "Robbie Hatley" }, { "drilldown" : "Roger Bell_West", - "y" : 2, - "name" : "Roger Bell_West" + "name" : "Roger Bell_West", + "y" : 2 }, { - "name" : "Thomas Kohler", + "drilldown" : "Thomas Kohler", "y" : 4, - "drilldown" : "Thomas Kohler" + "name" : "Thomas Kohler" }, { "y" : 3, - "drilldown" : "Torgny Lyon", - "name" : "Torgny Lyon" + "name" : "Torgny Lyon", + "drilldown" : "Torgny Lyon" + }, + { + "y" : 4, + "name" : "Ulrich Rieke", + "drilldown" : "Ulrich Rieke" }, { "drilldown" : "W. Luis Mochan", - "y" : 3, - "name" : "W. Luis Mochan" + "name" : "W. Luis Mochan", + "y" : 3 } ] } ], + "plotOptions" : { + "series" : { + "dataLabels" : { + "format" : "{point.y}", + "enabled" : 1 + }, + "borderWidth" : 0 + } + }, "xAxis" : { "type" : "category" + }, + "chart" : { + "type" : "column" + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } } } diff --git a/stats/pwc-language-breakdown-2019.json b/stats/pwc-language-breakdown-2019.json index 676c06a8ce..cd11b07f77 100644 --- a/stats/pwc-language-breakdown-2019.json +++ b/stats/pwc-language-breakdown-2019.json @@ -1,65 +1,70 @@ { - "xAxis" : { - "type" : "category" + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "chart" : { + "type" : "column" }, "series" : [ { - "colorByPoint" : "true", "name" : "The Weekly Challenge Languages", + "colorByPoint" : "true", "data" : [ { - "name" : "041", "drilldown" : "041", + "name" : "041", "y" : 80 }, { - "name" : "040", "y" : 77, + "name" : "040", "drilldown" : "040" }, { - "name" : "039", "drilldown" : "039", + "name" : "039", "y" : 68 }, { - "y" : 74, "drilldown" : "038", - "name" : "038" + "name" : "038", + "y" : 74 }, { - "name" : "037", "drilldown" : "037", + "name" : "037", "y" : 70 }, { + "name" : "036", "y" : 70, - "drilldown" : "036", - "name" : "036" + "drilldown" : "036" }, { - "drilldown" : "035", "y" : 68, - "name" : "035" + "name" : "035", + "drilldown" : "035" }, { + "drilldown" : "034", "name" : "034", - "y" : 70, - "drilldown" : "034" + "y" : 70 }, { - "y" : 113, "drilldown" : "033", + "y" : 113, "name" : "033" }, { "drilldown" : "032", - "y" : 97, - "name" : "032" + "name" : "032", + "y" : 97 }, { - "name" : "031", "y" : 93, + "name" : "031", "drilldown" : "031" }, { @@ -68,79 +73,79 @@ "drilldown" : "030" |
