aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <mohammad.anwar@yahoo.com>2025-11-12 15:06:20 +0000
committerMohammad Sajid Anwar <mohammad.anwar@yahoo.com>2025-11-12 15:06:20 +0000
commited251006b89063380df4e9ed19bee441bfb9c36c (patch)
tree0bdf941f6f474e5bf2506c44dea91c596492cf04
parent7e527e85122404992ef7d38ddd016c9980b2806f (diff)
downloadperlweeklychallenge-club-ed251006b89063380df4e9ed19bee441bfb9c36c.tar.gz
perlweeklychallenge-club-ed251006b89063380df4e9ed19bee441bfb9c36c.tar.bz2
perlweeklychallenge-club-ed251006b89063380df4e9ed19bee441bfb9c36c.zip
- Added solutions by Ali Moradi.
- Added solutions by Ulrich Rieke.
-rwxr-xr-xchallenge-347/ulrich-rieke/cpp/ch-1.cpp42
-rwxr-xr-xchallenge-347/ulrich-rieke/cpp/ch-2.cpp70
-rwxr-xr-xchallenge-347/ulrich-rieke/haskell/ch-1.hs27
-rwxr-xr-xchallenge-347/ulrich-rieke/haskell/ch-2.hs33
-rwxr-xr-xchallenge-347/ulrich-rieke/perl/ch-1.pl38
-rwxr-xr-xchallenge-347/ulrich-rieke/perl/ch-2.pl60
-rwxr-xr-xchallenge-347/ulrich-rieke/python/ch-1.py23
-rwxr-xr-xchallenge-347/ulrich-rieke/python/ch-2.py35
-rwxr-xr-xchallenge-347/ulrich-rieke/raku/ch-1.raku33
-rwxr-xr-xchallenge-347/ulrich-rieke/raku/ch-2.raku54
-rwxr-xr-xchallenge-347/ulrich-rieke/rust/ch-1.rs52
-rwxr-xr-xchallenge-347/ulrich-rieke/rust/ch-2.rs67
-rw-r--r--stats/pwc-current.json40
-rw-r--r--stats/pwc-language-breakdown-2019.json2
-rw-r--r--stats/pwc-language-breakdown-2020.json2
-rw-r--r--stats/pwc-language-breakdown-2021.json2
-rw-r--r--stats/pwc-language-breakdown-2022.json2
-rw-r--r--stats/pwc-language-breakdown-2023.json2
-rw-r--r--stats/pwc-language-breakdown-2024.json2
-rw-r--r--stats/pwc-language-breakdown-2025.json10
-rw-r--r--stats/pwc-language-breakdown-summary.json8
-rw-r--r--stats/pwc-leaders.json14
-rw-r--r--stats/pwc-summary-1-30.json6
-rw-r--r--stats/pwc-summary-121-150.json2
-rw-r--r--stats/pwc-summary-151-180.json2
-rw-r--r--stats/pwc-summary-181-210.json2
-rw-r--r--stats/pwc-summary-211-240.json2
-rw-r--r--stats/pwc-summary-241-270.json2
-rw-r--r--stats/pwc-summary-271-300.json2
-rw-r--r--stats/pwc-summary-301-330.json6
-rw-r--r--stats/pwc-summary-31-60.json2
-rw-r--r--stats/pwc-summary-61-90.json2
-rw-r--r--stats/pwc-summary-91-120.json2
-rw-r--r--stats/pwc-summary.json12
-rw-r--r--stats/pwc-yearly-language-summary.json10
35 files changed, 621 insertions, 49 deletions
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 <iostream>
+#include <regex>
+#include <string>
+#include <vector>
+#include <algorithm>
+#include <iterator>
+using namespace std::string_literals ;
+
+int monthIndex( const std::string & mo ) {
+ static std::vector<std::string> 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<int>(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 <string>
+#include <iostream>
+#include <regex>
+#include <vector>
+using namespace std::string_literals ;
+
+std::string handleRest( const std::string & rest ) {
+ std::string result ;
+ char dash = '-' ;
+ int len = static_cast<int>( 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<std::string> & 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<int>( reduced.length( ) ) ;
+ if ( len <= 4 ) {
+ std::cout << handleRest( reduced ) << '\n' ;
+ }
+ else {
+ std::vector<std::string> 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 = <STDIN> ;
+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>\d{1,2})[strdnh]{2}\s(?<m>\w{3})\s(?<y>[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
@@ -9,6 +9,20 @@
[
"Perl",
2
+ ],
+ [
+ "Blog",
+ 1
+ ]
+ ],
+ "id" : "Ali Moradi",
+ "name" : "Ali Moradi"
+ },
+ {
+ "data" : [
+ [
+ "Perl",
+ 2
]
],
"id" : "Andreas Mahnke",
@@ -187,6 +201,20 @@
[
"Perl",
2
+ ],
+ [
+ "Raku",
+ 2
+ ]
+ ],
+ "id" : "Ulrich Rieke",
+ "name" : "Ulrich Rieke"
+ },
+ {
+ "data" : [
+ [
+ "Perl",
+ 2
]
],
"id" : "Wanderdoc",
@@ -211,6 +239,11 @@
"colorByPoint" : 1,
"data" : [
{
+ "drilldown" : "Ali Moradi",
+ "name" : "Ali Moradi",
+ "y" : 3
+ },
+ {
"drilldown" : "Andreas Mahnke",
"name" : "Andreas Mahnke",
"y" : 2
@@ -286,6 +319,11 @@
"y" : 4
},
{
+ "drilldown" : "Ulrich Rieke",
+ "name" : "Ulrich Rieke",
+ "y" : 4
+ },
+ {
"drilldown" : "Wanderdoc",
"name" : "Wanderdoc",
"y" : 2
@@ -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/