diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-05-04 04:08:12 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-05-04 04:08:12 +0100 |
| commit | 67cdd35efcf8c026c738ede53dcf8662282fbe29 (patch) | |
| tree | d2bd813d75102310bc0c5a90d8f3eb28b3d47e19 /challenge-059/jaime | |
| parent | 0d75138306bf5598becdcd034ee148ef8fd9da68 (diff) | |
| download | perlweeklychallenge-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/README | 59 |
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>`. |
