diff options
Diffstat (limited to 'challenge-137')
| -rw-r--r-- | challenge-137/ulrich-rieke/cpp/ch-2.cpp | 40 | ||||
| -rw-r--r-- | challenge-137/ulrich-rieke/haskell/ch-1.hs | 25 | ||||
| -rw-r--r-- | challenge-137/ulrich-rieke/perl/ch-1.pl | 28 | ||||
| -rw-r--r-- | challenge-137/ulrich-rieke/perl/ch-2.pl | 34 | ||||
| -rw-r--r-- | challenge-137/ulrich-rieke/raku/ch-1.raku | 16 | ||||
| -rw-r--r-- | challenge-137/ulrich-rieke/raku/ch-2.raku | 29 |
6 files changed, 172 insertions, 0 deletions
diff --git a/challenge-137/ulrich-rieke/cpp/ch-2.cpp b/challenge-137/ulrich-rieke/cpp/ch-2.cpp new file mode 100644 index 0000000000..8b254c8dcb --- /dev/null +++ b/challenge-137/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,40 @@ +#include <iostream> +#include <string> +#include <cstdlib> +#include <algorithm> + +bool isPalindrome( int d ) { + std::string numberstring( std::to_string( d ) ) ; + std::string reversed { numberstring } ; + std::reverse( reversed.begin( ) , reversed.end( ) ) ; + return reversed == numberstring ; +} + +int main( int argc, char * argv[] ) { + int n = std::atoi( argv[ 1 ] ) ; + int output = 1 ; + while ( n < 10 || n > 1000 ) { + std::cout << "number should be between 10 and 1000!" << std::endl ; + std::cin >> n ; + } + int iterations = 0 ; + int number = n ; + while ( iterations < 500 ) { + std::string numberstring( std::to_string( n ) ) ; + std::reverse( numberstring.begin( ) , numberstring.end( ) ) ; + number += std::stoi( numberstring ) ; + if ( isPalindrome( number ) ) { + output = 0 ; + break ; + } + if ( number > 10000000 ) { + output = 1 ; + break ; + } + iterations++ ; + } + if ( iterations >= 500 ) + output = 1 ; + std::cout << output << std::endl ; + return 0 ; +} diff --git a/challenge-137/ulrich-rieke/haskell/ch-1.hs b/challenge-137/ulrich-rieke/haskell/ch-1.hs new file mode 100644 index 0000000000..3ff7450bf7 --- /dev/null +++ b/challenge-137/ulrich-rieke/haskell/ch-1.hs @@ -0,0 +1,25 @@ +module Challenge137 + where +import Data.Time.Calendar ( fromGregorian ) +import Data.Time.Calendar.WeekDate ( toWeekDate ) +import Data.List.Split ( chunksOf ) +import Data.List ( intercalate ) + +findSecond :: (Integer , Int , Int) -> Int +findSecond ( _ , b , _ ) = b + +findLastWeek :: Integer -> Int +findLastWeek year = findSecond $ toWeekDate $ fromGregorian year 12 31 + +toStrings :: [Integer] -> [String] +toStrings years = map (\li -> intercalate ", " li ) $ map (\l -> +map show l ) $ chunksOf 5 years + +solution :: [Integer] +solution = filter (\i -> (findLastWeek i) == 53 ) [1900..2100] + +main :: IO ( ) +main = do + longyears <- return solution + let stringlist = toStrings longyears + mapM_ putStrLn stringlist diff --git a/challenge-137/ulrich-rieke/perl/ch-1.pl b/challenge-137/ulrich-rieke/perl/ch-1.pl new file mode 100644 index 0000000000..c0ae85ee67 --- /dev/null +++ b/challenge-137/ulrich-rieke/perl/ch-1.pl @@ -0,0 +1,28 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; +use DateTime ; + +my @longYears ; +for my $year ( 1900..2100 ) { + my $dt = DateTime->new( + year => $year , + month => 12 , + day => 31 , + hour => 0 , + minute => 0 , + second => 0 , + nanosecond => 0 , + time_zone => 'America/Chicago') ; + if ( $dt->week_number == 53 ) { + push @longYears, $year ; + } +} +my $start = 0 ; +my $len = scalar @longYears ; +while ( $start +5 <= $len ) { + say join( ", " , @longYears[$start .. $start + 4]) . ", " ; + $start += 5 ; +} +say join(", " , @longYears[$start .. $len -1] ) ; diff --git a/challenge-137/ulrich-rieke/perl/ch-2.pl b/challenge-137/ulrich-rieke/perl/ch-2.pl new file mode 100644 index 0000000000..925d00960a --- /dev/null +++ b/challenge-137/ulrich-rieke/perl/ch-2.pl @@ -0,0 +1,34 @@ +#!/usr/bin/perl ; +use strict ; +use warnings ; +use feature 'say' ; + +sub isPalindrome { + my $num = shift ; + return $num eq (join ('', reverse split( // , $num ))) ; +} + +my $n = $ARGV[ 0 ] ; +while ( $n < 10 || $n > 1000 ) { + say "number should be between 5 and 1000!" ; + $n = <STDIN> ; + chomp $n ; +} +my $iterations = 0 ; +my $number = $n ; +my $output = 1 ; +while ( $iterations < 500 ) { + $number += (join ('' , reverse split( // , $number )) + 0 ) ; + if ( isPalindrome ( $number ) ) { + $output = 0 ; + last ; + } + if ( $number > 10000000 ) { + last ; + } + $iterations++ ; +} +if ( $iterations >= 500 ) { + $output = 1 ; +} +say $output ; diff --git a/challenge-137/ulrich-rieke/raku/ch-1.raku b/challenge-137/ulrich-rieke/raku/ch-1.raku new file mode 100644 index 0000000000..4b1b6ce169 --- /dev/null +++ b/challenge-137/ulrich-rieke/raku/ch-1.raku @@ -0,0 +1,16 @@ +use v6 ; + +my @longYears ; +for (1900 .. 2100) -> $year { + my $date = Date.new( "$year-12-31") ; + if ( $date.week-number == 53 ) { + @longYears.push( $year ) ; + } +} +my $start = 0 ; +my $len = @longYears.elems ; +while ( $start + 5 <= $len ) { + say @longYears[$start..$start + 4].join( ", ") ~ "," ; + $start += 5 ; +} +say @longYears[$start .. $len - 1].join( ", " ) ; diff --git a/challenge-137/ulrich-rieke/raku/ch-2.raku b/challenge-137/ulrich-rieke/raku/ch-2.raku new file mode 100644 index 0000000000..afdfd80221 --- /dev/null +++ b/challenge-137/ulrich-rieke/raku/ch-2.raku @@ -0,0 +1,29 @@ +use v6 ; + +sub isPalindrome( Int $m is copy ) { + return ~$m eq ~$m.flip ; +} + +subset Allowed of Int where 10 <= * <= 10000 ; +sub MAIN( Allowed $n is copy ) { + my $iternum = 0 ; + my $number = $n ; + my $output = 1 ; + while ( $iternum < 500 ) { + my $numberstring = ~$number ; + $number = $number + $numberstring.flip.Int ; + if ( isPalindrome( $number ) ) { + $output = 0 ; + last ; + } + if ( $number >= 10000000 ) { + $output = 1 ; + last ; + } + $iternum++ ; + } + if ( $iternum >= 500 ) { + $output = 1 ; + } + say $output ; +} |
