Here is a Go version of the script, interesting language, executes nice and fast as you would hope.
package main import s "strings" import "strconv" import "fmt" func level_th(number int) string { //Take an interger in but return a String var number_th string number_th = strconv.Itoa(number) if (number == 11) || (number == 12) || (number == 13) { number_th = number_th + "th" } else if s.HasSuffix(number_th, "1") { number_th = number_th + "st" } else if s.HasSuffix(number_th, "2") { number_th = number_th + "nd" } else if s.HasSuffix(number_th, "3") { number_th = number_th + "rd" } else { number_th = number_th + "th" } return number_th } func main() { //Headers fmt.Println("Char \t \tClass Skill\tCC Skill\t \tStat\t") fmt.Println("Level\tXP\tMax Ranks\tMax Ranks\tFeats\tIncreases\t"); //Main loop var max_lvl int = 40 var xp int = 0 var feats int = 0 var stats int = 0 for level := 1; level < max_lvl; level++ { xp = xp + (level - 1) * 1000 maxranks := level + 3 maxcc := maxranks / 2.0; feat_check := level % 3; feats_out := "--" if (feat_check == 0) || (level == 1) { feats = feats + 1 feats_out = level_th(feats) } stat_check := level % 4 stats_out := "--" if stat_check == 0 { stats = stats + 1 stats_out = level_th(stats) } level_out := level_th(level) fmt.Printf(" %v\t%v\t\t%v\t\t%v\t%v\t%v\n", level_out, xp, maxranks, maxcc, feats_out, stats_out) } }