diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2023-02-20 03:27:16 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2023-02-20 03:27:16 +0000 |
| commit | d8a7b207606a794d23437eef55469f3ed4416bb9 (patch) | |
| tree | 8fefb3029ee73893506e5423b9e1080bc8deedfe /challenge-204 | |
| parent | dc7af67b6fd8ccb1e3d4aaaad59d3500eae7cebc (diff) | |
| download | perlweeklychallenge-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.cpp | 39 | ||||
| -rw-r--r-- | challenge-204/ulrich-rieke/cpp/ch-2.cpp | 55 | ||||
| -rw-r--r-- | challenge-204/ulrich-rieke/haskell/ch-1.hs | 10 | ||||
| -rw-r--r-- | challenge-204/ulrich-rieke/haskell/ch-2.hs | 32 | ||||
| -rw-r--r-- | challenge-204/ulrich-rieke/perl/ch-1.pl | 21 | ||||
| -rw-r--r-- | challenge-204/ulrich-rieke/perl/ch-2.pl | 36 | ||||
| -rw-r--r-- | challenge-204/ulrich-rieke/raku/ch-1.raku | 17 | ||||
| -rw-r--r-- | challenge-204/ulrich-rieke/raku/ch-2.raku | 23 | ||||
| -rw-r--r-- | challenge-204/ulrich-rieke/rust/ch-1.rs | 22 | ||||
| -rw-r--r-- | challenge-204/ulrich-rieke/rust/ch-2.rs | 44 |
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(()) +} |
