Compare commits
3 Commits
5fbec89c4e
...
main
Author | SHA1 | Date | |
---|---|---|---|
599734c17a | |||
aef8baee0a | |||
ffb9d1a09f |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
alphabetter
|
@ -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)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user