编码如何工作
给定一个位列表:
- 拿一个素数(以开头
2
) - 有清单
- 对于输入中的每一位
- 如果与上一位相同,则将您持有的素数添加到列表中
- 如果不同,请按住下一个素数并将其添加到列表中
- 返回列表中所有数字的乘积
- 对于第一位,假设前一位是
0
注意:这些步骤仅用于说明目的,您无需执行这些步骤。
例子
Input: 001
hold 2
0: add 2 to the list
0: add 2 to the list
1: hold 3, add 3 to the list
list: 2,2,3
Output: 12
Input: 1101
hold 2
1: hold 3, add 3 to the list
1: add 3 to the list
0: hold 5, add 5 to the list
1: hold 7, add 7 to the list
list: 3,3,5,7
Output: 315
其他示例:
000000000 -> 512
111111111 -> 19683
010101010 -> 223092870
101010101 -> 3234846615
011101101 -> 1891890
000101101010010000 -> 3847834029582062520
挑战
为此编码方法编写编码器和解码器。
(解码器逆转编码器的过程)。
输入输出
编码器可以采用任何合理格式的输入
编码器必须输出整数或字符串
解码器必须采用与编码器输出相同的格式输入
解码器必须输出与编码器相同的格式作为输入
换一种说法 decoder( encoder( input ) ) === input
笔记
- 解码器可以假定其输入是可解码的
- 您的答案只需要处理您的语言即可原生支持的整数,而无需使用(
long
,bigInt
等),这是合理的,如果您的语言仅支持不超过1的整数,则可能需要重新考虑发布答案
计分
您的分数是编码器和解码器的字节长度之和。
如果您需要导入模块,则前提是您的编码器和解码器可以共存于同一文件中并且可以重复使用(例如函数),则导入仅可以计数一次。
禁止默认漏洞。
这是代码高尔夫球,因此每种语言的最短分数将获胜。
最后一个示例是否必须执行,还是可以将输出限制为最多64位(2 ^ 63-1 / 9223372036854775808)?
—
凯文·克鲁伊森
@KevinCruijssen不,您的答案仅适用于您的语言可以处理的整数。
—
Asone Tuhid
@KevinCruijssen *本机处理没有bigints库,我将澄清
—
Asone Tuhid