diff --git a/gencodes/main.go b/gencodes/main.go new file mode 100644 index 0000000..eb1aa38 --- /dev/null +++ b/gencodes/main.go @@ -0,0 +1,79 @@ +package main + +import ( + "log" + "strings" +) + +func main() { + // Generate all possible values up to 10 bits + byLen := map[int][]string{ + 1: []string{"0", "1"}, + } + + for l := 2; l <= 10; l++ { + values := []string{} + + for _, v := range byLen[l-1] { + values = append(values, v+"0", v+"1") + } + + byLen[l] = values + } + + limits := map[int]int{ + 1: 0, + 2: 0, + 3: 0, + 4: 2, + 5: 8, + 6: 8, + 7: 16, + 8: 32, + 9: 64, + 10: 256, + } + + total := 0 + short := 0 + + for l := 1; l <= 10; l++ { + vs := byLen[l] + limit := limits[l] + values := []string{} + + valueLoop: + for _, v := range vs { + if limit == 0 { + break + } + + for i := 1; i < l; i++ { + for _, v2 := range byLen[i] { + if strings.HasPrefix(v, v2) { + continue valueLoop + } + } + } + + values = append(values, v) + limit-- + print(v + "\n") + } + + byLen[l] = values + + total += len(values) + if l < 8 { + short += len(values) + } + } + + for l := 1; l <= 10; l++ { + values := byLen[l] + log.Printf("%d: %d", l, len(values)) + } + + log.Printf("total=%d", total) + log.Printf("short=%d", short) +}