aboutsummaryrefslogtreecommitdiff
path: root/challenge-059
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-059')
-rw-r--r--challenge-059/ulrich-rieke/perl/ch-1.pl24
-rw-r--r--challenge-059/ulrich-rieke/raku/ch-1.p619
-rw-r--r--challenge-059/ulrich-rieke/raku/ch-2.p630
3 files changed, 73 insertions, 0 deletions
diff --git a/challenge-059/ulrich-rieke/perl/ch-1.pl b/challenge-059/ulrich-rieke/perl/ch-1.pl
new file mode 100644
index 0000000000..88bd4280cd
--- /dev/null
+++ b/challenge-059/ulrich-rieke/perl/ch-1.pl
@@ -0,0 +1,24 @@
+#!/usr/bin/perl ;
+use strict ;
+use warnings ;
+
+#create 2 partitions of elements less than or greater than k by "grepping"
+#through the array. Shifting from the second array preserves the relative
+#order
+sub reorder {
+ my $array = shift ;
+ my $k = shift ;
+ my @first_part = grep { $_ < $k } @{$array} ;
+ my @second_part = grep { $_ >= $k } @{$array} ;
+ while ( @second_part ) {
+ push( @first_part, shift @second_part ) ;
+ }
+ return @first_part ;
+}
+
+#of n elements in @ARGV, the first n - 1 are the list, the last element is k
+my $len = $#ARGV ;
+my @array = @ARGV[0..$len - 1 ] ;
+my @reordered = reorder (\@array , $ARGV[ -1 ] ) ;
+map { print "$_ -> " } @reordered[0..$len - 2] ;
+print "$reordered[ -1]\n" ;
diff --git a/challenge-059/ulrich-rieke/raku/ch-1.p6 b/challenge-059/ulrich-rieke/raku/ch-1.p6
new file mode 100644
index 0000000000..f1fef5c43c
--- /dev/null
+++ b/challenge-059/ulrich-rieke/raku/ch-1.p6
@@ -0,0 +1,19 @@
+use v6 ;
+
+sub reorder( @array , Int $k ) {
+ my @first_part = @array.grep( { $_ < $k } ) ;
+ my @second_part = @array.grep( { $_ >= $k } ) ;
+ my @reordered = @first_part.append: @second_part ;
+ return @reordered ;
+}
+
+#the last element in the argument list is k, the rest in front is the
+#array
+sub MAIN( *@ARGS ) {
+ my @numarray = @ARGS[0..@ARGS.elems - 2] ;
+ my $num = @ARGS[ *-1 ] ;
+ my @reordered = reorder( @numarray, $num ) ;
+ my $len = @numarray.elems ;
+ @reordered[0..$len - 2].map( { print "$_ -> " }) ;
+ say @reordered[*-1] ;
+}
diff --git a/challenge-059/ulrich-rieke/raku/ch-2.p6 b/challenge-059/ulrich-rieke/raku/ch-2.p6
new file mode 100644
index 0000000000..382691ffb9
--- /dev/null
+++ b/challenge-059/ulrich-rieke/raku/ch-2.p6
@@ -0,0 +1,30 @@
+use v6 ;
+
+sub myF( Int $a , Int $b --> Int ) {
+ my $numstring1 = $a.base(2).Str ;
+ my $numstring2 = $b.base(2).Str ;
+ my $len1 = $numstring1.chars ;
+ my $len2 = $numstring2.chars ;
+ if ( $len1 < $len2 ) {
+ $numstring1 = ("0" xx ($len2 - $len1)).join ~ $numstring1 ;
+ }
+ if ( $len2 < $len1 ) {
+ $numstring2 = ("0" xx ($len1 - $len2)).join ~ $numstring2 ;
+ }
+ my Int $diff = 0 ;
+ for (0..$numstring1.chars - 1 ) -> $i {
+ if ( $numstring1.substr( $i , 1 ) ne $numstring2.substr( $i , 1 ) ) {
+ $diff++ ;
+ }
+ }
+ return $diff ;
+}
+
+sub MAIN( *@ARGS ) {
+ my $sum = 0 ;
+ my @combinations = @ARGS.combinations( 2 ) ;
+ for @combinations -> $combi {
+ $sum += myF( $combi[ 0 ] , $combi[ 1 ] ) ;
+ }
+ say "The sum is $sum!" ;
+}