aboutsummaryrefslogtreecommitdiff
path: root/challenge-081/jaime
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-10-05 05:09:37 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-10-05 05:09:37 +0100
commitcef248ba491398a30061ba49fbc2a824116ae996 (patch)
tree6ecffe1f1d752b33fb17ffc3071eff00b2b3029a /challenge-081/jaime
parent2f3b402ce4ccee68dd46ba26529aea5408422a39 (diff)
downloadperlweeklychallenge-club-cef248ba491398a30061ba49fbc2a824116ae996.tar.gz
perlweeklychallenge-club-cef248ba491398a30061ba49fbc2a824116ae996.tar.bz2
perlweeklychallenge-club-cef248ba491398a30061ba49fbc2a824116ae996.zip
- Added template for Challenge 81.
Diffstat (limited to 'challenge-081/jaime')
-rw-r--r--challenge-081/jaime/README59
1 files changed, 59 insertions, 0 deletions
diff --git a/challenge-081/jaime/README b/challenge-081/jaime/README
new file mode 100644
index 0000000000..007cb58459
--- /dev/null
+++ b/challenge-081/jaime/README
@@ -0,0 +1,59 @@
+# Task #1
+
+Write a script to display months from the year 1900 to 2019 where you
+find 5 weekends i.e. 5 Friday, 5 Saturday and 5 Sunday.
+
+## Solution
+
+Months that contain five full weekends have 31 days and start on a Friday. Use `cal` to display March 2019 as an example.
+
+```
+#$ cal -h -m 3 2019 # cal is a UNIX utility
+ March 2019
+Su Mo Tu We Th Fr Sa
+ 1 2
+ 3 4 5 6 7 8 9
+10 11 12 13 14 15 16
+17 18 19 20 21 22 23
+24 25 26 27 28 29 30
+31
+```
+
+The solution runs `cal` and displays months that match this unique
+layout.
+
+# Task #2
+
+Write a script that can wrap the given paragraph at a specified column
+using the greedy algorithm.
+
+A simple way to do word wrapping is to use a greedy algorithm that
+puts as many words on a line as possible, then moving on to the next
+line to do the same until there are no more words left to place. This
+method is used by many modern word processors, such as OpenOffice.org
+Writer and Microsoft Word[citation needed]. This algorithm always uses
+the minimum possible number of lines but may lead to lines of widely
+varying lengths. The following pseudocode implements this algorithm:
+
+```
+SpaceLeft := LineWidth
+for each Word in Text
+ if (Width(Word) + SpaceWidth) > SpaceLeft
+ insert line break before Word in Text
+ SpaceLeft := LineWidth - Width(Word)
+ else
+ SpaceLeft := SpaceLeft - (Width(Word) + SpaceWidth)
+```
+
+Where LineWidth is the width of a line, SpaceLeft is the remaining
+width of space on the line to fill, SpaceWidth is the width of a
+single space character, Text is the input text to iterate over and
+Word is a word in this text.
+
+## Solution
+
+The solution follows the recommended pseudocode. Minor improvements
+avoid trailing whitespace.
+
+The script uses `Text::ParseWords::shellwords` from the standard
+library to extract chunks of words from `<STDIN>`.