From ed251006b89063380df4e9ed19bee441bfb9c36c Mon Sep 17 00:00:00 2001 From: Mohammad Sajid Anwar Date: Wed, 12 Nov 2025 15:06:20 +0000 Subject: - Added solutions by Ali Moradi. - Added solutions by Ulrich Rieke. --- challenge-347/ulrich-rieke/cpp/ch-1.cpp | 42 ++++++++++++++++++ challenge-347/ulrich-rieke/cpp/ch-2.cpp | 70 ++++++++++++++++++++++++++++++ challenge-347/ulrich-rieke/haskell/ch-1.hs | 27 ++++++++++++ challenge-347/ulrich-rieke/haskell/ch-2.hs | 33 ++++++++++++++ challenge-347/ulrich-rieke/perl/ch-1.pl | 38 ++++++++++++++++ challenge-347/ulrich-rieke/perl/ch-2.pl | 60 +++++++++++++++++++++++++ challenge-347/ulrich-rieke/python/ch-1.py | 23 ++++++++++ challenge-347/ulrich-rieke/python/ch-2.py | 35 +++++++++++++++ challenge-347/ulrich-rieke/raku/ch-1.raku | 33 ++++++++++++++ challenge-347/ulrich-rieke/raku/ch-2.raku | 54 +++++++++++++++++++++++ challenge-347/ulrich-rieke/rust/ch-1.rs | 52 ++++++++++++++++++++++ challenge-347/ulrich-rieke/rust/ch-2.rs | 67 ++++++++++++++++++++++++++++ stats/pwc-current.json | 40 ++++++++++++++++- stats/pwc-language-breakdown-2019.json | 2 +- stats/pwc-language-breakdown-2020.json | 2 +- stats/pwc-language-breakdown-2021.json | 2 +- stats/pwc-language-breakdown-2022.json | 2 +- stats/pwc-language-breakdown-2023.json | 2 +- stats/pwc-language-breakdown-2024.json | 2 +- stats/pwc-language-breakdown-2025.json | 10 ++--- stats/pwc-language-breakdown-summary.json | 8 ++-- stats/pwc-leaders.json | 14 +++--- stats/pwc-summary-1-30.json | 6 +-- stats/pwc-summary-121-150.json | 2 +- stats/pwc-summary-151-180.json | 2 +- stats/pwc-summary-181-210.json | 2 +- stats/pwc-summary-211-240.json | 2 +- stats/pwc-summary-241-270.json | 2 +- stats/pwc-summary-271-300.json | 2 +- stats/pwc-summary-301-330.json | 6 +-- stats/pwc-summary-31-60.json | 2 +- stats/pwc-summary-61-90.json | 2 +- stats/pwc-summary-91-120.json | 2 +- stats/pwc-summary.json | 12 ++--- stats/pwc-yearly-language-summary.json | 10 ++--- 35 files changed, 621 insertions(+), 49 deletions(-) create mode 100755 challenge-347/ulrich-rieke/cpp/ch-1.cpp create mode 100755 challenge-347/ulrich-rieke/cpp/ch-2.cpp create mode 100755 challenge-347/ulrich-rieke/haskell/ch-1.hs create mode 100755 challenge-347/ulrich-rieke/haskell/ch-2.hs create mode 100755 challenge-347/ulrich-rieke/perl/ch-1.pl create mode 100755 challenge-347/ulrich-rieke/perl/ch-2.pl create mode 100755 challenge-347/ulrich-rieke/python/ch-1.py create mode 100755 challenge-347/ulrich-rieke/python/ch-2.py create mode 100755 challenge-347/ulrich-rieke/raku/ch-1.raku create mode 100755 challenge-347/ulrich-rieke/raku/ch-2.raku create mode 100755 challenge-347/ulrich-rieke/rust/ch-1.rs create mode 100755 challenge-347/ulrich-rieke/rust/ch-2.rs diff --git a/challenge-347/ulrich-rieke/cpp/ch-1.cpp b/challenge-347/ulrich-rieke/cpp/ch-1.cpp new file mode 100755 index 0000000000..755fe5361a --- /dev/null +++ b/challenge-347/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,42 @@ +#include +#include +#include +#include +#include +#include +using namespace std::string_literals ; + +int monthIndex( const std::string & mo ) { + static std::vector monthnames { "Jan" , "Feb" , "Mar" , "Apr" , "May" , + "Jun" , "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec" } ; + auto found = std::find( monthnames.begin( ) , monthnames.end( ) , mo ) ; + int n = static_cast(std::distance( monthnames.begin( ) , found )) ; + return n + 1 ; +} + +std::string parseDate( const std::string & date ) { + auto re = std::regex {R"(^(\d{1,2})[stndrh]{2}\s(\w{3})\s([12][901]\d{2})$)"} ; + std::smatch sm ; + std::regex_search( date , sm , re ) ; + std::string day { sm.str( 1 ) } ; + std::string monthtoLookFor { sm.str( 2 ) } ; + std::string year { sm.str( 3 ) } ; + int index = monthIndex( monthtoLookFor ) ; + std::string month { std::to_string( index ) } ; + if ( month.length( ) == 1 ) + month = "0"s += month ; + if ( day.length( ) == 1 ) + day = "0"s += day ; + std::string result ; + result += year + "-"s + month + "-"s + day ; + return result ; +} + +int main( ) { + std::cout << parseDate( "1st Jan 2025" ) << '\n' ; + std::cout << parseDate( "22nd Feb 2025" ) << '\n' ; + std::cout << parseDate( "15th Apr 2025") << '\n' ; + std::cout << parseDate( "23rd Oct 2025" ) << '\n' ; + std::cout << parseDate( "31st Dec 2025") << '\n' ; + return 0 ; +} diff --git a/challenge-347/ulrich-rieke/cpp/ch-2.cpp b/challenge-347/ulrich-rieke/cpp/ch-2.cpp new file mode 100755 index 0000000000..af3c310c05 --- /dev/null +++ b/challenge-347/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,70 @@ +#include +#include +#include +#include +using namespace std::string_literals ; + +std::string handleRest( const std::string & rest ) { + std::string result ; + char dash = '-' ; + int len = static_cast( rest.length( ) ) ; + if ( len == 2 || len == 3 ) { + result = rest ; + } + else { + result = rest.substr(0 , 2 ) ; + result.append(1, dash ) ; + result += rest.substr( 2 ) ; + } + return result ; +} + +void printParts( const std::vector & parts ) { + if ( parts.size( ) == 1 ) + std::cout << *parts.begin( ) << '\n' ; + else { + char dash { '-' } ; + std::string result ; + for ( auto s : parts ) { + result += s ; + result.append(1, dash ) ; + } + result.pop_back( ) ; + std::cout << result << '\n' ; + } +} + +int main( ) { + std::cout << "Enter a phone number consisting of digits , spaces and dashes only!\n" ; + std::string phonenumber ; + std::getline( std::cin , phonenumber ) ; + auto rx = std::regex{ R"(\s|\-)"s} ; + std::string reduced = std::regex_replace( phonenumber , rx , ""s ) ; + int len = static_cast( reduced.length( ) ) ; + if ( len <= 4 ) { + std::cout << handleRest( reduced ) << '\n' ; + } + else { + std::vector parts ; + int partnumber = len / 3 ; + int lengthrest = len % 3 ; + if ( lengthrest != 0 && lengthrest < 2 ) + partnumber-- ; + int pos = 0 ; + int i = 0 ; + while ( i < partnumber ) { + parts.push_back( reduced.substr( pos , 3 ) ) ; + pos += 3 ; + i++ ; + } + int restlen = len - partnumber * 3 ; + if ( restlen == 0 ) + printParts( parts ) ; + else { + std::string rest { reduced.substr( partnumber * 3 ) } ; + parts.push_back( handleRest( rest )) ; + printParts( parts ) ; + } + } + return 0 ; +} diff --git a/challenge-347/ulrich-rieke/haskell/ch-1.hs b/challenge-347/ulrich-rieke/haskell/ch-1.hs new file mode 100755 index 0000000000..0d7c720b71 --- /dev/null +++ b/challenge-347/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,27 @@ +module Challenge347 + where +import Data.Char ( isDigit ) +import Data.List ( findIndices ) + +months :: [String] +months = ["Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , + "Oct" , "Nov" , "Dec"] + +parseDate :: String -> [String] +parseDate str = + let [day , month , year] = words str + in [takeWhile isDigit day , month , year] + +convert :: String -> String +convert str = if length str == 1 then "0" ++ str else str + +solution :: String -> String +solution str = + let [day , month , year] = parseDate str + in year ++ "-" ++ (convert $ show ( (head $ findIndices (== month ) months ) + 1)) ++ + "-" ++ convert day + +main :: IO ( ) +main = do + print $ fmap solution ["1st Jan 2025" , "22nd Feb 2025" , "15th Apr 2025" , + "23rd Oct 2025" , "31st Dec 2025"] diff --git a/challenge-347/ulrich-rieke/haskell/ch-2.hs b/challenge-347/ulrich-rieke/haskell/ch-2.hs new file mode 100755 index 0000000000..61eedff4cb --- /dev/null +++ b/challenge-347/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,33 @@ +module Challenge347_2 + where +import Data.List.Split ( splitOneOf , chunksOf ) +import Data.List ( init , intercalate ) + +reduceString :: String -> String +reduceString str = foldl1 ( ++ ) $ splitOneOf "' '-" str + +solution :: String -> String +solution str + |rest == 0 = intercalate "-" $ chunksOf 3 reduced + |rest == 1 = if l == 4 then intercalate "-" $ chunksOf 2 reduced else + if length firstpart == 3 then firstpart ++ "-" ++ ( intercalate "-" $ + chunksOf 2 $ drop ( l -4 ) reduced ) else (intercalate "-" $ chunksOf 3 + firstpart ) ++ "-" ++ ( intercalate "-" $ chunksOf 2 $ drop ( l - 4 ) + reduced ) + |rest == 2 = (intercalate "-" $ chunksOf 3 $ take ( l - 2 ) reduced) ++ "-" + ++ drop ( l - 2 ) reduced + where + l :: Int + l = length reduced + reduced :: String + reduced = reduceString str + firstpart :: String + firstpart = take ( l - 4 ) reduced + rest :: Int + rest = mod l 3 + +main :: IO ( ) +main = do + putStrLn "Enter a string consisting of digits, dashes and spaces only!" + phonenumber <- getLine + print $ solution phonenumber diff --git a/challenge-347/ulrich-rieke/perl/ch-1.pl b/challenge-347/ulrich-rieke/perl/ch-1.pl new file mode 100755 index 0000000000..940dff6bc8 --- /dev/null +++ b/challenge-347/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; + +sub monthIndex { + my $month = shift ; + my @months = ("Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , + "Sep" , "Oct" , "Nov" , "Dec") ; + my $pos = 0 ; + while ( $months[$pos] ne $month ) { + $pos++ ; + } + return $pos + 1 ; +} + +sub parseDate { + my $date = shift ; + my ( $day , $month , $year ) ; + my $mi ; + if ( $date =~ /^([1-3]?\d)[strdhn]{2}\s(\w{3})\s([12][091]\d{2})$/ ) { + ( $day , $month , $year ) = ( $1 , $2 , $3 ) ; + if ( length $day == 1 ) { + $day = '0' . $day ; + } + $mi = monthIndex( $month ) ; + if ( length $mi == 1 ) { + $mi = '0' . $mi ; + } + } + my @parts = ($year , $mi , $day ) ; + return join( '-' , @parts ) ; +} +say parseDate( "1st Jan 2025") ; +say parseDate( "22nd Feb 2025") ; +say parseDate( "15th Apr 2025") ; +say parseDate( "23rd Oct 2025") ; +say parseDate( "31st Dec 2025") ; diff --git a/challenge-347/ulrich-rieke/perl/ch-2.pl b/challenge-347/ulrich-rieke/perl/ch-2.pl new file mode 100755 index 0000000000..34bf524719 --- /dev/null +++ b/challenge-347/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,60 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; + +sub handleRest { + my $rest = shift ; + my $len = length $rest ; + my $result ; + if ( $len == 2 || $len == 3) { + $result = $rest ; + } + else { + $result = substr( $rest , 0 , 2 ) . '-' . substr( $rest , 2 ) ; + } + return $result ; +} + +sub printParts { + my $parts = shift ; + if ( scalar( @$parts ) == 1 ) { + say $parts->[0] ; + } + else { + say join( '-' , @$parts ) ; + } +} + +say "Enter a telephone number containing digits , space and dash only!" ; +my $phonenumber = ; +chomp $phonenumber ; +$phonenumber =~ s/(\s|\-)//g ; +my $len = length $phonenumber ; +if ( $len <= 4 ) { + say handleRest( $phonenumber ) ; +} +else { + my @parts ; + my $partnumber = int( $len / 3 ) ; + my $lengthrest = $len % 3 ; + if ( $lengthrest != 0 && $lengthrest < 2 ) { + $partnumber-- ; + } + my $pos = 0 ; + my $i = 0 ; + while ( $i < $partnumber ) { + push( @parts , substr( $phonenumber , $pos , 3 ) ) ; + $pos += 3 ; + $i++ ; + } + my $restlen = $len - $partnumber * 3 ; + if ( $restlen == 0 ) { + printParts( \@parts ) ; + } + else { + my $rest = substr( $phonenumber , $partnumber * 3 ) ; + push( @parts , handleRest( $rest )) ; + printParts( \@parts ) ; + } +} diff --git a/challenge-347/ulrich-rieke/python/ch-1.py b/challenge-347/ulrich-rieke/python/ch-1.py new file mode 100755 index 0000000000..34efd226cf --- /dev/null +++ b/challenge-347/ulrich-rieke/python/ch-1.py @@ -0,0 +1,23 @@ +import re + +def parseDate( date ): + grp = re.search(r'^([1-3]?\d)[rdsthn]{2}\s(\w{3})\s([12][091]\d{2})$' , date ) ; + months = ["Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , "Sep" , + "Oct" , "Nov" , "Dec"] ; + (day , month , year ) = grp.groups( ) ; + if len(day) == 1: + day = '0' + day + monthindex = months.index( month ) + 1 + mi = str(monthindex) ; + if monthindex < 10: + mi = '0' + mi + result = year + '-' + mi + '-' + day + return result + +print( parseDate("1st Jan 2025")) +print( parseDate("22nd Feb 2025")) +print( parseDate("15th Apr 2025")) +print( parseDate("23rd Oct 2025")) +print( parseDate("31st Dec 2025")) + + diff --git a/challenge-347/ulrich-rieke/python/ch-2.py b/challenge-347/ulrich-rieke/python/ch-2.py new file mode 100755 index 0000000000..18499de8ff --- /dev/null +++ b/challenge-347/ulrich-rieke/python/ch-2.py @@ -0,0 +1,35 @@ +import re + +def findParts( word , partnum): + parts = [] + i = 0 + pos = 0 + while i < partnum: + parts.append( word[pos:pos + 3] ) + pos += 3 + i += 1 + return parts + +phonenumber = input( "Enter a string consisting of digits, dashes and spaces only!\n") +reduced = re.sub(r"\s|\-" , "" , phonenumber) +l = len( reduced ) +if l <= 4: + if l == 4: + print( reduced[0:2] + '-' + reduced[2:] ) + else: + print( reduced ) +else: + restlen = l % 3 + partnumber = l // 3 + if restlen == 1: + partnumber -= 1 + parts = findParts( reduced , partnumber ) + restterm = reduced[partnumber * 3:] + if len(restterm) == 0: + print('-'.join( parts )) + else: + solution = '-'.join( parts ) + if len( restterm ) == 4: + print( solution + '-' + restterm[0:2] + '-' + restterm[2:] ) + else: + print( solution + '-' + restterm ) diff --git a/challenge-347/ulrich-rieke/raku/ch-1.raku b/challenge-347/ulrich-rieke/raku/ch-1.raku new file mode 100755 index 0000000000..559126864e --- /dev/null +++ b/challenge-347/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,33 @@ +use v6 ; + +sub monthIndex( $month ) { + my @months = ("Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , "Jul" , "Aug" , + "Sep" , "Oct" , "Nov" , "Dec") ; + my $pos = 0 ; + while ( @months[$pos] ne $month ) { + $pos++ ; + } + return $pos + 1 ; +} + +sub parseDate( $date ) { + my ( $year , $day , $month , $mi ) ; + if ( $date ~~ /^(<[1..3]>?\d) <[strdnh]> ** 2 \s (\w **3) \s (<[12]><[091]>\d ** 2) + $/ ) { + ($day , $month , $year ) = ( ~$0 , ~$1 , $2 ) ; + if ($day.chars == 1) { + $day = '0' ~ $day ; + } + $mi = monthIndex( $month ) ; + } + if ( ~$mi.chars == 1 ) { + $mi = '0' ~ $mi ; + } + my @parts = ($year , $mi , $day) ; + return @parts.join('-') ; +} +say parseDate("1st Jan 2025") ; +say parseDate("22nd Feb 2025") ; +say parseDate( "15th Apr 2025" ) ; +say parseDate( "23rd Oct 2025" ) ; +say parseDate( "31st Dec 2025" ) ; diff --git a/challenge-347/ulrich-rieke/raku/ch-2.raku b/challenge-347/ulrich-rieke/raku/ch-2.raku new file mode 100755 index 0000000000..69c0ccf124 --- /dev/null +++ b/challenge-347/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,54 @@ +use v6 ; + +sub handleRest( $rest ) { + my $len = $rest.chars ; + my $result ; + if ( $len == 2 || $len == 3 ) { + $result = $rest ; + } + else { + $result = $rest.substr( 0 , 2 ) ~ '-' ~ $rest.substr( 2 ) ; + } + return $result ; +} + +sub printParts( @parts ) { + if ( @parts.elems == 1 ) { + say @parts[0] ; + } + else { + say @parts.join( '-' ) ; + } +} + +say "Enter a telephone number containing digits , space and dashes only!" ; +my $phonenumber = $*IN.get ; +$phonenumber ~~ s:g/(\s|'-')// ; +my $len = $phonenumber.chars ; +if ( $len <= 4 ) { + say handleRest( $phonenumber ) ; +} +else { + my @parts ; + my $partnumber = $len div 3 ; + my $lengthrest = $len % 3 ; + if ( $lengthrest != 0 && $lengthrest < 2 ) { + $partnumber-- ; + } + my $pos = 0 ; + my $i = 0 ; + while ( $i < $partnumber ) { + @parts.push( $phonenumber.substr( $pos , 3 ) ) ; + $pos += 3 ; + $i++ ; + } + my $restlen = $len - $partnumber * 3 ; + if ( $restlen == 0 ) { + printParts( @parts ) ; + } + else { + my $rest = $phonenumber.substr( $partnumber * 3 ) ; + @parts.push( handleRest( $rest ) ) ; + printParts( @parts ) ; + } +} diff --git a/challenge-347/ulrich-rieke/rust/ch-1.rs b/challenge-347/ulrich-rieke/rust/ch-1.rs new file mode 100755 index 0000000000..081679931c --- /dev/null +++ b/challenge-347/ulrich-rieke/rust/ch-1.rs @@ -0,0 +1,52 @@ +use regex::Regex ; + +fn convert( term : &str ) -> String { + let mut converted : String = String::new( ) ; + converted.push('0' ) ; + converted.push_str( term ) ; + converted +} + +fn parse_date( date : &str ) -> String { + let months : Vec<&str> = vec!["Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" , + "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec"] ; + let re = Regex::new(r"(?\d{1,2})[strdnh]{2}\s(?\w{3})\s(?[12]\d{3})"). + unwrap( ) ; + let caps = re.captures( date ).unwrap( ) ; + let day : &str = &caps["d"] ; + let month : &str = &caps["m"] ; + let year : &str = &caps["y"] ; + let mut rearranged : String = String::new( ) ; + rearranged.push_str( year ) ; + rearranged.push( '-' ) ; + let mut revised : String ; + let monthindex : usize = months.iter( ).position( |mo| *mo == month).unwrap( ) + 1; + let monthval : String = monthindex.to_string( ) ; + let monthrev : &str = monthval.as_str( ) ; + if monthrev.chars( ).count( ) == 1 { + revised = convert( monthrev ) ; + let monthpart : &str = revised.as_str( ) ; + rearranged.push_str( monthpart ) ; + } + else { + rearranged.push_str( monthrev ) ; + } + rearranged.push( '-' ) ; + if day.chars( ).count( ) == 1 { + revised = convert( day ) ; + let dayrev = revised.as_str( ) ; + rearranged.push_str( dayrev ) ; + } + else { + rearranged.push_str( day ) ; + } + rearranged +} + +fn main() { + println!("{:?}" , parse_date( "1st Jan 2025" )) ; + println!("{:?}" , parse_date( "22nd Feb 2025" )) ; + println!("{:?}" , parse_date( "15th Apr 2025" )) ; + println!("{:?}" , parse_date( "23rd Oct 2025" )) ; + println!("{:?}" , parse_date( "31st Dec 2025" )) ; +} diff --git a/challenge-347/ulrich-rieke/rust/ch-2.rs b/challenge-347/ulrich-rieke/rust/ch-2.rs new file mode 100755 index 0000000000..fb7a047c70 --- /dev/null +++ b/challenge-347/ulrich-rieke/rust/ch-2.rs @@ -0,0 +1,67 @@ +use std::io ; +use regex::Regex ; + +fn handle_rest( term : &str ) -> String { + let len : usize = term.chars( ).count( ) ; + let mut result : String = String::new( ) ; + if len == 2 || len == 3 { + result = term.into( ) ; + } + else { + for c in term.chars( ).take( 2 ) { + result.push( c ) ; + } + result.push( '-') ; + for c in term.chars( ).skip( 2 ) { + result.push( c ) ; + } + } + result +} + +fn main() { + println!("Enter a phone number consisting of digits , dashes and spaces!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( &mut inline ).unwrap( ) ; + let before : &str = inline.trim( ) ; + let re = Regex::new(r"\s|\-").unwrap( ) ; + let after = re.replace_all( before , "" ) ; + let mut result : String = String::new( ) ; + let len : usize = after.chars( ).count( ) ; + if len <= 4 { + println!("{:?}" , handle_rest( &after )) ; + } + else { + let mut partnumber : usize = len / 3 ; + let restlen : usize = len % 3 ; + if restlen != 0 && restlen < 2 { + partnumber -= 1 ; + } + let mut i : usize = 0 ; + let mut passed : usize = 0 ; + while i < partnumber { + for c in after.chars( ).skip( passed ).take( 3 ) { + result.push( c ) ; + } + result.push( '-' ) ; + passed += 3 ; + i += 1 ; + } + let restlen : usize = len - partnumber * 3 ; + if restlen == 0 { + result.pop( ) ; + println!("{:?}" , result ) ; + } + else { + let mut last_part : String = String::new( ) ; + for c in after.chars( ).skip(partnumber * 3 ) { + last_part.push( c ) ; + } + let end_term : &str = last_part.as_str( ) ; + let processed_rest : String = handle_rest( end_term ) ; + let rest : &str = processed_rest.as_str( ) ; + result.push_str( rest ) ; + println!("{:?}" , result ) ; + } + } +} diff --git a/stats/pwc-current.json b/stats/pwc-current.json index 90cc4d910c..417cb87441 100644 --- a/stats/pwc-current.json +++ b/stats/pwc-current.json @@ -4,6 +4,20 @@ }, "drilldown" : { "series" : [ + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Blog", + 1 + ] + ], + "id" : "Ali Moradi", + "name" : "Ali Moradi" + }, { "data" : [ [ @@ -182,6 +196,20 @@ "id" : "Thomas Kohler", "name" : "Thomas Kohler" }, + { + "data" : [ + [ + "Perl", + 2 + ], + [ + "Raku", + 2 + ] + ], + "id" : "Ulrich Rieke", + "name" : "Ulrich Rieke" + }, { "data" : [ [ @@ -210,6 +238,11 @@ { "colorByPoint" : 1, "data" : [ + { + "drilldown" : "Ali Moradi", + "name" : "Ali Moradi", + "y" : 3 + }, { "drilldown" : "Andreas Mahnke", "name" : "Andreas Mahnke", @@ -285,6 +318,11 @@ "name" : "Thomas Kohler", "y" : 4 }, + { + "drilldown" : "Ulrich Rieke", + "name" : "Ulrich Rieke", + "y" : 4 + }, { "drilldown" : "Wanderdoc", "name" : "Wanderdoc", @@ -295,7 +333,7 @@ } ], "subtitle" : { - "text" : "[Champions: 16] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 18] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge - 347" diff --git a/stats/pwc-language-breakdown-2019.json b/stats/pwc-language-breakdown-2019.json index 493b4541c1..2c030f1673 100644 --- a/stats/pwc-language-breakdown-2019.json +++ b/stats/pwc-language-breakdown-2019.json @@ -970,7 +970,7 @@ } ], "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-11 18:51:09 GMT" + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge Language" diff --git a/stats/pwc-language-breakdown-2020.json b/stats/pwc-language-breakdown-2020.json index dbe808c301..4b0d1bec21 100644 --- a/stats/pwc-language-breakdown-2020.json +++ b/stats/pwc-language-breakdown-2020.json @@ -1223,7 +1223,7 @@ } ], "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-11 18:51:09 GMT" + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge Language" diff --git a/stats/pwc-language-breakdown-2021.json b/stats/pwc-language-breakdown-2021.json index 95738e4e34..587c0e464c 100644 --- a/stats/pwc-language-breakdown-2021.json +++ b/stats/pwc-language-breakdown-2021.json @@ -1223,7 +1223,7 @@ } ], "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-11 18:51:09 GMT" + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge Language" diff --git a/stats/pwc-language-breakdown-2022.json b/stats/pwc-language-breakdown-2022.json index 51957433ec..ccecc77e68 100644 --- a/stats/pwc-language-breakdown-2022.json +++ b/stats/pwc-language-breakdown-2022.json @@ -1223,7 +1223,7 @@ } ], "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-11 18:51:09 GMT" + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge Language" diff --git a/stats/pwc-language-breakdown-2023.json b/stats/pwc-language-breakdown-2023.json index b4b9eabf47..8b734ef0c5 100644 --- a/stats/pwc-language-breakdown-2023.json +++ b/stats/pwc-language-breakdown-2023.json @@ -1200,7 +1200,7 @@ } ], "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-11 18:51:09 GMT" + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge Language" diff --git a/stats/pwc-language-breakdown-2024.json b/stats/pwc-language-breakdown-2024.json index 0d2dc3ba76..9421920e5e 100644 --- a/stats/pwc-language-breakdown-2024.json +++ b/stats/pwc-language-breakdown-2024.json @@ -1246,7 +1246,7 @@ } ], "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-11 18:51:09 GMT" + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge Language" diff --git a/stats/pwc-language-breakdown-2025.json b/stats/pwc-language-breakdown-2025.json index b3a8cc9a4e..da71253127 100644 --- a/stats/pwc-language-breakdown-2025.json +++ b/stats/pwc-language-breakdown-2025.json @@ -8,15 +8,15 @@ "data" : [ [ "Perl", - 25 + 29 ], [ "Raku", - 9 + 11 ], [ "Blog", - 6 + 7 ] ], "id" : "347", @@ -835,7 +835,7 @@ { "drilldown" : "347", "name" : "347", - "y" : 40 + "y" : 47 }, { "drilldown" : "346", @@ -1062,7 +1062,7 @@ } ], "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-11 18:51:09 GMT" + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge Language" diff --git a/stats/pwc-language-breakdown-summary.json b/stats/pwc-language-breakdown-summary.json index 99d34bc3f2..dee7350a5b 100644 --- a/stats/pwc-language-breakdown-summary.json +++ b/stats/pwc-language-breakdown-summary.json @@ -10,15 +10,15 @@ "data" : [ [ "Perl", - 17872 + 17876 ], [ "Raku", - 9893 + 9895 ], [ "Blog", - 6397 + 6398 ] ], "dataLabels" : { @@ -37,7 +37,7 @@ } ], "subtitle" : { - "text" : "Last updated at 2025-11-11 18:51:09 GMT" + "text" : "Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge Contributions [2019 - 2025]" diff --git a/stats/pwc-leaders.json b/stats/pwc-leaders.json index beb74b629f..1f082fc6ed 100644 --- a/stats/pwc-leaders.json +++ b/stats/pwc-leaders.json @@ -112,11 +112,11 @@ "data" : [ [ "Perl", - 530 + 532 ], [ "Raku", - 537 + 539 ] ], "id" : "Ulrich Rieke", @@ -368,7 +368,7 @@ "data" : [ [ "Perl", - 271 + 273 ], [ "Raku", @@ -376,7 +376,7 @@ ], [ "Blog", - 101 + 102 ] ], "id" : "Ali Moradi", @@ -831,7 +831,7 @@ { "drilldown" : "Ulrich Rieke", "name" : "7: Ulrich Rieke", - "y" : 2134 + "y" : 2142 }, { "drilldown" : "Flavio Poletti", @@ -911,7 +911,7 @@ { "drilldown" : "Ali Moradi", "name" : "23: Ali Moradi", - "y" : 974 + "y" : 980 }, { "drilldown" : "Jan Krnavek", @@ -1053,7 +1053,7 @@ } ], "subtitle" : { - "text" : "Click the columns to drilldown the score breakdown. Last updated at 2025-11-11 18:51:09 GMT" + "text" : "Click the columns to drilldown the score breakdown. Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "Team Leaders (TOP 50)" diff --git a/stats/pwc-summary-1-30.json b/stats/pwc-summary-1-30.json index 1ef7b7c020..984e2d46cb 100644 --- a/stats/pwc-summary-1-30.json +++ b/stats/pwc-summary-1-30.json @@ -24,7 +24,7 @@ 2, 43, 93, - 271, + 273, 44, 13, 8, @@ -94,7 +94,7 @@ 0, 0, 13, - 101, + 102, 0, 32, 4, @@ -115,7 +115,7 @@ } ], "subtitle" : { - "text" : "[Champions: 30] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 30] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary-121-150.json b/stats/pwc-summary-121-150.json index d0dcbd79bb..8e441242ce 100644 --- a/stats/pwc-summary-121-150.json +++ b/stats/pwc-summary-121-150.json @@ -115,7 +115,7 @@ } ], "subtitle" : { - "text" : "[Champions: 30] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 30] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary-151-180.json b/stats/pwc-summary-151-180.json index cc95b0764b..5854710cb6 100644 --- a/stats/pwc-summary-151-180.json +++ b/stats/pwc-summary-151-180.json @@ -115,7 +115,7 @@ } ], "subtitle" : { - "text" : "[Champions: 30] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 30] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary-181-210.json b/stats/pwc-summary-181-210.json index 20307eb3e5..9cc7ba34ab 100644 --- a/stats/pwc-summary-181-210.json +++ b/stats/pwc-summary-181-210.json @@ -115,7 +115,7 @@ } ], "subtitle" : { - "text" : "[Champions: 30] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 30] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary-211-240.json b/stats/pwc-summary-211-240.json index f35314d65f..b4a1354eb1 100644 --- a/stats/pwc-summary-211-240.json +++ b/stats/pwc-summary-211-240.json @@ -115,7 +115,7 @@ } ], "subtitle" : { - "text" : "[Champions: 30] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 30] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary-241-270.json b/stats/pwc-summary-241-270.json index e5fe2a43ef..eeb461e267 100644 --- a/stats/pwc-summary-241-270.json +++ b/stats/pwc-summary-241-270.json @@ -115,7 +115,7 @@ } ], "subtitle" : { - "text" : "[Champions: 30] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 30] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary-271-300.json b/stats/pwc-summary-271-300.json index cad8ff0807..20ddc5e108 100644 --- a/stats/pwc-summary-271-300.json +++ b/stats/pwc-summary-271-300.json @@ -115,7 +115,7 @@ } ], "subtitle" : { - "text" : "[Champions: 30] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 30] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary-301-330.json b/stats/pwc-summary-301-330.json index 6a27bdb332..feac2bb0fb 100644 --- a/stats/pwc-summary-301-330.json +++ b/stats/pwc-summary-301-330.json @@ -21,7 +21,7 @@ 0, 2, 4, - 530, + 532, 24, 18, 16, @@ -54,7 +54,7 @@ 2, 0, 0, - 537, + 539, 0, 0, 2, @@ -109,7 +109,7 @@ } ], "subtitle" : { - "text" : "[Champions: 28] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 28] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary-31-60.json b/stats/pwc-summary-31-60.json index 7eeb92435d..ae86fbee6b 100644 --- a/stats/pwc-summary-31-60.json +++ b/stats/pwc-summary-31-60.json @@ -115,7 +115,7 @@ } ], "subtitle" : { - "text" : "[Champions: 30] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 30] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary-61-90.json b/stats/pwc-summary-61-90.json index 9c84df3e6c..ddcfec6268 100644 --- a/stats/pwc-summary-61-90.json +++ b/stats/pwc-summary-61-90.json @@ -115,7 +115,7 @@ } ], "subtitle" : { - "text" : "[Champions: 30] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 30] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary-91-120.json b/stats/pwc-summary-91-120.json index 4a31f8a97d..3eacdf32cf 100644 --- a/stats/pwc-summary-91-120.json +++ b/stats/pwc-summary-91-120.json @@ -115,7 +115,7 @@ } ], "subtitle" : { - "text" : "[Champions: 30] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 30] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-summary.json b/stats/pwc-summary.json index fd3fcac12f..f58fe9d8b4 100644 --- a/stats/pwc-summary.json +++ b/stats/pwc-summary.json @@ -24,7 +24,7 @@ 1, 24, 48, - 136, + 137, 26, 9, 4, @@ -321,7 +321,7 @@ 0, 1, 2, - 287, + 288, 12, 9, 9, @@ -397,8 +397,8 @@ 6, 0, 0, - 9, 1, + 9, 0, 104, 0, @@ -654,7 +654,7 @@ 1, 0, 0, - 288, + 289, 0, 0, 2, @@ -690,7 +690,7 @@ 0, 0, 7, - 101, + 102, 0, 23, 4, @@ -1009,7 +1009,7 @@ } ], "subtitle" : { - "text" : "[Champions: 328] Last updated at 2025-11-11 18:51:09 GMT" + "text" : "[Champions: 328] Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge [2019 - 2025]" diff --git a/stats/pwc-yearly-language-summary.json b/stats/pwc-yearly-language-summary.json index 9d492ea772..37f41d8dd5 100644 --- a/stats/pwc-yearly-language-summary.json +++ b/stats/pwc-yearly-language-summary.json @@ -8,15 +8,15 @@ "data" : [ [ "Perl", - 2095 + 2099 ], [ "Raku", - 1017 + 1019 ], [ "Blog", - 807 + 808 ] ], "id" : "2025", @@ -151,7 +151,7 @@ { "drilldown" : "2025", "name" : "2025", - "y" : 3919 + "y" : 3926 }, { "drilldown" : "2024", @@ -188,7 +188,7 @@ } ], "subtitle" : { - "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-11 18:51:09 GMT" + "text" : "Click the columns to drilldown the language breakdown. Last updated at 2025-11-12 15:06:10 GMT" }, "title" : { "text" : "The Weekly Challenge Language" -- cgit