45 lines
848 B
Go
45 lines
848 B
Go
package q401
|
|
|
|
import "fmt"
|
|
|
|
func bin2time(leds []uint8) (string, bool) {
|
|
hour := leds[0]<<3 + leds[1]<<2 + leds[2]<<1 + leds[3]
|
|
minute := leds[4]<<5 +
|
|
leds[5]<<4 +
|
|
leds[6]<<3 +
|
|
leds[7]<<2 +
|
|
leds[8]<<1 +
|
|
leds[9]
|
|
if hour >= 12 || minute >= 60 {
|
|
return "", false
|
|
}
|
|
return fmt.Sprintf("%d:%02d", hour, minute), true
|
|
}
|
|
|
|
func iterate(remaining, offset int, leds []uint8, ret *[]string) {
|
|
if 10-offset < remaining {
|
|
return
|
|
}
|
|
if remaining == 0 {
|
|
if r, ok := bin2time(leds); ok {
|
|
*ret = append(*ret, r)
|
|
}
|
|
return
|
|
}
|
|
|
|
leds[offset] = 1
|
|
iterate(remaining-1, offset+1, leds, ret)
|
|
leds[offset] = 0
|
|
iterate(remaining, offset+1, leds, ret)
|
|
}
|
|
|
|
func readBinaryWatch(turnedOn int) []string {
|
|
if turnedOn >= 9 {
|
|
return nil
|
|
}
|
|
ret := []string{}
|
|
iterate(turnedOn, 0, make([]uint8, 10), &ret)
|
|
return ret
|
|
}
|
|
|
|
var _ = readBinaryWatch
|