core-values-encoder
core-values-encoder copied to clipboard
为什么hex2duo要用到随机数?
hex2duo
似乎不是简单的转化16进制到12进制,在63-69行有用到随机数。
是基于什么的考虑呢?
// 正常转换, 如 C 10 的意思是, 十六进制的C转化为十二进制的10
// parseInt('C', 16).toString(12);
// A A B B C 10 D 11 E 12 F 13
// 您的代码. 如 C 10 2 的意思是, 十六进制的C转化为您的代码中十二进制数组的两个元素 10 和 2
// 这里枚举了两种随机情况
// A 10 0 B 10 1 C 10 2 D 10 3 E 10 4 F 10 5
// A 11 4 B 11 5 C 11 6 D 11 7 E 11 8 F 11 9
社会主义核心价值观只有12组 不允许进位 11 是两个1 还是十一呢?
@mengyyy
如 C 10 2
的意思是, 十六进制的C
转化为您的代码中十二进制数组的两个元素 10
和 2
一个猜测: 使用12进制是因为核心价值观有12个词组, 像是issue#6中提到删减部分词组就需要改动很大代码。
我想到以下伪代码实现。如果可行,我可以提一个PR。
var head = {'富', '和'};
var tail = {'强', '谐'};
var i = 16进制 / head.length;
var j = 16进制 % head.length;
return head[i]+tail[i] + head[j]+tail[j];
因为懒。 直接进制转换不知道在哪切断。 这样映射得(看起来)均匀一点,而且一个16进制数直接转换成1-2个12进制数,可以逐个分割。
因为懒。 直接进制转换不知道在哪切断。 这样映射得(看起来)均匀一点,而且一个16进制数直接转换成1-2个12进制数,可以逐个分割。
认为加入随机数那个是多余的,我在issues #8 中利用已有的 py 版本,尝试去掉随机数部分,代码没有问题。不论是否加入随机数, 12 进制都只用 1-2 位对16 进制的数字进行转换。
但若是使用“听党指挥,能打胜仗,作风优良” 三个"字符"来表示,则需要的位数会更多(逢3进1)。
直接进制转换的切断点应该可以任意选择,若选择 切断点为:x, 需要转换的数为: y(y≥x),则产生的结果就是 转换后的 y 两位数字来表示,最好的切换点应该是转换后进制的进位的位置。
比如十二进制,则在 11 时进行切断,如此而言,只有≥11 的数需要被多位表示;若我选择切断点为 5,则≥5 的所有数都需要两位或更多来表示。将会使得编码出的长度更长一些。
例如:
需要转换的十六进制数为x[默认转换为 10 进制],若x<10 则不变,x≥10 的转换为两位(10, x-10)。
因为懒。 直接进制转换不知道在哪切断。 这样映射得(看起来)均匀一点,而且一个16进制数直接转换成1-2个12进制数,可以逐个分割。
认为加入随机数那个是多余的,我在issues #8 中利用已有的 py 版本,尝试去掉随机数部分,代码没有问题。不论是否加入随机数, 12 进制都只用 1-2 位对16 进制的数字进行转换。
但若是使用“听党指挥,能打胜仗,作风优良” 三个"字符"来表示,则需要的位数会更多(逢3进1)。
直接进制转换的切断点应该可以任意选择,若选择 切断点为:x, 需要转换的数为: y(y≥x),则产生的结果就是 转换后的 y 两位数字来表示,最好的切换点应该是转换后进制的进位的位置。
比如十二进制,则在 11 时进行切断,如此而言,只有≥11 的数需要被多位表示;若我选择切断点为 5,则≥5 的所有数都需要两位或更多来表示。将会使得编码出的长度更长一些。
例如:
需要转换的十六进制数为x[默认转换为 10 进制],若x<10 则不变,x≥10 的转换为两位(10, x-10)。
我感觉这样可能不太均匀,写的时候也没想这么多。