From 26f493cc59718df6d2fee42ab3441cadd26457df Mon Sep 17 00:00:00 2001 From: Arnas Udovicius Date: Tue, 11 May 2021 23:21:06 +0300 Subject: [PATCH] copy from github --- .gitignore | 1 + abcex.go | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ abcex_test.go | 14 ++++++++++++++ go.mod | 3 +++ 4 files changed, 71 insertions(+) create mode 100644 abcex.go create mode 100644 abcex_test.go create mode 100644 go.mod diff --git a/.gitignore b/.gitignore index f4d432a..cdd78af 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ # Dependency directories (remove the comment below to include it) # vendor/ +.idea \ No newline at end of file diff --git a/abcex.go b/abcex.go new file mode 100644 index 0000000..c56804f --- /dev/null +++ b/abcex.go @@ -0,0 +1,53 @@ +package abcex + +import "fmt" +import "math" + +var decToAbcex = map[int]string{ + 0: "0", 1: "1", 2: "2", 3: "3", 4: "4", 5: "5", 6: "6", 7: "7", + 8: "8", 9: "9", 10: "a", 11: "b", 12: "c", 13: "d", 14: "e", + 15: "f", 16: "g", 17: "h", 18: "i", 19: "j", 20: "k", 21: "l", + 22: "m", 23: "n", 24: "o", 25: "p", 26: "q", 27: "r", 28: "s", + 29: "t", 30: "u", 31: "v", 32: "w", 33: "x", 34: "y", 35: "z" } + +var abcexToDec = flipMap() + +func reverse(s string) string { + runes := []rune(s) + for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { + runes[i], runes[j] = runes[j], runes[i] + } + return string(runes) +} + +func flipMap() map[string]int { + flipped := make(map[string]int) + for i, val := range decToAbcex { + flipped[val] = i + } + + return flipped +} + +func Encode(number int64) string{ + result := "" + + for number > 0 { + result = fmt.Sprintf("%s%s", decToAbcex[int(number % 36)], result) + number /= 36 + } + + return result +} + +func Decode(str string) int64 { + var result int64 + result = 0 + str = reverse(str) + + for i, c := range str { + result = int64(math.Pow(36, float64(i))) * int64(abcexToDec[string(c)]) + result + } + + return result +} diff --git a/abcex_test.go b/abcex_test.go new file mode 100644 index 0000000..c43e868 --- /dev/null +++ b/abcex_test.go @@ -0,0 +1,14 @@ +package abcex + +import "fmt" +import "testing" + +func TestEncode(t *testing.T) { + fmt.Println(Encode(12345)) + // Output: 9ix +} + +func TestDecode(t *testing.T) { + fmt.Println(Decode("9ix")) + // Output: 12345 +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..7d3ad02 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module g.arns.lt/zordsdavini/abcex + +go 1.16