diff options
| author | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2024-08-12 14:58:54 +0100 |
|---|---|---|
| committer | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2024-08-12 14:58:54 +0100 |
| commit | 7d94e5811f0f86d22b604b3cd678b0125d39570a (patch) | |
| tree | 2653b2e29d1cd19138226548e7cdcc24581e56a7 /challenge-282 | |
| parent | 3a7c7b9c0de30f21dcbe02dc84f908fe6ac72365 (diff) | |
| download | perlweeklychallenge-club-7d94e5811f0f86d22b604b3cd678b0125d39570a.tar.gz perlweeklychallenge-club-7d94e5811f0f86d22b604b3cd678b0125d39570a.tar.bz2 perlweeklychallenge-club-7d94e5811f0f86d22b604b3cd678b0125d39570a.zip | |
- Added solutions by Ulrich Rieke.
Diffstat (limited to 'challenge-282')
| -rwxr-xr-x | challenge-282/ulrich-rieke/cpp/ch-1.cpp | 25 | ||||
| -rwxr-xr-x | challenge-282/ulrich-rieke/cpp/ch-2.cpp | 29 | ||||
| -rwxr-xr-x | challenge-282/ulrich-rieke/haskell/ch-1.hs | 16 | ||||
| -rwxr-xr-x | challenge-282/ulrich-rieke/haskell/ch-2.hs | 8 | ||||
| -rwxr-xr-x | challenge-282/ulrich-rieke/perl/ch-1.pl | 23 | ||||
| -rwxr-xr-x | challenge-282/ulrich-rieke/perl/ch-2.pl | 19 | ||||
| -rwxr-xr-x | challenge-282/ulrich-rieke/raku/ch-1.raku | 12 | ||||
| -rwxr-xr-x | challenge-282/ulrich-rieke/raku/ch-2.raku | 9 | ||||
| -rwxr-xr-x | challenge-282/ulrich-rieke/rust/ch-1.rs | 19 | ||||
| -rwxr-xr-x | challenge-282/ulrich-rieke/rust/ch-2.rs | 20 |
10 files changed, 180 insertions, 0 deletions
diff --git a/challenge-282/ulrich-rieke/cpp/ch-1.cpp b/challenge-282/ulrich-rieke/cpp/ch-1.cpp new file mode 100755 index 0000000000..aceb6a89fa --- /dev/null +++ b/challenge-282/ulrich-rieke/cpp/ch-1.cpp @@ -0,0 +1,25 @@ +#include <iostream>
+#include <vector>
+#include <algorithm>
+#include <string>
+
+int main( ) {
+ std::cout << "Enter a long string consisting of digits only!\n" ;
+ std::string number ;
+ std::cin >> number ;
+ std::vector<std::string> triplets , selected ;
+ int pos = 0 ;
+ while ( pos < number.length( ) - 2 ) {
+ triplets.push_back( number.substr( pos , 3 ) ) ;
+ pos++ ;
+ }
+ std::copy_if( triplets.begin( ) , triplets.end( ) ,
+ std::back_inserter( selected ) , []( const auto & s ) {
+ return s.at( 0 ) == s.at( 1 ) && s.at( 1 ) == s.at( 2 ) ; } ) ;
+ if ( selected.size( ) == 0 )
+ std::cout << -1 << '\n' ;
+ else
+ std::cout << selected[0].substr( 0 , 1 ) << '\n' ;
+ return 0 ;
+}
+
diff --git a/challenge-282/ulrich-rieke/cpp/ch-2.cpp b/challenge-282/ulrich-rieke/cpp/ch-2.cpp new file mode 100755 index 0000000000..e60fe3f932 --- /dev/null +++ b/challenge-282/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,29 @@ +#include <iostream>
+#include <string>
+#include <cctype>
+#include <algorithm>
+#include <vector>
+
+std::string to_lower( std::string aWord ) {
+ std::transform( aWord.begin( ) , aWord.end( ) , aWord.begin( ) ,
+ tolower ) ;
+ return aWord ;
+}
+
+int main( ) {
+ std::cout << "Please enter an alphabetic word!\n" ;
+ std::string word ;
+ std::cin >> word ;
+ int pos = 0 ;
+ std::vector<std::string> pairs ;
+ while ( pos < word.length( ) - 2 ) {
+ pairs.push_back( word.substr( pos , 2 ) ) ;
+ pairs.push_back( word.substr( pos + 1 , 2 ) ) ;
+ pos += 2 ;
+ }
+ std::transform( pairs.begin( ) , pairs.end( ) , pairs.begin( ) ,
+ to_lower ) ;
+ std::cout << std::count_if( pairs.begin( ) , pairs.end( ) , []( const
+ auto & s ) { return s.at( 0 ) != s.at( 1 ) ; }) << '\n' ;
+ return 0 ;
+}
diff --git a/challenge-282/ulrich-rieke/haskell/ch-1.hs b/challenge-282/ulrich-rieke/haskell/ch-1.hs new file mode 100755 index 0000000000..9377af7d12 --- /dev/null +++ b/challenge-282/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,16 @@ +module Challenge282
+ where
+import Data.List.Split ( divvy )
+import Data.Char ( digitToInt )
+import Data.List ( group )
+
+solution :: String -> Int
+solution s = if null grouped then -1 else digitToInt $ head $ head grouped
+ where
+ grouped = filter (\gr -> length gr == 3 ) $ group s
+
+main :: IO ( )
+main = do
+ putStrLn "Enter a string consisting of digits only!"
+ numberstring <- getLine
+ print $ solution numberstring
diff --git a/challenge-282/ulrich-rieke/haskell/ch-2.hs b/challenge-282/ulrich-rieke/haskell/ch-2.hs new file mode 100755 index 0000000000..617c6f1884 --- /dev/null +++ b/challenge-282/ulrich-rieke/haskell/ch-2.hs @@ -0,0 +1,8 @@ +module Challenge282_2
+ where
+import Data.List.Split ( divvy )
+import Data.Char ( toLower )
+
+solution :: String -> Int
+solution s = length $ filter (\w -> head w /= last w ) $ map ( map toLower)
+ $ divvy 2 1 s
diff --git a/challenge-282/ulrich-rieke/perl/ch-1.pl b/challenge-282/ulrich-rieke/perl/ch-1.pl new file mode 100755 index 0000000000..4416abccc6 --- /dev/null +++ b/challenge-282/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,23 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+say "Enter a long integer!" ;
+my $number = <STDIN> ;
+chomp $number ;
+my $pos = 0 ;
+my @triplets ;
+my @selected ;
+while ( $pos < length( $number ) - 2 ) {
+ push( @triplets , substr( $number , $pos , 3 ) ) ;
+ $pos += 1 ;
+}
+@selected = grep { substr( $_ , 0 , 1 ) eq substr( $_ , 1 , 1 ) &&
+ substr( $_ , 1 , 1 ) eq substr( $_ , 2 , 1 ) } @triplets ;
+if ( scalar( @selected ) > 0 ) {
+ say substr( $selected[0] , 0 , 1 ) ;
+}
+else {
+ say -1 ;
+}
diff --git a/challenge-282/ulrich-rieke/perl/ch-2.pl b/challenge-282/ulrich-rieke/perl/ch-2.pl new file mode 100755 index 0000000000..f972680dd4 --- /dev/null +++ b/challenge-282/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,19 @@ +#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+say "Enter an alphabetic string!" ;
+my $word = <STDIN> ;
+chomp $word ;
+#create pairs of neighbouring characters , convert them to either uppercase
+#or lowercase and count the number of pairs with unequal letters
+my @pairs ;
+my $pos = 0 ;
+while ( $pos < length( $word ) - 2 ) {
+ push( @pairs , substr( $word , $pos , 2 ) ) ;
+ push( @pairs , substr( $word , $pos + 1 , 2 )) ;
+ $pos += 2 ;
+}
+say scalar( grep { substr( $_ , 0 , 1 ) ne substr( $_ , 1 , 1 ) } map {
+join ( '' , map { lc } split( // , $_ )) } @pairs ) ;
diff --git a/challenge-282/ulrich-rieke/raku/ch-1.raku b/challenge-282/ulrich-rieke/raku/ch-1.raku new file mode 100755 index 0000000000..64d0973ff6 --- /dev/null +++ b/challenge-282/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,12 @@ +use v6 ;
+
+say "Enter a long integer!" ;
+my $number = $*IN.get ;
+my @triplets = $number.comb.rotor( 3 => -2 ) ;
+my @selected = @triplets.grep( { $_[0] eq $_[1] && $_[1] eq $_[2] } ) ;
+if ( @selected.elems == 0 ) {
+ say -1 ;
+}
+else {
+ say @selected[0][0] ;
+}
diff --git a/challenge-282/ulrich-rieke/raku/ch-2.raku b/challenge-282/ulrich-rieke/raku/ch-2.raku new file mode 100755 index 0000000000..7f98446273 --- /dev/null +++ b/challenge-282/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,9 @@ +use v6 ;
+
+say "Enter an alphabetic string!" ;
+my $word = $*IN.get ;
+#we create pairs of neighbouring letters and convert every member of these
+#pairs into lowercase letters. After that , we count the pairs with
+#unequal letters
+say $word.comb.rotor( 2 => -1 ).map( {$_.map( {.lc} ) } ).grep( {$_[0] ne
+ $_[1] } ).elems ;
diff --git a/challenge-282/ulrich-rieke/rust/ch-1.rs b/challenge-282/ulrich-rieke/rust/ch-1.rs new file mode 100755 index 0000000000..3b013ef45f --- /dev/null +++ b/challenge-282/ulrich-rieke/rust/ch-1.rs @@ -0,0 +1,19 @@ +use std::io ; + +fn main() { + println!("Enter a long integer!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( &mut inline ).unwrap( ) ; + let entered_line : &str = inline.as_str( ).trim( ) ; + let my_chars : Vec<char> = entered_line.chars( ).collect( ) ; + let my_slice = &my_chars[..] ; + let triplets : Vec<_> = my_slice.windows( 3 ).collect( ) ; + let selected : Vec<_> = triplets.into_iter( ).filter( | &vec | + vec[0] == vec[1] && vec[1] == vec[2] ).collect( ) ; + if selected.len( ) == 0 { + println!("-1" ) ; + } + else { + println!("{}" , selected[0].get( 0 ).unwrap( ) ) ; + } +} diff --git a/challenge-282/ulrich-rieke/rust/ch-2.rs b/challenge-282/ulrich-rieke/rust/ch-2.rs new file mode 100755 index 0000000000..145b3518ba --- /dev/null +++ b/challenge-282/ulrich-rieke/rust/ch-2.rs @@ -0,0 +1,20 @@ +use std::io ; + +fn main() { + println!("Enter an alphabetic string!"); + let mut inline : String = String::new( ) ; + io::stdin( ).read_line( & mut inline ).unwrap( ) ; + let entered_line : &str = inline.as_str( ).trim( ) ; + let letters : Vec<char> = entered_line.chars( ).collect( ) ; + let letterslice = &letters[..] ; + let mut count : u8 = 0 ; + let mut iter = letterslice.windows( 2 ) ; + while let Some( pair ) = iter.next( ) { + let first_char : char = pair[0].to_ascii_lowercase( ) ; + let second_char : char = pair[1].to_ascii_lowercase( ) ; + if first_char != second_char { + count += 1 ; + } + } + println!("{}" , count ) ; +} |
