1
0
Fork 0
This commit is contained in:
Arthur K. 2026-05-14 20:19:22 +03:00
commit 7cc71fb719
Signed by: wzray
GPG key ID: B97F30FDC4636357
13 changed files with 840 additions and 0 deletions

View file

@ -0,0 +1,58 @@
package challenge
import (
"fmt"
"strconv"
"strings"
"time"
)
const day = 24 * time.Hour
func parseClock(value string) (time.Duration, error) {
parts := strings.Split(value, ":")
if len(parts) != 3 {
return 0, fmt.Errorf("bad time %q", value)
}
h, err := strconv.Atoi(parts[0])
if err != nil {
return 0, err
}
m, err := strconv.Atoi(parts[1])
if err != nil {
return 0, err
}
s, err := strconv.Atoi(parts[2])
if err != nil {
return 0, err
}
if h < 0 || h > 23 || m < 0 || m > 59 || s < 0 || s > 59 {
return 0, fmt.Errorf("bad time %q", value)
}
return time.Duration(h)*time.Hour + time.Duration(m)*time.Minute + time.Duration(s)*time.Second, nil
}
func formatClock(d time.Duration) string {
d %= day
if d < 0 {
d += day
}
h := int(d / time.Hour)
d -= time.Duration(h) * time.Hour
m := int(d / time.Minute)
d -= time.Duration(m) * time.Minute
s := int(d / time.Second)
return fmt.Sprintf("%02d:%02d:%02d", h, m, s)
}
func formatDuration(d time.Duration) string {
if d < 0 {
d = 0
}
h := int(d / time.Hour)
d -= time.Duration(h) * time.Hour
m := int(d / time.Minute)
d -= time.Duration(m) * time.Minute
s := int(d / time.Second)
return fmt.Sprintf("%02d:%02d:%02d", h, m, s)
}