diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-10-05 05:09:37 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2020-10-05 05:09:37 +0100 |
| commit | cef248ba491398a30061ba49fbc2a824116ae996 (patch) | |
| tree | 6ecffe1f1d752b33fb17ffc3071eff00b2b3029a /challenge-081/jaime | |
| parent | 2f3b402ce4ccee68dd46ba26529aea5408422a39 (diff) | |
| download | perlweeklychallenge-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/README | 59 |
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>`. |
