diff options
32 files changed, 2754 insertions, 2405 deletions
diff --git a/challenge-284/ulrich-rieke/cpp/ch-1.cpp b/challenge-284/ulrich-rieke/cpp/ch-1.cpp new file mode 100755 index 0000000000..1217a749db --- /dev/null +++ b/challenge-284/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,43 @@ +#include <vector>
+#include <iostream>
+#include <sstream>
+#include <numeric>
+#include <algorithm>
+#include <string>
+
+std::vector<std::string> split( std::string text , const char delimiter ) {
+ std::stringstream instr { text } ;
+ std::vector<std::string> tokens ;
+ std::string word ;
+ while ( std::getline( instr, 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 numberline { split( line , ' ' ) } ;
+ std::vector<int> numbers ;
+ for ( auto s : numberline )
+ numbers.push_back( std::stoi( s ) ) ;
+ std::vector<int> selected ;
+ for ( int i : numbers ) {
+ if ( std::count( numbers.begin( ) , numbers.end( ) , i ) == i )
+ selected.push_back( i ) ;
+ }
+ int len = selected.size( ) ;
+ if ( len > 1 ) {
+ std::cout << *std::max_element( selected.begin( ) , selected.end( ) ) <<
+ '\n' ;
+ }
+ else if ( len == 1 ) {
+ std::cout << selected[0] << '\n' ;
+ }
+ else {
+ std::cout << -1 << '\n' ;
+ }
+ return 0 ;
+}
+
diff --git a/challenge-284/ulrich-rieke/cpp/ch-2.cpp b/challenge-284/ulrich-rieke/cpp/ch-2.cpp new file mode 100755 index 0000000000..b1bab0811c --- /dev/null +++ b/challenge-284/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,59 @@ +#include <vector>
+#include <sstream>
+#include <string>
+#include <map>
+#include <algorithm>
+#include <iostream>
+#include <iterator>
+#include <set>
+
+std::vector<std::string> split( std::string text , const char delimiter) {
+ std::stringstream instr { text } ;
+ std::vector<std::string> tokens ;
+ std::string word ;
+ while ( std::getline( instr , word , delimiter ) )
+ tokens.push_back( word ) ;
+ return tokens ;
+}
+
+int main( ) {
+ std::cout << "Enter a list of integers, separated by blanks!\n" ;
+ std::string line ;
+ std::getline( std::cin , line ) ;
+ std::vector<std::string> firstNums { split( line , ' ' ) } ,
+ secondNums ;
+ std::cout << "Enter a list of unique integers that are a subset of the "
+ << "first list!\n" ;
+ std::getline( std::cin , line ) ;
+ secondNums = split( line , ' ' ) ;
+ std::vector<int> firstNumbers , secondNumbers ;
+ for ( auto s : firstNums )
+ firstNumbers.push_back( std::stoi( s ) ) ;
+ for ( auto s : secondNums )
+ secondNumbers.push_back( std::stoi( s ) ) ;
+ std::map<int , int> frequencies ;
+ for ( int i : firstNumbers )
+ frequencies[i]++ ;
+ std::vector<int> result ; // final numbers for the output
+ for ( int n : secondNumbers ) {
+ for ( int i = 0 ; i < frequencies.find( n )->second ; i++ )
+ result.push_back( n ) ;
+ }
+ //we now look for the numbers in firstNumbers not in secondNumbers
+ std::vector<int> difference ;
+ std::set<int> firstSet { firstNumbers.begin( ) , firstNumbers.end( ) } ;
+ std::set<int> secondSet { secondNumbers.begin( ) , secondNumbers.end( ) } ;
+ auto pos = std::set_difference( firstSet.begin( ) ,
+ firstSet.end( ) , secondSet.begin( ) ,
+ secondSet.end( ) , std::inserter( difference ,
+ difference.begin( ) ) ) ;
+ for ( int i : difference ) {
+ for ( int n = 0 ; n < frequencies.find( i )->second ; n++ )
+ result.push_back( i ) ;
+ }
+ std::cout << '(' ;
+ std::copy( result.begin( ) , result.end( ) ,
+ std::ostream_iterator<int>( std::cout , " " ) ) ;
+ std::cout << ")\n" ;
+ return 0 ;
+}
diff --git a/challenge-284/ulrich-rieke/haskell/ch-1.hs b/challenge-284/ulrich-rieke/haskell/ch-1.hs new file mode 100755 index 0000000000..580497c4dc --- /dev/null +++ b/challenge-284/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,19 @@ +module Challenge284
+ where
+import Data.List ( findIndices )
+
+solution :: [Int] -> Int
+solution list
+ |null selected = -1
+ |l == 1 = head selected
+ |otherwise = maximum selected
+ where
+ selected = map fst $ filter (\p -> fst p == (length $ snd p ) ) $
+ map (\i -> (i , findIndices (== i ) list ) ) list
+ l = length selected
+
+main :: IO ( )
+main = do
+ putStrLn "Enter some integers separated by blanks!"
+ numberline <- getLine
+ print $ solution $ map read $ words numberline
diff --git a/challenge-284/ulrich-rieke/haskell/ch-2.hs b/challenge-284/ulrich-rieke/haskell/ch-2.hs new file mode 100755 index 0000000000..fc4afcb1d9 --- /dev/null +++ b/challenge-284/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,33 @@ +module Challenge284_2
+ where
+import qualified Data.Set as S
+import Data.Maybe ( fromJust )
+import Data.List ( sort , (\\) )
+
+count :: Eq a => a -> [a] -> Int
+count _ [] = 0
+count d (x:xs)
+ |d == x = 1 + count d xs
+ |otherwise = count d xs
+
+findResult :: [Int] -> [Int] -> [Int]
+findResult firstList secondList =
+ let firstNumbers = S.toList $ S.fromList firstList
+ secondNumbers = S.toList $ S.fromList secondList
+ frequencies = map (\i -> ( i , count i firstList )) firstList
+ onlyFirst = firstNumbers \\ secondNumbers
+ firstPart = concat $ map (\i -> replicate ( fromJust $ lookup i
+ frequencies ) i ) secondList
+ secondPart = concat $ map (\i -> replicate ( fromJust $ lookup i
+ frequencies ) i ) $ sort onlyFirst
+ in firstPart ++ secondPart
+
+main :: IO ( )
+main = do
+ putStrLn "Enter some integers, separated by blanks!"
+ firstLine <- getLine
+ putStrLn "Enter some unique integers that are a subset of above!"
+ secondLine <- getLine
+ let firstNumbers = map read $ words firstLine
+ secondNumbers = map read $ words secondLine
+ print $ findResult firstNumbers secondNumbers
diff --git a/challenge-284/ulrich-rieke/perl/ch-1.pl b/challenge-284/ulrich-rieke/perl/ch-1.pl new file mode 100755 index 0000000000..125a3619f2 --- /dev/null +++ b/challenge-284/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,25 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+use List::Util qw ( max ) ;
+
+say "Enter some integers, separated by blanks!" ;
+my $line = <STDIN> ;
+chomp $line ;
+my @numbers = split( /\s+/ , $line ) ;
+my %frequencies ;
+map { $frequencies{$_}++ } @numbers ;
+my @selected = grep { $frequencies{$_} == $_ } @numbers ;
+my $len = scalar( @selected ) ;
+if ( $len > 1 ) {
+ say max( @selected ) ;
+}
+elsif ( $len == 1 ) {
+ say $selected[0] ;
+}
+else {
+ say -1 ;
+}
+
+
diff --git a/challenge-284/ulrich-rieke/perl/ch-2.pl b/challenge-284/ulrich-rieke/perl/ch-2.pl new file mode 100755 index 0000000000..d0cc983d48 --- /dev/null +++ b/challenge-284/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,33 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+say "Enter some integers, separated by blanks!" ;
+my $line = <STDIN> ;
+chomp $line ;
+my @firstNumbers = split( /\s+/ , $line ) ;
+say "Enter some unique integers that are a subset of the first ones!" ;
+$line = <STDIN> ;
+chomp $line ;
+my @secondNumbers = split( /\s+/ , $line ) ;
+my @result ; #final result array
+my %firstFrequencies ; #frequencies of numbers in the first list
+my %secondFrequencies ; #frequencies of numbers in the second list , for
+#the determination of list difference
+map { $firstFrequencies{$_}++ } @firstNumbers ;
+map { $secondFrequencies{$_}++ } @secondNumbers ;
+for my $n ( @secondNumbers ) {
+ for my $i ( 1..$firstFrequencies{ $n } ) {
+ push( @result , $n ) ;
+ }
+}
+my @diffList = grep { not ( exists( $secondFrequencies{$_} ) ) } keys
+ %firstFrequencies ; #list of numbers in first list but not in second
+my @sorted = sort @diffList ;
+for my $num ( @sorted ) {
+ for my $i ( 1..$firstFrequencies{$num} ) {
+ push( @result , $num ) ;
+ }
+}
+say join( ',' , @result ) ;
diff --git a/challenge-284/ulrich-rieke/raku/ch-1.raku b/challenge-284/ulrich-rieke/raku/ch-1.raku new file mode 100755 index 0000000000..bef1843f28 --- /dev/null +++ b/challenge-284/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,17 @@ +use v6 ;
+
+say "Enter some integers separated by blanks!" ;
+my $line = $*IN.get ;
+my @numbers = $line.words.map( {.Int} ) ;
+my %frequencies ;
+@numbers.map( {%frequencies{$_}++} ) ;
+my @selected = @numbers.grep( {%frequencies{$_} == $_} ) ;
+if ( @selected.elems > 1 ) {
+ say @selected.max ;
+}
+elsif ( @selected.elems == 1) {
+ say @selected[0] ;
+}
+else {
+ say -1 ;
+}
diff --git a/challenge-284/ulrich-rieke/raku/ch-2.raku b/challenge-284/ulrich-rieke/raku/ch-2.raku new file mode 100755 index 0000000000..d8c4165da7 --- /dev/null +++ b/challenge-284/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,29 @@ +use v6 ;
+
+say "Enter some integers, separated by blanks!" ;
+my $line = $*IN.get ;
+my @firstNumbers = $line.words.map( {.Int} ) ;
+say "Enter some unique integers, which are a subset of the first integers!" ;
+$line = $*IN.get ;
+my @secondNumbers = $line.words.map( {.Int} ) ;
+my %frequencies ;
+@firstNumbers.map( {%frequencies{$_}++} ) ;
+my @result ;
+my $firstSet = @firstNumbers.Set ;
+my $secondSet = @secondNumbers.Set ;
+for (@secondNumbers) -> $n {
+ for (1..%frequencies{$n} ) -> $times {
+ @result.push( $n ) ;
+ }
+}
+my @difference ;
+for ( $firstSet (-) $secondSet ) -> $element {
+ @difference.push( $element.key ) ;
+}
+@difference .= sort ;
+for ( @difference ) -> $n {
+ for (1..%frequencies{$n} ) {
+ @result.push( $n ) ;
+ }
+}
+say join( ',' , @result ) ;
diff --git a/challenge-284/ulrich-rieke/rust/ch-1.rs b/challenge-284/ulrich-rieke/rust/ch-1.rs new file mode 100755 index 0000000000..c9f773f4f9 --- /dev/null +++ b/challenge-284/ulrich-rieke/rust/ch-1.rs @@ -0,0 +1,20 @@ +use std::io ; + +fn main() { + println!("Enter a list of 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 luckies : Vec<&i32> = numbers.iter( ).filter( |&d| { + let ct : usize = numbers.iter( ).filter( | &n | *n == *d ).count( ) ; + ct as i32 == *d + } ).collect( ) ; + let result : i32 = match luckies.len( ) { + number if number > 1 => **luckies.iter( ).max( ).unwrap( ) , + number if number == 1 => *luckies[0] , + _ => -1 + } ; + println!("{}" , result ) ; +} diff --git a/challenge-284/ulrich-rieke/rust/ch-2.rs b/challenge-284/ulrich-rieke/rust/ch-2.rs new file mode 100755 index 0000000000..f84a70b44c --- /dev/null +++ b/challenge-284/ulrich-rieke/rust/ch-2.rs @@ -0,0 +1,52 @@ +use std::io ; +use std::collections::{HashMap , HashSet} ; + +fn main() { + println!("Enter some integers, separated by blanks!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( &mut inline ).unwrap( ) ; + let first_line : &str = inline.as_str( ).trim( ) ; + println!("Enter some distinct integers, that are a subset of above!" ) ; + let mut sec_line : String = String::new( ) ; + io::stdin( ).read_line( &mut sec_line ).unwrap( ) ; + let second_line : &str = sec_line.as_str( ).trim( ) ; + let first_numbers : Vec<i32> = first_line.split_whitespace( ).map( + |s| s.parse::<i32>( ).unwrap( )).collect( ) ; + let second_numbers : Vec<i32> = second_line.split_whitespace( ).map( + |s| s.parse::<i32>( ).unwrap( ) ).collect( ) ; + //frequencies of the numbers first entered + let mut frequencies = HashMap::new( ) ; + for n in &first_numbers { + frequencies.entry( n ).and_modify( |counter| *counter += 1 ). + or_insert( 1 ) ; + } + //result holds the final number vector + let mut result : Vec<i32> = Vec::new( ) ; + //we now form a set of the second list of integers entered + //we do that while traversing second_numbers for adding as + //many copies to the result set as in the first_numbers vector + let mut second_set : HashSet<i32> = HashSet::new( ) ; + for n in second_numbers { + let f = frequencies.get( &n ).unwrap( ) ; + for _ in 0..*f { + result.push( n ) ; + } + second_set.insert( n ) ; + } + let mut first_set : HashSet<i32> = HashSet::new( ) ; + for n in &first_numbers { + first_set.insert( *n ) ; + } + let mut diff_vec : Vec<i32> = Vec::new( ) ;//difference vector + for d in first_set.difference( &second_set ) { + diff_vec.push( *d ) ; + } + diff_vec.sort( ) ; + diff_vec.into_iter( ).for_each( | i | { + let f = frequencies.get( &i ).unwrap( ) ; + for _ in 0..*f { + result.push( i ) ; + } + }) ; + println!("{:?}" , result ) ; +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 6e6aa4100d..98a68025ea 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -1,59 +1,67 @@ { - "subtitle" : { - "text" : "[Champions: 4] Last updated at 2024-08-26 16:13:54 GMT" - }, "legend" : { "enabled" : 0 }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" - } + "title" : { + "text" : "The Weekly Challenge - 284" }, "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 - }, - "title" : { - "text" : "The Weekly Challenge - 284" + "followPointer" : 1, + "pointFormat" : "<span style='color:{point.color}'>{point.name}</span>: <b>{point.y:f}</b><br/>" }, - "xAxis" : { - "type" : "category" + "chart" : { + "type" : "column" }, "series" : [ { + "name" : "The Weekly Challenge - 284", "data" : [ { + "drilldown" : "Feng Chang", "y" : 2, - "name" : "Feng Chang", - "drilldown" : "Feng Chang" + "name" : "Feng Chang" }, { + "drilldown" : "Niels van Dijke", "name" : "Niels van Dijke", - "y" : 2, - "drilldown" : "Niels van Dijke" + "y" : 2 }, { - "drilldown" : "Paulo Custodio", "name" : "Paulo Custodio", - "y" : 2 + "y" : 2, + "drilldown" : "Paulo Custodio" }, { - "y" : 2, "name" : "Torgny Lyon", + "y" : 2, "drilldown" : "Torgny Lyon" + }, + { + "name" : "Ulrich Rieke", + "y" : 4, + "drilldown" : "Ulrich Rieke" } ], - "name" : "The Weekly Challenge - 284", "colorByPoint" : 1 } ], + "xAxis" : { + "type" : "category" + }, + "yAxis" : { + "title" : { + "text" : "Total Solutions" + } + }, + "subtitle" : { + "text" : "[Champions: 5] Last updated at 2024-08-26 16:20:22 GMT" + }, "plotOptions" : { "series" : { "dataLabels" : { - "format" : "{point.y}", - "enabled" : 1 + "enabled" : 1, + "format" : "{point.y}" }, "borderWidth" : 0 } @@ -61,48 +69,59 @@ "drilldown" : { "series" : [ { + "id" : "Feng Chang", "name" : "Feng Chang", "data" : [ [ "Raku", 2 ] - ], - "id" : "Feng Chang" + ] }, { - "id" : "Niels van Dijke", "data" : [ [ "Perl", 2 ] ], + "id" : "Niels van Dijke", "name" : "Niels van Dijke" }, { "name" : "Paulo Custodio", + "id" : "Paulo Custodio", + "data" : [ + [ + "Perl", + 2 + ] + ] + }, + { "data" : [ [ "Perl", 2 ] ], - "id" : "Paulo Custodio" + "name" : "Torgny Lyon", + "id" : "Torgny Lyon" }, { "data" : [ [ "Perl", 2 + ], + [ + "Raku", + 2 ] ], - "id" : "Torgny Lyon", - "name" : "Torgny Lyon" + "id" : "Ulrich Rieke", + "name" : "Ulrich Rieke" } ] - }, - "chart" : { - "type" : "column" } } diff --git a/stats/pwc-language-breakdown-2019.json b/stats/pwc-language-breakdown-2019.json index d5d829da61..3145c21723 100644 --- a/stats/pwc-language-breakdown-2019.json +++ b/stats/pwc-language-breakdown-2019.json @@ -1,28 +1,21 @@ { - "title" : { - "text" : "The Weekly Challenge Language" - }, - "tooltip" : { - "followPointer" : "true", - "headerFormat" : "<span style=\"font-size:11px\"></span>", - "pointFormat" : "<span style=\"color:{point.color}\">Challenge {point.name}</span>: <b>{point.y:f}</b><br/>" - }, - "legend" : { - "enabled" : "false" + "subtitle" : { + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2024-08-26 16:20:22 GMT" }, - "yAxis" : { - "title" : { - "text" : "Total Solutions" + "plotOptions" : { + "series" : { + "borderWidth" : 0, + "dataLabels" : { + "format" : "{point.y}", + "enabled" : 1 + } } }, - "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2024-08-26 16:13:54 GMT" - }, "drilldown" : { "series" : [ { - "name" : "041", "id" : "041", + "name" : "041", "data" : [ [ "Perl", @@ -39,8 +32,8 @@ ] }, { - "name" : "040", "id" : "040", + "name" : "040", "data" : [ [ "Perl", @@ -57,8 +50,6 @@ ] }, { - "name" : "039", - "id" : "039", "data" : [ [ "Perl", @@ -72,11 +63,11 @@ "Blog", 12 ] - ] + ], + "id" : "039", + "name" : "039" }, { - "name" : "038", - "id" : "038", "data" : [ [ "Perl", @@ -90,9 +81,13 @@ "Blog", 12 ] - ] + ], + "id" : "038", + "name" : "038" }, { + "id" : "037", + "name" : "037", "data" : [ [ "Perl", @@ -106,9 +101,7 @@ "Blog", 9 ] - ], - "id" : "037", - "name" : "037" + ] }, { "name" : "036", @@ -143,11 +136,10 @@ 9 ] ], - "id" : "035", - "name" : "035" + "name" : "035", + "id" : "035" }, { - "name" : "034", "data" : [ [ "Perl", @@ -162,9 +154,12 @@ 11 ] ], + "name" : "034", "id" : "034" }, { + "name" : "033", + "id" : "033", "data" : [ [ "Perl", @@ -178,9 +173,7 @@ "Blog", 10 ] - ], - "id" : "033", - "name" : "033" + ] }, { "name" : "032", @@ -201,7 +194,6 @@ ] }, { - "name" : "031", "data" : [ [ "Perl", @@ -216,10 +208,12 @@ 9 ] ], + "name" : "031", "id" : "031" }, { "id" : "030", + "name" : "030", "data" : [ [ "Perl", @@ -233,12 +227,9 @@ "Blog", 10 ] - ], - "name" : "030" + ] }, { - "name" : "029", - "id" : "029", "data" : [ [ "Perl", @@ -252,11 +243,11 @@ "Blog", 12 ] - ] + ], + "name" : "029", + "id" : "029" }, { - "name" : "028", - "id" : "028", "data" : [ [ "Perl", @@ -270,9 +261,13 @@ "Blog", 9 ] - ] + ], + "name" : "028", + "id" : "028" }, { + "name" : "027", + "id" : "027", "data" : [ [ "Perl", @@ -286,9 +281,7 @@ "Blog", 9 ] - ], - "id" : "027", - "name" : "027" + ] }, { "name" : "026", @@ -310,6 +303,7 @@ }, { "id" : "025", + "name" : "025", "data" : [ [ "Perl", @@ -323,12 +317,9 @@ "Blog", 12 ] - ], - "name" : "025" + ] }, { - "name" : "024", - "id" : "024", "data" : [ [ "Perl", @@ -342,10 +333,11 @@ "Blog", 11 ] - ] + ], + "name" : "024", + "id" : "024" }, { - "name" : "023", "data" : [ [ "Perl", @@ -360,10 +352,12 @@ 12 ] ], - "id" : "023" + "id" : "023", + "name" : "023" }, { "id" : "022", + "name" : "022", "data" : [ [ "Perl", @@ -377,11 +371,9 @@ "Blog", 10 ] - ], - "name" : "022" + ] }, { - "name" : "021", "data" : [ [ "Perl", @@ -396,10 +388,12 @@ 10 ] ], + "name" : "021", "id" : "021" }, { "id" : "020", + "name" : "020", "data" : [ [ "Perl", @@ -413,8 +407,7 @@ "Blog", 13 ] - ], - "name" : "020" + ] }, { "data" : [ @@ -431,10 +424,12 @@ 13 ] ], - "id" : "019", - "name" : "019" + "name" : "019", + "id" : "019" }, { + "id" : "018", + "name" : "018", "data" : [ [ "Perl", @@ -448,12 +443,11 @@ "Blog", 14 ] - ], - "id" : "018", - "name" : "018" + ] }, { "name" : "017", + "id" : "017", "data" : [ [ "Perl", @@ -467,11 +461,9 @@ "Blog", 12 ] - ], - "id" : "017" + ] }, { - "name" : "016", |
