[Odin] Clock ticks simulation[Odin] Clock ticks simulation
ā²ļø
Broken Clocks
Week 24, 2026
package main
import "core:fmt"
main :: proc () {
find_longest_unique_N_clock_combinations(N=2, debug=false)
find_longest_unique_N_clock_combinations(N=3, debug=false)
}
find_longest_unique_N_clock_combinations :: proc ($N: int, $debug: bool) {
#assert(N > 1)
clocks : [N] int
combinations: [dynamic] [N] int
max_cycles : int
defer delete(combinations)
for i in 0.. max_cycles:
max_cycles = cycles
clear(&combinations)
fallthrough
case cycles == max_cycles:
append(&combinations, clocks)
}
clocks_valid = false
#reverse for &c, i in clocks do if c < 60-N+1+i {
c += 1
for j:=i+1; j (cycles: int) {
when debug do logf :: fmt.printf
else do logf :: proc (..any) {}
Clock :: struct {
value : int,
step : int,
}
clocks: [dynamic; 10] Clock
assert(len(steps) <= cap(clocks))
logf("----")
for s in steps {
append(&clocks, Clock { 0, s })
logf("\tš%d", s)
}
logf("\n")
for cycles = 1; /**/; cycles += 1 {
clocks_in_sync := true
logf("-%02d-", cycles)
for &c in clocks {
c.value += c.step
c_in_sync := c.value%60 == 0
clocks_in_sync &&= c_in_sync
logf("\t%r%d", c_in_sync ? 'ā
' : 'ā', c.value)
}
logf("\n")
if clocks_in_sync do break
}
logf("\n")
return
}