Compare commits

...

3 Commits

2 changed files with 63 additions and 23 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
alphabetter

View File

@ -10,50 +10,58 @@ import (
) )
var SPELLINGS = map[rune]string{ var SPELLINGS = map[rune]string{
'A': "AY", 'A': "A",
'B': "BEE", 'B': "BEE",
'C': "SEE", 'C': "CEE",
'D': "DEE", 'D': "DEE",
'E': "EE", 'E': "E",
'F': "EFF", 'F': "EF",
'G': "GEE", 'G': "GEE",
'H': "AITCH", 'H': "AITCH",
'I': "EYE", 'I': "I",
'J': "JAY", 'J': "JAY",
'K': "KAY", 'K': "KAY",
'L': "ELL", 'L': "EL",
'M': "EMM", 'M': "EM",
'N': "ENN", 'N': "EN",
'O': "OH", 'O': "O",
'P': "PEE", 'P': "PEE",
'Q': "CUE", 'Q': "CUE",
'R': "ARR", 'R': "AR",
'S': "ESS", 'S': "ESS",
'T': "TEE", 'T': "TEE",
'U': "EWE", 'U': "U",
'V': "VEE", 'V': "VEE",
'W': "DOUBLE EWE", 'W': "DOUBLE U",
'X': "ECKS", 'X': "EX",
'Y': "WHY", 'Y': "WYE",
'Z': "ZEE", 'Z': "ZEE",
} }
var modeRandom = false
var modeInfinite = false
var modeStats = false
func main() { func main() {
rand.Seed(time.Now().UnixNano()) rand.Seed(time.Now().UnixNano())
random := false
infinite := false
for i := 1; i < len(os.Args); i++ { for i := 1; i < len(os.Args); i++ {
if os.Args[i] == "--random" { if os.Args[i] == "--random" {
random = true modeRandom = true
} }
if os.Args[i] == "--infinite" { if os.Args[i] == "--infinite" {
infinite = true modeInfinite = true
}
if os.Args[i] == "--stats" {
modeStats = true
} }
} }
totalAlphabets := 0
// a count of how many alphabets stabilize in various quantities
stats := make(map[int]int)
for { for {
var alphabet []rune var alphabet []rune
if random { if modeRandom {
alphabet = randomAlphabet() alphabet = randomAlphabet()
} else { } else {
alphabet = []rune{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'} alphabet = []rune{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}
@ -62,22 +70,32 @@ func main() {
fmt.Println(string(prev)) fmt.Println(string(prev))
i := 0 i := 0
for { for {
if i > 100 {
fmt.Println("Alphabet seems infinite.")
break
}
alphabet = sortAlphabet(alphabet) alphabet = sortAlphabet(alphabet)
if string(alphabet) == prev { if string(alphabet) == prev {
if infinite { if modeInfinite {
fmt.Println(prev) fmt.Println(prev)
} }
break break
} }
prev = string(alphabet) prev = string(alphabet)
if !infinite { if !modeInfinite {
fmt.Println(prev) fmt.Println(prev)
} }
i++ i++
} }
fmt.Println("Iterations:", i) fmt.Println("Iterations:", i)
stats[i]++
totalAlphabets++
if !infinite { if modeStats {
printStats(stats, totalAlphabets)
}
if !modeInfinite {
return return
} }
} }
@ -96,7 +114,11 @@ func sortAlphabet(alphabet []rune) []rune {
j_index := -1 j_index := -1
k := 0 k := 0
for k = 0; k < len(i_spelling) && k < len(j_spelling); k++ { for k = 0; ; k++ {
if k >= len(i_spelling) || k >= len(j_spelling) {
return len(i_spelling) < len(j_spelling)
}
i_index = findIndex(alphabet, rune(i_spelling[k])) i_index = findIndex(alphabet, rune(i_spelling[k]))
j_index = findIndex(alphabet, rune(j_spelling[k])) j_index = findIndex(alphabet, rune(j_spelling[k]))
@ -124,3 +146,20 @@ func randomAlphabet() []rune {
rand.Shuffle(len(a), func(i, j int) { a[i], a[j] = a[j], a[i] }) rand.Shuffle(len(a), func(i, j int) { a[i], a[j] = a[j], a[i] })
return a return a
} }
func printStats(counts map[int]int, total int) {
keys := make([]int, 0, len(counts))
for k, _ := range counts {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
if k == 101 {
fmt.Printf("Infinite Loops: %.2f\n", float64(counts[k])/float64(total))
continue
}
fmt.Printf("%d: %.2f\n", k, float64(counts[k])/float64(total))
}
fmt.Println(counts)
}