aboutsummaryrefslogtreecommitdiff
path: root/challenge-059/jaime
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2020-05-04 04:08:12 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2020-05-04 04:08:12 +0100
commit67cdd35efcf8c026c738ede53dcf8662282fbe29 (patch)
treed2bd813d75102310bc0c5a90d8f3eb28b3d47e19 /challenge-059/jaime
parent0d75138306bf5598becdcd034ee148ef8fd9da68 (diff)
downloadperlweeklychallenge-club-67cdd35efcf8c026c738ede53dcf8662282fbe29.tar.gz
perlweeklychallenge-club-67cdd35efcf8c026c738ede53dcf8662282fbe29.tar.bz2
perlweeklychallenge-club-67cdd35efcf8c026c738ede53dcf8662282fbe29.zip
- Added template for Challenge 059.
Diffstat (limited to 'challenge-059/jaime')
-rw-r--r--challenge-059/jaime/README59
1 files changed, 59 insertions, 0 deletions
diff --git a/challenge-059/jaime/README b/challenge-059/jaime/README
new file mode 100644
index 0000000000..007cb58459
--- /dev/null
+++ b/challenge-059/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>`.