aboutsummaryrefslogtreecommitdiff
path: root/challenge-282
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <mohammad.anwar@yahoo.com>2024-08-12 14:58:54 +0100
committerMohammad Sajid Anwar <mohammad.anwar@yahoo.com>2024-08-12 14:58:54 +0100
commit7d94e5811f0f86d22b604b3cd678b0125d39570a (patch)
tree2653b2e29d1cd19138226548e7cdcc24581e56a7 /challenge-282
parent3a7c7b9c0de30f21dcbe02dc84f908fe6ac72365 (diff)
downloadperlweeklychallenge-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-xchallenge-282/ulrich-rieke/cpp/ch-1.cpp25
-rwxr-xr-xchallenge-282/ulrich-rieke/cpp/ch-2.cpp29
-rwxr-xr-xchallenge-282/ulrich-rieke/haskell/ch-1.hs16
-rwxr-xr-xchallenge-282/ulrich-rieke/haskell/ch-2.hs8
-rwxr-xr-xchallenge-282/ulrich-rieke/perl/ch-1.pl23
-rwxr-xr-xchallenge-282/ulrich-rieke/perl/ch-2.pl19
-rwxr-xr-xchallenge-282/ulrich-rieke/raku/ch-1.raku12
-rwxr-xr-xchallenge-282/ulrich-rieke/raku/ch-2.raku9
-rwxr-xr-xchallenge-282/ulrich-rieke/rust/ch-1.rs19
-rwxr-xr-xchallenge-282/ulrich-rieke/rust/ch-2.rs20
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 ) ;
+}