diff options
| author | Dave Jacoby <jacoby.david@gmail.com> | 2019-10-15 12:46:04 -0400 |
|---|---|---|
| committer | Dave Jacoby <jacoby.david@gmail.com> | 2019-10-15 12:46:04 -0400 |
| commit | 24426f6290fca403db3695d5d75c8ef73cb2f9cd (patch) | |
| tree | cf15a22e10829753bca5b3f46d270d1c0fc80ca6 | |
| parent | 75be55bb559bd117451f073fa34b026ae9d6738e (diff) | |
| parent | fbf3555710a337cb56092b85f26354d19dfc2b64 (diff) | |
| download | perlweeklychallenge-club-24426f6290fca403db3695d5d75c8ef73cb2f9cd.tar.gz perlweeklychallenge-club-24426f6290fca403db3695d5d75c8ef73cb2f9cd.tar.bz2 perlweeklychallenge-club-24426f6290fca403db3695d5d75c8ef73cb2f9cd.zip | |
Merge branch 'master' of github.com:manwar/perlweeklychallenge-club
66 files changed, 6628 insertions, 6144 deletions
diff --git a/challenge-006/laurent-rosenfeld/blog2.txt b/challenge-006/laurent-rosenfeld/blog2.txt new file mode 100644 index 0000000000..62823cef69 --- /dev/null +++ b/challenge-006/laurent-rosenfeld/blog2.txt @@ -0,0 +1 @@ +https://perlweeklychallenge.org/blog/p6-review-challenge-006 diff --git a/challenge-007/laurent-rosenfeld/blog1.txt b/challenge-007/laurent-rosenfeld/blog1.txt new file mode 100644 index 0000000000..aaa76dc917 --- /dev/null +++ b/challenge-007/laurent-rosenfeld/blog1.txt @@ -0,0 +1 @@ +https://perlweeklychallenge.org/blog/p6-review-challenge-007 diff --git a/challenge-008/laurent-rosenfeld/blog2.txt b/challenge-008/laurent-rosenfeld/blog2.txt new file mode 100644 index 0000000000..eee1adcc91 --- /dev/null +++ b/challenge-008/laurent-rosenfeld/blog2.txt @@ -0,0 +1 @@ +https://perlweeklychallenge.org/blog/p6-review-challenge-008 diff --git a/challenge-028/kian-meng-ang/blog.txt b/challenge-028/kian-meng-ang/blog.txt new file mode 100644 index 0000000000..a953214e01 --- /dev/null +++ b/challenge-028/kian-meng-ang/blog.txt @@ -0,0 +1 @@ +https://perlweeklychallenge.org/blog/review-challenge-028 diff --git a/challenge-028/laurent-rosenfeld/blog1.txt b/challenge-028/laurent-rosenfeld/blog1.txt new file mode 100644 index 0000000000..a21ce6b51e --- /dev/null +++ b/challenge-028/laurent-rosenfeld/blog1.txt @@ -0,0 +1 @@ +https://perlweeklychallenge.org/blog/p6-review-challenge-028 diff --git a/challenge-029/nazareno-delucca/README b/challenge-029/ndelucca/README index 201de28eb4..201de28eb4 100644 --- a/challenge-029/nazareno-delucca/README +++ b/challenge-029/ndelucca/README diff --git a/challenge-030/burkhard-nickels/perl5/ch-1.pl b/challenge-030/burkhard-nickels/perl5/ch-1.pl new file mode 100644 index 0000000000..48006099fa --- /dev/null +++ b/challenge-030/burkhard-nickels/perl5/ch-1.pl @@ -0,0 +1,21 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use DateTime; + +for( my $i=2019; $i<=2100; $i++) { + my $date = DateTime->new( + year => $i, + month => 12, + day => 25, + hour => 12, + minute => 0, + second => 0, + time_zone => 'Europe/Berlin', + ); + print $date->dmy('.'), " is ", $date->day_name, "\n" if $date->day_name eq 'Sunday'; +} + + + diff --git a/challenge-030/burkhard-nickels/perl5/ch-2.pl b/challenge-030/burkhard-nickels/perl5/ch-2.pl new file mode 100644 index 0000000000..47ece4e482 --- /dev/null +++ b/challenge-030/burkhard-nickels/perl5/ch-2.pl @@ -0,0 +1,95 @@ +#!/usr/bin/perl + +# ---------------------------------- +# Perl Weekly Challenge 30 Task #2 +# +# Write a script to print all possible series of 3 positive numbers, +# where in each series at least one of the number is even and sum of +# the three numbers is always 12. For example, 3,4,5. +# +# ---------------------------------- + +use strict; +use warnings; +use PDL; +use Data::Dumper qw(Dumper); +$Data::Dumper::Indent=0; + +print "----------- Solution with Array ----------\n"; +solution_array(); +print "----------- Solution with PDL ------------\n"; +solution_pdl(); +print "----------- Solution with Map ------------\n"; +solution_map(); +print "------------------------------------------\n"; + +# ---------------------------------- +# Solution 1: with Array +# +# Takes only values from 1 to 12, Zero is excluded in this solution. +# +sub solution_array { + my @a; + for(my $i=1; $i<=12; $i++) { + for(my $j=$i; $j<=12; $j++) { + for(my $k=$j; $k<=12; $k++) { + my $sum = $i + $j + $k; + $a[$i][$j][$k] = $sum; + print "Sum: $i + $j + $k = $sum\n" if $sum == 12 && even($i,$j,$k); + } + } + } +} +sub even { + my (@nrn) = @_; + my $ret = 0; + foreach my $n (@nrn) { if($n%2==0) { $ret = 1; } } + return $ret; +} + +# ---------------------------------- +# Solution 2: with PDL +# +# With PDL also Zero Values are included. +# +sub solution_pdl { + my $n = 13; + my $sum = xvals($n,$n) + yvals($n,$n) + zvals($n,$n,$n); + my $idx = whichND($sum==12); + my $href = eleminate( $idx->unpdl ); + foreach my $key (keys %$href) { print "$key\n"; } +} +sub eleminate { + my $aref = shift; + my @tmp = grep { $_ if (!($_->[0]%2) || !($_->[1]%2) || !($_->[2])) } @$aref; + my %h = map { join("-",sort @$_) => 1 } @tmp; + return \%h; +} + +# ---------------------------------- +# Solution 3: with map +# +# Also no Zero values +# +sub solution_map { + my @a = grep { $_!=0 } map { + my $x = $_; + map { + my $y = $_; + my $b2 = $_+$x; + map { + my $z = $_; + my $sum = $_+$b2; + if($sum == 12 && (!($x%2)||!($y%2)||!($z%2))) { + [ $sum, $x, $y, $z ]; } + else { 0 } + } ($y .. 12) + } ($x .. 12) + } (1 .. 12); + + my $str = Dumper(\@a); + $str =~ s/\]/\]\n/g; + print $str; +} + + diff --git a/challenge-030/daniel-mita/perl5/ch-2.pl b/challenge-030/daniel-mita/perl5/ch-2.pl new file mode 100755 index 0000000000..87e6d2e717 --- /dev/null +++ b/challenge-030/daniel-mita/perl5/ch-2.pl @@ -0,0 +1,15 @@ +#!/usr/bin/env perl +use 5.012; +use warnings; + +use List::Util qw(sum); + +for my $i ( 1..10 ) { + for my $j ( 1..10 ) { + for my $k ( 1..10 ) { + my @group = ( $i, $j, $k ); + say join '|', map { sprintf '%2u', $_ } @group + if sum(@group) == 12; + } + } +} diff --git a/challenge-030/daniel-mita/perl6/ch-2.p6 b/challenge-030/daniel-mita/perl6/ch-2.p6 index 84de4a0008..085e8af697 100755 --- a/challenge-030/daniel-mita/perl6/ch-2.p6 +++ b/challenge-030/daniel-mita/perl6/ch-2.p6 @@ -1,6 +1,6 @@ #!/usr/bin/env perl6 use v6; -for [X] (1..12) xx 3 { - .fmt('%2u', '|').say when .sum == 12 && .any %% 2; +for [X] ( 1..10 ) xx 3 { + .fmt('%2u', '|').say when .sum == 12; } diff --git a/challenge-030/lars-thegler/perl5/.gitignore b/challenge-030/lars-thegler/perl5/.gitignore deleted file mode 100644 index 7d9ecbe3b8..0000000000 --- a/challenge-030/lars-thegler/perl5/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_Inline/ diff --git a/challenge-030/lars-thegler/perl5/ch-1.pl b/challenge-030/lars-thegler/perl5/ch-1.pl new file mode 100755 index 0000000000..a287480a8d --- /dev/null +++ b/challenge-030/lars-thegler/perl5/ch-1.pl @@ -0,0 +1,12 @@ +#!/usr/bin/env perl + +use Modern::Perl; +use Time::Piece; + +# Write a script to list dates for Sunday Christmas between 2019 and 2100. +# For example, 25 Dec 2022 is Sunday. + +for my $year ( 2019 .. 2100 ) { + my $christmas_day = Time::Piece->strptime( "$year-12-25", '%F' ); + say $christmas_day->strftime('%A %F') if $christmas_day->day_of_week == 0; # sunday +} diff --git a/challenge-030/lars-thegler/perl5/ch-2.pl b/challenge-030/lars-thegler/perl5/ch-2.pl new file mode 100755 index 0000000000..1ed5557b47 --- /dev/null +++ b/challenge-030/lars-thegler/perl5/ch-2.pl @@ -0,0 +1,20 @@ +#!/usr/bin/env perl + +use Modern::Perl; +use Time::Piece; + +# Write a script to print all possible series of 3 positive numbers, +# where in each series at least one of the number is even and sum of the +# three numbers is always 12. For example, 3,4,5. + +for my $a ( 1 .. 12 ) { + for my $b ( 1 .. 12 ) { + for my $c ( 1 .. 12 ) { + next unless ( even($a) || even($b) || even($c) ); + next unless $a + $b + $c == 12; + say "$a,$b,$c"; + } + } +} + +sub even { !!( $_[0] % 2 ) } diff --git a/challenge-030/laurent-rosenfeld/blog.txt b/challenge-030/laurent-rosenfeld/blog.txt new file mode 100644 index 0000000000..e9fb157e70 --- /dev/null +++ b/challenge-030/laurent-rosenfeld/blog.txt @@ -0,0 +1 @@ +http://blogs.perl.org/users/laurent_r/2019/10/perl-weekly-challenge-30-sunday-christmas-and-triplets.html diff --git a/challenge-030/laurent-rosenfeld/perl5/ch-1.pl b/challenge-030/laurent-rosenfeld/perl5/ch-1.pl new file mode 100644 index 0000000000..6047ae45a7 --- /dev/null +++ b/challenge-030/laurent-rosenfeld/perl5/ch-1.pl @@ -0,0 +1,11 @@ +#!/usr/bin/perl +use strict; +use warnings; +use feature qw/say/; +use Time::Local; + +say "Years during which Christmas falls on a Sunday:"; +for my $year (119..200) { + my $date = timegm(0, 0, 0, 25, 11, $year); + say $year + 1900 if (gmtime $date)[6] == 0; +} diff --git a/challenge-030/laurent-rosenfeld/perl5/ch-2.pl b/challenge-030/laurent-rosenfeld/perl5/ch-2.pl new file mode 100644 index 0000000000..ad0f9b1474 --- /dev/null +++ b/challenge-030/laurent-rosenfeld/perl5/ch-2.pl @@ -0,0 +1,16 @@ +#!/usr/bin/perl +use strict; +use warnings; +use feature qw/say/; + +for my $i (1..10) { + for my $j ($i..10) { + last if $i + $j > 11; + for my $k ($j..10) { + next unless $i * $j * $k % 2 == 0; # Check 1 number is even + my $sum = $i + $j + $k; + last if $sum > 12; + say "$i, $j, $k" if $sum == 12; + } + } +} diff --git a/challenge-030/laurent-rosenfeld/perl6/ch-1.p6 b/challenge-030/laurent-rosenfeld/perl6/ch-1.p6 new file mode 100644 index 0000000000..26ba1fbeb0 --- /dev/null +++ b/challenge-030/laurent-rosenfeld/perl6/ch-1.p6 @@ -0,0 +1,5 @@ +use v6; +for 2019..2100 -> $year { + say "Christmas of year $year falls on a Sunday." + if Date.new($year, 12, 25).day-of-week == 7; +} diff --git a/challenge-030/laurent-rosenfeld/perl6/ch-2.p6 b/challenge-030/laurent-rosenfeld/perl6/ch-2.p6 new file mode 100644 index 0000000000..090c1def87 --- /dev/null +++ b/challenge-030/laurent-rosenfeld/perl6/ch-2.p6 @@ -0,0 +1,6 @@ +use v6; + +for 1..10 X 1..10 X 1..10 -> $triplet { + next unless ([+] | $triplet) == 12; + say $triplet; +} diff --git a/challenge-030/nazareno-delucca/README b/challenge-030/nazareno-delucca/README deleted file mode 100644 index 201de28eb4..0000000000 --- a/challenge-030/nazareno-delucca/README +++ /dev/null @@ -1 +0,0 @@ -Solutions by Nazareno Delucca. diff --git a/challenge-030/ndelucca/README b/challenge-030/ndelucca/README new file mode 100644 index 0000000000..8285f30f94 --- /dev/null +++ b/challenge-030/ndelucca/README @@ -0,0 +1 @@ +Solutions by ndelucca. diff --git a/challenge-030/ndelucca/perl5/ch-1.pl b/challenge-030/ndelucca/perl5/ch-1.pl new file mode 100644 index 0000000000..f8581d9244 --- /dev/null +++ b/challenge-030/ndelucca/perl5/ch-1.pl @@ -0,0 +1,14 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use DateTime; + +for (2019 .. 2100){ + + my $dt = DateTime->new(year => $_, month => 12, day => 25); + + print $dt->strftime("%Y-%m-%d\n") if $dt->strftime("%A") eq 'Sunday'; + +} diff --git a/challenge-030/ndelucca/perl5/ch-2.pl b/challenge-030/ndelucca/perl5/ch-2.pl new file mode 100644 index 0000000000..f7de711897 --- /dev/null +++ b/challenge-030/ndelucca/perl5/ch-2.pl @@ -0,0 +1,34 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +# I'll assume 0 is considered unsigned in this case, so it doesn't enter the "positive" category +# Could've used only 1 "random" array, but it is more clear using two +my $filter = 12; +my @random1 = (1..$filter); +my @random2 = (1..$filter); + +my @evens = grep { $_ % 2 == 0 } (1..$filter); + +my @compliant = (); + +for my $even (@evens){ + + for my $rand1 (@random1){ + + for my $rand2 (@random2){ + + my $sum = $even + $rand1 + $rand2; + + if ($sum == $filter){ + + my $combination = join ", ", sort ($even,$rand1,$rand2); + push @compliant, $combination unless ( grep { $_ eq $combination } @compliant ); + + } + } + } +} + +printf "(%s)\n", $_ for @compliant; diff --git a/challenge-030/yet-ebreo/perl5/ch-2.pl b/challenge-030/yet-ebreo/perl5/ch-2.pl index 87a22ba2ef..941afc638f 100644 --- a/challenge-030/yet-ebreo/perl5/ch-2.pl +++ b/challenge-030/yet-ebreo/perl5/ch-2.pl @@ -9,7 +9,7 @@ use warnings; use feature 'say'; my $r = join ",", 0..12; -eval==12 && /[02468]\+/ && say y/+/,/r while glob "{$r}+{$r}+{$r}"; +eval==12 && say y/+/,/r while glob "{$r}+{$r}+{$r}"; =begin @@ -28,11 +28,17 @@ perl .\ch-2.pl 0,11,1 0,12,0 1,0,11 +1,1,10 1,2,9 +1,3,8 1,4,7 +1,5,6 1,6,5 +1,7,4 1,8,3 +1,9,2 1,10,1 +1,11,0 2,0,10 2,1,9 2,2,8 @@ -45,10 +51,15 @@ perl .\ch-2.pl 2,9,1 2,10,0 3,0,9 +3,1,8 3,2,7 +3,3,6 3,4,5 +3,5,4 3,6,3 +3,7,2 3,8,1 +3,9,0 4,0,8 4,1,7 4,2,6 @@ -59,9 +70,13 @@ perl .\ch-2.pl 4,7,1 4,8,0 5,0,7 +5,1,6 5,2,5 +5,3,4 5,4,3 +5,5,2 5,6,1 +5,7,0 6,0,6 6,1,5 6,2,4 @@ -70,18 +85,24 @@ perl .\ch-2.pl 6,5,1 6,6,0 7,0,5 +7,1,4 7,2,3 +7,3,2 7,4,1 +7,5,0 8,0,4 8,1,3 8,2,2 8,3,1 8,4,0 9,0,3 +9,1,2 9,2,1 +9,3,0 10,0,2 10,1,1 10,2,0 11,0,1 +11,1,0 12,0,0 =cut
\ No newline at end of file diff --git a/challenge-030/yet-ebreo/perl6/ch-1.p6 b/challenge-030/yet-ebreo/perl6/ch-1.p6 index 041e7854b1..294df0499c 100644 --- a/challenge-030/yet-ebreo/perl6/ch-1.p6 +++ b/challenge-030/yet-ebreo/perl6/ch-1.p6 @@ -1,4 +1,3 @@ -#!/usr/bin/env perl # Write a script to list dates for Sunday # Christmas between 2019 and 2100. # For example, 25 Dec 2022 is Sunday. @@ -8,4 +7,17 @@ for 2019..2100 -> $year { if ($date.day-of-week == 7) { say "12/25/$year" } -}
\ No newline at end of file +} + +# perl6 .\ch-1.p6 +# 12/25/2022 +# 12/25/2033 +# 12/25/2039 +# 12/25/2044 +# 12/25/2050 +# 12/25/2061 +# 12/25/2067 +# 12/25/2072 +# 12/25/2078 +# 12/25/2089 +# 12/25/2095
\ No newline at end of file diff --git a/challenge-030/yet-ebreo/perl6/ch-2.p6 b/challenge-030/yet-ebreo/perl6/ch-2.p6 new file mode 100644 index 0000000000..893a07fd15 --- /dev/null +++ b/challenge-030/yet-ebreo/perl6/ch-2.p6 @@ -0,0 +1,99 @@ +# Write a script to print all possible series of 3 numbers +# Where in each series at least one of the +# number is even and sum of the three numbers +# is always 12. For example, 3,4,5. + +$_.sum == 12 && .say for [X] (0 .. 12) xx 3; + +# perl6 .\ch-2.p6 +# (0 0 12) +# (0 1 11) +# (0 2 10) +# (0 3 9) +# (0 4 8) +# (0 5 7) +# (0 6 6) +# (0 7 5) +# (0 8 4) +# (0 9 3) +# (0 10 2) +# (0 11 1) +# (0 12 0) +# (1 0 11) +# (1 1 10) +# (1 2 9) +# (1 3 8) +# (1 4 7) +# (1 5 6) +# (1 6 5) +# (1 7 4) +# (1 8 3) +# (1 9 2) +# (1 10 1) +# (1 11 0) +# (2 0 10) +# (2 1 9) +# (2 2 8) +# (2 3 7) +# (2 4 6) +# (2 5 5) +# (2 6 4) < |
