aboutsummaryrefslogtreecommitdiff
path: root/challenge-137
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-137')
-rw-r--r--challenge-137/ulrich-rieke/cpp/ch-2.cpp40
-rw-r--r--challenge-137/ulrich-rieke/haskell/ch-1.hs25
-rw-r--r--challenge-137/ulrich-rieke/perl/ch-1.pl28
-rw-r--r--challenge-137/ulrich-rieke/perl/ch-2.pl34
-rw-r--r--challenge-137/ulrich-rieke/raku/ch-1.raku16
-rw-r--r--challenge-137/ulrich-rieke/raku/ch-2.raku29
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 ;
+}