ðŸŽ‰ Exercism Research is now launched. Help Exercism, help science and have some fun at research.exercism.io ðŸŽ‰

# khoguan's solution

## to Clock in the Raku Track

Published at Jul 18 2020 · 0 comments
Instructions
Test suite
Solution

#### Note:

This exercise has changed since this solution was written.

Implement a clock that handles times without dates.

You should be able to add and subtract minutes to it.

Two clocks that represent the same time should be equal to each other.

## Resources

Remember to check out the Raku documentation and resources pages for information, tips, and examples if you get stuck.

## Running the tests

There is a test suite and module included with the exercise. The test suite (a file with the extension `.t6`) will attempt to run routines from the module (a file with the extension `.pm6`). Add/modify routines in the module so that the tests will pass! You can view the test data by executing the command `perl6 --doc *.t6` (* being the name of the test suite), and run the test suite for the exercise by executing the command `prove6 .` in the exercise directory.

## Source

Pairing session with Erin Drummond https://twitter.com/ebdrummond

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

``````unit class Clock;

has Int \$.hour;
has Int \$.minute;

method time {
self!norm;
return "{\$!hour.fmt("%02d")}:{\$!minute.fmt("%02d")}";
}

\$!minute += \$amount;
self!norm;
return self;
}

method subtract-minutes (\$amount) {
\$!minute -= \$amount;
self!norm;
return self;
}

method !norm {
return if 0 <= \$!hour <= 23 and 0 <= \$!minute < 60;

my \$extra-hours = 0;
my \$minus-min = False;

if \$!minute < 0 {
\$minus-min = True;
\$!minute = -\$!minute;
}

if \$!minute > 59 {
\$extra-hours = \$!minute div 60;
\$!minute %= 60;
}

if not \$minus-min {
\$!hour += \$extra-hours;
} else {
\$!hour -= \$extra-hours;
if \$!minute > 0 {
\$!hour--;
\$!minute = 60 - \$!minute;
}
}
\$!hour %= 24;
}``````