From 0a3a46d3740c40406de84ea15a678a387a3cedb7 Mon Sep 17 00:00:00 2001 From: Mohammad S Anwar Date: Tue, 30 Jul 2019 19:13:42 +0100 Subject: - Added solutions by Arne Sommer. --- challenge-019/arne-sommer/blog.txt | 1 + challenge-019/arne-sommer/perl6/ch-1.p6 | 15 ++++++++++++ challenge-019/arne-sommer/perl6/ch-2.p6 | 42 +++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 challenge-019/arne-sommer/blog.txt create mode 100644 challenge-019/arne-sommer/perl6/ch-1.p6 create mode 100644 challenge-019/arne-sommer/perl6/ch-2.p6 (limited to 'challenge-019') 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; +} -- cgit