106 lines
2 KiB
Go
106 lines
2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
)
|
|
|
|
const (
|
|
ul = "╔"
|
|
uc = "╦"
|
|
ur = "╗"
|
|
ll = "╚"
|
|
lc = "╩"
|
|
lr = "╝"
|
|
hb = "═"
|
|
vb = "║"
|
|
)
|
|
|
|
var mayan = [5]string{
|
|
" ",
|
|
" ∙ ",
|
|
" ∙∙ ",
|
|
"∙∙∙ ",
|
|
"∙∙∙∙",
|
|
}
|
|
|
|
const (
|
|
m0 = " Θ "
|
|
m5 = "────"
|
|
)
|
|
|
|
func dec2vig(n uint64) []uint64 {
|
|
vig := strconv.FormatUint(n, 20)
|
|
res := make([]uint64, len(vig))
|
|
for i, d := range vig {
|
|
res[i], _ = strconv.ParseUint(string(d), 20, 64)
|
|
}
|
|
return res
|
|
}
|
|
|
|
func vig2quin(n uint64) [4]string {
|
|
if n >= 20 {
|
|
panic("Cant't convert a number >= 20")
|
|
}
|
|
res := [4]string{mayan[0], mayan[0], mayan[0], mayan[0]}
|
|
if n == 0 {
|
|
res[3] = m0
|
|
return res
|
|
}
|
|
fives := n / 5
|
|
rem := n % 5
|
|
res[3-fives] = mayan[rem]
|
|
for i := 3; i > 3-int(fives); i-- {
|
|
res[i] = m5
|
|
}
|
|
return res
|
|
}
|
|
|
|
func draw(mayans [][4]string) {
|
|
lm := len(mayans)
|
|
fmt.Print(ul)
|
|
for i := 0; i < lm; i++ {
|
|
for j := 0; j < 4; j++ {
|
|
fmt.Print(hb)
|
|
}
|
|
if i < lm-1 {
|
|
fmt.Print(uc)
|
|
} else {
|
|
fmt.Println(ur)
|
|
}
|
|
}
|
|
for i := 1; i < 5; i++ {
|
|
fmt.Print(vb)
|
|
for j := 0; j < lm; j++ {
|
|
fmt.Print(mayans[j][i-1])
|
|
fmt.Print(vb)
|
|
}
|
|
fmt.Println()
|
|
}
|
|
fmt.Print(ll)
|
|
for i := 0; i < lm; i++ {
|
|
for j := 0; j < 4; j++ {
|
|
fmt.Print(hb)
|
|
}
|
|
if i < lm-1 {
|
|
fmt.Print(lc)
|
|
} else {
|
|
fmt.Println(lr)
|
|
}
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
numbers := []uint64{4005, 8017, 326205, 886205, 1081439556}
|
|
for _, n := range numbers {
|
|
fmt.Printf("Converting %d to Mayan:\n", n)
|
|
vigs := dec2vig(n)
|
|
lv := len(vigs)
|
|
mayans := make([][4]string, lv)
|
|
for i, vig := range vigs {
|
|
mayans[i] = vig2quin(vig)
|
|
}
|
|
draw(mayans)
|
|
fmt.Println()
|
|
}
|
|
}
|