aboutsummaryrefslogtreecommitdiff
path: root/challenge-019
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-019')
-rw-r--r--challenge-019/arne-sommer/blog.txt1
-rw-r--r--challenge-019/arne-sommer/perl6/ch-1.p615
-rw-r--r--challenge-019/arne-sommer/perl6/ch-2.p642
3 files changed, 58 insertions, 0 deletions
diff --git a/challenge-019/arne-sommer/blog.txt b/challenge-019/arne-sommer/blog.txt
new file mode 100644
index 0000000000..b3de040d29
--- /dev/null
+++ b/challenge-019/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://perl6.eu/word-wrapped-weekends.html
diff --git a/challenge-019/arne-sommer/perl6/ch-1.p6 b/challenge-019/arne-sommer/perl6/ch-1.p6
new file mode 100644
index 0000000000..72add4191f
--- /dev/null
+++ b/challenge-019/arne-sommer/perl6/ch-1.p6
@@ -0,0 +1,15 @@
+#! /usr/bin/env perl6
+
+my @months;
+
+for 1900 .. 2019 -> $year
+{
+ for 1 .. 12 -> $month
+ {
+ my $date = Date.new($year, $month, 1);
+ @months.push( $date.year ~ "-" ~ $date.month.fmt('%02s') )
+ if $date.day-of-week == 5 && $date.days-in-month == 31;
+ }
+}
+
+say "Months with five weekends: { @months.join(", ") }.";
diff --git a/challenge-019/arne-sommer/perl6/ch-2.p6 b/challenge-019/arne-sommer/perl6/ch-2.p6
new file mode 100644
index 0000000000..4593491a63
--- /dev/null
+++ b/challenge-019/arne-sommer/perl6/ch-2.p6
@@ -0,0 +1,42 @@
+#! /usr/bin/env perl6
+
+multi sub MAIN (*@strings, :$columns = 80)
+{
+ greedy-wrap(@strings, :$columns)
+}
+
+multi sub MAIN ($file where $file.IO.e && $file.IO.r, :$columns = 80)
+{
+ greedy-wrap($file.IO.lines, :$columns)
+}
+
+sub greedy-wrap (*@strings, :$columns = 80)
+{
+ my $out = "";
+
+ sub flush
+ {
+ if $out
+ {
+ say $out;
+ $out = "";
+ }
+ }
+
+ for @strings -> $string
+ {
+ if $string eq ""
+ {
+ flush;
+ print "\n";
+ }
+
+ for $string.split(/\s+/) -> $word
+ {
+ flush if $out.chars + 1 + $word.chars >= $columns;
+
+ $out = $out ?? "$out $word" !! $word;
+ }
+ }
+ flush;
+}