Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
# 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>`.