aboutsummaryrefslogtreecommitdiff
path: root/challenge-333/jaime/README
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <mohammad.anwar@yahoo.com>2025-08-04 06:39:40 +0100
committerMohammad Sajid Anwar <mohammad.anwar@yahoo.com>2025-08-04 06:39:40 +0100
commitce2f933a023e15e5dac73508e56a9aec0e87fae6 (patch)
treed2d54647bed4feebdf83a192e43fb7a11157f2f6 /challenge-333/jaime/README
parentcbc92f551c43c4df13b334b528e11141fcbce400 (diff)
downloadperlweeklychallenge-club-ce2f933a023e15e5dac73508e56a9aec0e87fae6.tar.gz
perlweeklychallenge-club-ce2f933a023e15e5dac73508e56a9aec0e87fae6.tar.bz2
perlweeklychallenge-club-ce2f933a023e15e5dac73508e56a9aec0e87fae6.zip
- Added template for week 333.
Diffstat (limited to 'challenge-333/jaime/README')
-rw-r--r--challenge-333/jaime/README59
1 files changed, 59 insertions, 0 deletions
diff --git a/challenge-333/jaime/README b/challenge-333/jaime/README
new file mode 100644
index 0000000000..007cb58459
--- /dev/null
+++ b/challenge-333/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>`.