80 lines
1.1 KiB
Go
80 lines
1.1 KiB
Go
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)
|
|
}
|