gpt4 book ai didi

c# - 生成最短的字母数字保存代码

转载 作者:太空宇宙 更新时间:2023-11-03 20:52:36 24 4
gpt4 key购买 nike

出于游戏的目的,我需要生成一个保存代码,用户可以在某处记下该代码,并在以后用于重新加载他的游戏状态(不可能有持久数据)。保存代码需要很短,例如 6DZF1D3,(36 进制或 62 进制字符串)。

游戏关卡的分数可以简化为一个字符串,例如 1232312321321321321,这是一个序列,其中每个字符都是以“星”(1、2 或 3 星)表示的关卡分数。将有大约 30 个游戏关卡。

我想为用户生成尽可能短的代码,所以我的第一个想法是在数组中生成所有可能性。然后生成用户所在key的base 62编码。但是如果有 3^30 种可能性,这将生成一个包含 2e+14 个键/值的数组,这对内存和 CPU 不利。

第二个想法是使用 base 4 到 62 转换器,但我发现的大多数代码都使用 intlong,它们的大小有限且低于 30字符。

您知道如何生成由字母数字字符组成的最短保存代码吗?

最佳答案

将二进制数据转换为文本表示的最常见方法是 Base64 。每个字符代表 6 位信息。你只有不到 48 位的信息,这很好地让你得到 8 个 Base64 数字。

所以策略是:
1. 使用 this algorithm 将您的 3 进制(星形)数组转换为 2 进制。
2.将位转换为字节数组using Convert.ToByte();
3. 使用 Convert.ToBase64String() 创建 Base64 字符串。

编辑:我知道你想把它放在一个 Base36 中,there are some code examples that can do it. 这个代码需要一个字符串作为输入,但是把它转换成一个 char[],所以你可以只提供 ByteArray。

编辑2:证明是在吃,刚刚为任何基地创建了一个来回转换器,直到 base36(但可以扩展)。对于您的星级,您只需提供一个字符串,其中星级值作为数字(1 到 3)。

    private static string ConvertToOtherBase(string toConvert, int fromBase, int toBase)
{
const string characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

long value = 0;
string result = "";

foreach (char digit in toConvert.ToCharArray())
value = (value * fromBase) + characters.IndexOf(digit);

while (value > 0)
{
result = characters[(int)(value % toBase)] + result;
value /= toBase;
}

return result;
}

你可以这样调用它(来回):

        var stars = "112131121311213112131121311213";

string base36Result = ConvertToOtherBase(stars, 4, 36);
// 32NSB7MBR9T3

string base4Result = ConvertToOtherBase(base36Result, 36, 4);
// 112131121311213112131121311213

关于c# - 生成最短的字母数字保存代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53727560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com