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