任务
A-Z
使用您自己喜欢的方案,仅使用零和一来对完全由大写字母()组成的字符串进行编码。但是规则不是那么简单!
规则
- 您的程序/函数必须正确处理长度为8的任何有效输入字符串。
- 所有输入的结果长度必须相同。
- 对于不同的输入,结果必须是不同的。
- 结果必须尽可能短。
- 结果必须为零一平衡(具有与零相似的数目)。他们不必相等(即完全平衡),但是您的分数将因此受到惩罚。
您不必提供解码您的编码的程序/功能。
输入输出
- 您可以决定接受任何一组26个不同的可打印ASCII字符代替
A-Z
。 - 您可以决定输出任意一对不同的可打印ASCII字符来代替
0
和1
。 - 您不允许输出整数而不是位字符串,因为它可能有前导零,并且不清楚您是否确实满足规则2。
- 如果决定偏离默认值(
A-Z
输入和01
输出),则必须在提交中指定输入/输出字符集。
计分
- 基本分数:代码大小,如果程序为空,则为1。
- 罚则
- 长度处罚:相乘
1.5 ** (encoded length - 42)
- 矮个没有奖金。42是字母大小为26的8长度字符串的完美平衡编码的最小长度。
- 不平衡的惩罚:乘以
2 ** max(abs(ones - zeros) for every valid input of length 8)
,其中ones
和zeros
分别是每个输出中1和0的计数。 - 您的提交必须显示最坏情况的示例(输入/输出)或惩罚值的理论解释。
- 长度处罚:相乘
- 最低分获胜。
提交示例
假设的esolang,0字节,得分74733.8906
这是一个假设的esolang,其中一个空程序以二进制形式打印输入字符的所有ASCII码。
例如,如果您提供AAAAAAAA
输入,程序将1000001
连续打印8次,即10000011000001100000110000011000001100000110000011000001
。
输入的字母选择为CEFGIJKLMNQRSTUVXYZabcdefh
。这样,所有字符都将转换为二进制的七位数字,并且每个字符的零一计数仅相差一个(转换为二进制时,它们全部具有三个1和四个0,反之亦然)。
输出长度始终为56,最坏情况下的不平衡发生在输入上,如CCCCCCCC
,其中零比1多出现8次。
因此,此提交的分数是1.5 ** (56 - 42) * 2 ** 8 == 74733.8906
。