Updated actions, fix some lint issues and introduce translate package
testing / check and test (push) Failing after 9m19s

This commit is contained in:
2024-04-13 02:40:32 +00:00
parent d05fa2e90a
commit 04c5f52e6f
8 changed files with 128 additions and 35 deletions
+77
View File
@@ -0,0 +1,77 @@
package tiles
import (
"fmt"
"slices"
"strconv"
"strings"
"unicode"
)
var jpnZiPaiTileTypes []string = []string{"DO", "NA", "XI", "BE", "BA", "FA", "ZH"}
// Translate numberized Zi Pai to 2-letter format
// rule can be "CHN" or "JPN"
// If rule is "CHN", it should translate as DO XI NA BE ZH FA BA
// If rule is "JPN", it should translate as DO NA XI BE BA FA ZH
func ziPaiShortSplit(num int, rule string) (string, error) {
if num < 1 || num > 7 {
return "", fmt.Errorf("invalid zipai index %d", num)
}
switch rule {
case "CHN":
return TileTypes[num-1+27], nil
case "JPN":
return jpnZiPaiTileTypes[num-1], nil
}
return "", fmt.Errorf("error calling ziPaiShortSplit()")
}
func shortToArray(tiles string) ([]string, error) {
var ret []string
var stack []string
var rule string
// Check if it's jpn format
tiles = strings.ToUpper(tiles)
if strings.Contains(tiles, "M") || strings.Contains(tiles, "S") || strings.Contains(tiles, "P") {
rule = "JPN"
} else {
rule = "CHN"
}
for _, char := range tiles {
if unicode.IsDigit(char) {
stack = append(stack, string(char))
} else {
switch string(char) {
case "W", "M":
for _, prefix := range stack {
ret = append(ret, prefix+"W")
}
case "T", "S":
for _, prefix := range stack {
ret = append(ret, prefix+"T")
}
case "B", "P":
for _, prefix := range stack {
ret = append(ret, prefix+"B")
}
case "Z":
for _, prefix := range stack {
num, _ := strconv.Atoi(prefix)
ziPaiStr, _ := ziPaiShortSplit(num, rule)
ret = append(ret, ziPaiStr)
}
}
stack = []string{}
}
}
// Check return value valid, if not return error
for _, t := range ret {
if !slices.Contains(TileTypes, t) {
return []string{}, fmt.Errorf("invalid tile string with %s", t)
}
}
return ret, nil
}