aboutsummaryrefslogtreecommitdiff
path: root/challenge-204
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2023-02-20 03:27:16 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2023-02-20 03:27:16 +0000
commitd8a7b207606a794d23437eef55469f3ed4416bb9 (patch)
tree8fefb3029ee73893506e5423b9e1080bc8deedfe /challenge-204
parentdc7af67b6fd8ccb1e3d4aaaad59d3500eae7cebc (diff)
downloadperlweeklychallenge-club-d8a7b207606a794d23437eef55469f3ed4416bb9.tar.gz
perlweeklychallenge-club-d8a7b207606a794d23437eef55469f3ed4416bb9.tar.bz2
perlweeklychallenge-club-d8a7b207606a794d23437eef55469f3ed4416bb9.zip
- Added solutions by Ulrich Rieke.
Diffstat (limited to 'challenge-204')
-rw-r--r--challenge-204/ulrich-rieke/cpp/ch-1.cpp39
-rw-r--r--challenge-204/ulrich-rieke/cpp/ch-2.cpp55
-rw-r--r--challenge-204/ulrich-rieke/haskell/ch-1.hs10
-rw-r--r--challenge-204/ulrich-rieke/haskell/ch-2.hs32
-rw-r--r--challenge-204/ulrich-rieke/perl/ch-1.pl21
-rw-r--r--challenge-204/ulrich-rieke/perl/ch-2.pl36
-rw-r--r--challenge-204/ulrich-rieke/raku/ch-1.raku17
-rw-r--r--challenge-204/ulrich-rieke/raku/ch-2.raku23
-rw-r--r--challenge-204/ulrich-rieke/rust/ch-1.rs22
-rw-r--r--challenge-204/ulrich-rieke/rust/ch-2.rs44
10 files changed, 299 insertions, 0 deletions
diff --git a/challenge-204/ulrich-rieke/cpp/ch-1.cpp b/challenge-204/ulrich-rieke/cpp/ch-1.cpp
new file mode 100644
index 0000000000..a7887f1770
--- /dev/null
+++ b/challenge-204/ulrich-rieke/cpp/ch-1.cpp
@@ -0,0 +1,39 @@
+#include <string>
+#include <algorithm>
+#include <iostream>
+#include <vector>
+#include <numeric>
+
+std::vector<std::string> split( const std::string & startline , const std::string & sep ) {
+ std::vector<std::string> separated ;
+ std::string::size_type start { 0 } ;
+ std::string::size_type pos ;
+ do {
+ pos = startline.find_first_of( sep , start ) ;
+ separated.push_back( startline.substr(start , pos - start )) ;
+ start = pos + 1 ;
+ } while ( pos != std::string::npos ) ;
+ return separated ;
+}
+
+int main( ) {
+ std::vector<int> numbers ;
+ std::string line ;
+ std::cout << "Enter some integers, separated by blanks!\n" ;
+ std::getline( std::cin , line ) ;
+ std::vector<std::string> numberstrings ( split ( line , " " ) ) ;
+ for ( auto & s : numberstrings )
+ numbers.push_back( std::stoi( s ) ) ;
+ std::vector<int> differences ( numbers.size( ) ) ;
+ std::adjacent_difference( numbers.begin( ) , numbers.end( ) ,
+ differences.begin( ) ) ;
+ if ( std::all_of( differences.begin( ) + 1 , differences.end( ) ,
+ []( int i ) { return i <= 0 ; } ) ||
+ std::all_of( differences.begin( ) + 1 , differences.end( ) ,
+ []( int i ) { return i >= 0 ; } ) ) {
+ std::cout << 1 << std::endl ;
+ }
+ else
+ std::cout << 0 << std::endl ;
+ return 0 ;
+}
diff --git a/challenge-204/ulrich-rieke/cpp/ch-2.cpp b/challenge-204/ulrich-rieke/cpp/ch-2.cpp
new file mode 100644
index 0000000000..863b62caf2
--- /dev/null
+++ b/challenge-204/ulrich-rieke/cpp/ch-2.cpp
@@ -0,0 +1,55 @@
+#include <iostream>
+#include <string>
+#include <vector>
+#include <algorithm>
+
+std::vector<std::string> split( const std::string & startline , const std::string & sep ) {
+ std::vector<std::string> separated ;
+ std::string::size_type start { 0 } ;
+ std::string::size_type pos ;
+ do {
+ pos = startline.find_first_of( sep , start ) ;
+ separated.push_back( startline.substr(start , pos - start )) ;
+ start = pos + 1 ;
+ } while ( pos != std::string::npos ) ;
+ return separated ;
+}
+
+int main( ) {
+ std::cout << "Enter some integers, separated by a blank!\n" ;
+ std::cout << "Enter end to end!\n" ;
+ std::string line ;
+ std::getline( std::cin , line ) ;
+ std::vector<std::string> numberstrings ;
+ std::vector<std::vector<std::string>> allNumberstrings ;
+ std::vector<int> numbers ;
+ while ( line != "end" ) {
+ allNumberstrings.push_back( split ( line , " " ) ) ;
+ std::getline( std::cin , line ) ;
+ }
+ std::cout << "Enter the number of rows:\n" ;
+ int rows ;
+ std::cin >> rows ;
+ std::cout << "\nEnter the number of columns:\n" ;
+ int columns ;
+ std::cin >> columns ;
+ for ( const auto & vec : allNumberstrings ) {
+ for ( auto & s : vec )
+ numbers.push_back( std::stoi( s ) ) ;
+ }
+ if ( numbers.size( ) % ( rows * columns ) == 0 ) {
+ std::cout << '(' ;
+ for ( int i = 0 ; i < rows ; i++ ) {
+ std::cout << '(' ;
+ for ( int j = i * columns ; j < i * columns + columns ; j++ ) {
+ std::cout << *(numbers.begin( ) + j) << " " ;
+ }
+ std::cout << ") " ;
+ }
+ std::cout << ")\n" ;
+ }
+ else {
+ std::cout << 0 << std::endl ;
+ }
+ return 0 ;
+}
diff --git a/challenge-204/ulrich-rieke/haskell/ch-1.hs b/challenge-204/ulrich-rieke/haskell/ch-1.hs
new file mode 100644
index 0000000000..6eb4ea5b6b
--- /dev/null
+++ b/challenge-204/ulrich-rieke/haskell/ch-1.hs
@@ -0,0 +1,10 @@
+module Challenge204
+ where
+import Data.List.Split ( divvy )
+
+solution :: [Int] -> Int
+solution list = if all ( <= 0 ) differences || all ( >= 0 ) differences then 1
+else 0
+where
+ differences :: [Int]
+ differences = map (\li -> last li - head li ) $ divvy 2 1 list
diff --git a/challenge-204/ulrich-rieke/haskell/ch-2.hs b/challenge-204/ulrich-rieke/haskell/ch-2.hs
new file mode 100644
index 0000000000..da91af2e93
--- /dev/null
+++ b/challenge-204/ulrich-rieke/haskell/ch-2.hs
@@ -0,0 +1,32 @@
+module Challenge204_2
+ where
+import Data.List.Split ( chunksOf , splitOn)
+
+findSolution :: [[Int]] -> Int -> Int -> [[Int]]
+findSolution array rows cols
+ |mod ( length allNumbers ) ( rows * cols ) == 0 = chunksOf cols allNumbers
+ |otherwise = [[]]
+ where
+ allNumbers :: [Int]
+ allNumbers = concat array
+
+askForCorrectInput :: IO [[Int]]
+askForCorrectInput = do
+ putStrLn "Please enter an array as a series of sublists separated by | !"
+ putStrLn "Sublists should have identical number of elements!"
+ putStrLn "Separate numbers in sublists by blanks!"
+ numbers <- getLine
+ let numberlists = map words $ splitOn "|" numbers
+ if all (\li -> length li == ( length $ head numberlists )) numberlists
+ then return $ map ( map read ) numberlists
+ else do
+ askForCorrectInput
+
+main :: IO ( )
+main = do
+ numberlists <- askForCorrectInput
+ putStrLn "Please enter rows and columns, separated by a blank!"
+ nums <- getLine
+ let [r , c] = map read $ words nums
+ solution = findSolution numberlists r c
+ if solution == [[]] then print 0 else print solution
diff --git a/challenge-204/ulrich-rieke/perl/ch-1.pl b/challenge-204/ulrich-rieke/perl/ch-1.pl
new file mode 100644
index 0000000000..c951bc53dd
--- /dev/null
+++ b/challenge-204/ulrich-rieke/perl/ch-1.pl
@@ -0,0 +1,21 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+use List::Util qw ( all ) ;
+
+say "Enter some integers, separated by a blank!" ;
+my $line = <STDIN> ;
+chomp $line ;
+my @numbers = split( /\s/ , $line ) ;
+my @differences ;
+my $len = scalar( @numbers ) ;
+for my $i ( 0..$len - 2 ) {
+ push @differences , $numbers[ $i + 1 ] - $numbers[ $i ] ;
+}
+if (( all { $_ <= 0 } @differences) || (all { $_ >= 0 } @differences )) {
+ say 1 ;
+}
+else {
+ say 0 ;
+}
diff --git a/challenge-204/ulrich-rieke/perl/ch-2.pl b/challenge-204/ulrich-rieke/perl/ch-2.pl
new file mode 100644
index 0000000000..7b3fc1f634
--- /dev/null
+++ b/challenge-204/ulrich-rieke/perl/ch-2.pl
@@ -0,0 +1,36 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+use feature 'say' ;
+
+say "Enter some rows of integers, separated by blanks!" ;
+say "At the end, enter end!" ;
+my $line = <STDIN> ;
+chomp $line ;
+my @numbers ;
+while ( $line ne "end" ) {
+ for my $n ( split( /\s/ , $line ) ) {
+ push @numbers , $n ;
+ }
+ $line = <STDIN> ;
+ chomp $line ;
+}
+say "Enter a row and a column number , separated by blanks!" ;
+$line = <STDIN> ;
+chomp $line ;
+my ( $r , $c ) = split( /\s/ , $line ) ;
+my $len = scalar( @numbers ) ;
+if ( $len % ( $r * $c ) != 0 ) {
+ say 0 ;
+}
+else {
+ if ( $r == 1 ) {
+ say "(" . join( ',' , @numbers ) . ")" ;
+ }
+ else {
+ for my $i (0..$r - 1 ) {
+ print "(" . join( ',' , @numbers[$i * $c .. $i * $c + $c - 1] ) . ")" ;
+ }
+ }
+ print "\n" ;
+}
diff --git a/challenge-204/ulrich-rieke/raku/ch-1.raku b/challenge-204/ulrich-rieke/raku/ch-1.raku
new file mode 100644
index 0000000000..3eacb203fa
--- /dev/null
+++ b/challenge-204/ulrich-rieke/raku/ch-1.raku
@@ -0,0 +1,17 @@
+use v6 ;
+
+say "Enter some integers, separated by a blank!" ;
+my $line = $*IN.get ;
+my @numbers = $line.words.map( {.Int} ) ;
+my $len = @numbers.elems ;
+my @differences ;
+for (0..$len - 2 ) -> $i {
+ @differences.push( @numbers[ $i + 1 ] - @numbers[ $i ] ) ;
+}
+if @differences.grep( { $_ <= 0 } ).elems == $len - 1 ||
+@differences.grep( { $_ >= 0 } ).elems == $len - 1 {
+ say 1 ;
+}
+else {
+ say 0 ;
+}
diff --git a/challenge-204/ulrich-rieke/raku/ch-2.raku b/challenge-204/ulrich-rieke/raku/ch-2.raku
new file mode 100644
index 0000000000..8d6e2caebd
--- /dev/null
+++ b/challenge-204/ulrich-rieke/raku/ch-2.raku
@@ -0,0 +1,23 @@
+use v6 ;
+say "Enter some integers , separated by blanks! Enter end to stop entry!" ;
+my $line = $*IN.get ;
+my @numbers ;
+while ( $line ne "end" ) {
+ @numbers.push( |$line.words.map( {.Int} ) ) ;
+ $line = $*IN.get ;
+}
+say @numbers ;
+say "Enter a row and a column number , separated by blanks!" ;
+$line = $*IN.get ;
+my ( $r , $c ) = $line.words.map( {.Int} ) ;
+if ( not ( @numbers.elems %% ( $r * $c ) ) ) {
+ say 0 ;
+}
+else {
+ if ( $r == 1 ) {
+ say '(' ~ join( ',' , @numbers ) ~ ')' ;
+ }
+ else {
+ say @numbers.rotor( $c ) ;
+ }
+}
diff --git a/challenge-204/ulrich-rieke/rust/ch-1.rs b/challenge-204/ulrich-rieke/rust/ch-1.rs
new file mode 100644
index 0000000000..e83028da13
--- /dev/null
+++ b/challenge-204/ulrich-rieke/rust/ch-1.rs
@@ -0,0 +1,22 @@
+use std::io ;
+
+fn main() {
+ println!("Please input some integers, separated by blanks!");
+ let mut inline : String = String::new( ) ;
+ io::stdin( ).read_line( &mut inline ).unwrap( ) ;
+ let entered_line : &str = &*inline ;
+ let numbers : Vec<i32> = entered_line.split_whitespace( ).map(
+ | s | s.trim( ).parse::<i32>( ).unwrap( ) ).collect( ) ;
+ let mut differences : Vec<i32> = Vec::new( ) ;
+ let len = numbers.len( ) ;
+ for i in 0..len - 1 {
+ differences.push( numbers[i + 1 ] - numbers[ i ] ) ;
+ }
+ if differences.iter( ).all( | d | d <= &0 ) || differences.iter( ).
+ all( | d | d >= &0 ) {
+ println!("1") ;
+ }
+ else {
+ println!("0") ;
+ }
+}
diff --git a/challenge-204/ulrich-rieke/rust/ch-2.rs b/challenge-204/ulrich-rieke/rust/ch-2.rs
new file mode 100644
index 0000000000..581c6e852b
--- /dev/null
+++ b/challenge-204/ulrich-rieke/rust/ch-2.rs
@@ -0,0 +1,44 @@
+use std::io ;
+use std::io::{BufRead} ;
+
+fn main() -> io::Result<( )> {
+ println!("Enter some integers, separated by blanks!") ;
+ println!("Lines should have equal numbers of integers!") ;
+ println!("Then enter rows r and columns c , separated by blanks!" ) ;
+ println!("Then enter end") ;
+ let mut array : Vec<i32> = Vec::new( ) ;
+ let mut lines = io::stdin().lock( ).lines( ) ;
+ while let Some( line ) = lines.next( ) {
+ let last_input = line.unwrap( ) ;
+ if last_input != "end".to_string( ) {
+ let entered_line : &str = &*last_input ;
+ let numbers : Vec<i32> = entered_line.split_whitespace( ).
+ map( | s | s.trim( ).parse::<i32>( ).unwrap( )).collect( ) ;
+ numbers.iter( ).for_each( | i | array.push( *i )) ;
+ }
+ else {
+ break ;
+ }
+ }
+ let mut len = array.len( ) ;
+ let rows = array[len - 2 ] as usize ;
+ let columns = array[ len - 1 ] as usize ;
+ array.pop( ) ;
+ array.pop( ) ;
+ len = array.len( ) ;
+ if len % ( rows * columns ) != 0 {
+ println!("0") ;
+ }
+ else {
+ print!("(" ) ;
+ for i in 0..rows {
+ print!("(") ;
+ for j in i * columns..i * columns + columns {
+ print!("{} " , array[j] ) ;
+ }
+ print!(")") ;
+ }
+ println!(")" ) ;
+ }
+ Ok(())
+}