挑战
您的任务是将整数编码为ASCII字符的字符串,然后在所述字符串被随机混洗后成功解码。
您将编写两个程序/函数,分别称为Encoder和Decoder。
编码器
- 输入:在范围内的整数。
- 输出:一个字符串的ASCII字符(不一定打印)。
解码器
- 输入:字符串s的随机排列。
- 输出:整数。
计分
令为s在所有可能值n上的最大长度。如果编码器不确定地起作用(允许,请参见下文),则A将是s可能出现的最大长度(可能为∞)。
令为编码器的长度(以字节为单位),为解码器的长度(以字节为单位)。
然后你的分数是。
提交的分数最低的是胜利。
时限
对于单个测试用例(即n的单个值),编码器和解码器的执行时间都存在1分钟的任意时间限制。
目的是避免通过枚举具有某些属性的所有序列来发现强行编码的解决方案。如果您的解决方案做的比这更聪明,那么它很可能会符合时间限制,并被认为是有效的。同样,如果它在TIO上对一些随机选择值起作用,则将其视为有效。否则,我将在我的机器上对其进行测试,但是请注意,如果您的解决方案是纯蛮力的,则几乎肯定会失败。
规则
- 该编码器和解码器必须写在同一语言。
- 对于编码器返回的字符串s的每个可能的排列s ',解码器必须输出正确的整数。
- 该编码器和解码器都不会允许共享信息(通过全局变量或文件的方式,比如)以任何方式。
- 所述的输出编码器不需要不是确定性的(即,相同的输入如果可以产生不同的输出串的编码器被运行多次),但解码器必须始终猜测正确的整数。
- 的编码器和解码器可以采取,并返回整数在任何方便的方式(例如,如果是细的输入是
14
,"14"
或[1,4]
)。 - 所述编码器可输出的串由任一印刷其上
stdout
或通过返回一个字符串,一个列表/字符数组或范围内的整数列表/阵列 ; 请注意,解码器将接收输入的置换被返回的编码器,所以它应该接受字符串在相同的格式为。 - 禁止出现标准漏洞。
- 如果可能,请说明您的代码如何工作以及您要求的分数为什么正确。
例
假设。
- 所述编码器接收
14
作为输入。它可能输出"qwerty"
。- 该解码器接收的置换
"qwerty"
作为输入,例如"tweyqr"
。它必须输出14
(以任何方便的格式)。
该编码器可能返回[113,119,101,114,116,121]
,以及,在这种情况下,解码器将已收到(例如)[116,119,101,121,113,114]
。
请注意,编码器返回的字符串也可能包含不可打印的ASCII字符(但始终在范围内[0x00, ..., 0x7F]
)。