Title Text:100he100k out th1s 1nno5at4e str1ng en100o501ng 15e been 500e5e50op1ng! 1t’s 6rtua100y perfe100t! …hang on, what’s a “virtuacy”?
Origin:https://xkcd.com/2637/
https://www.explainxkcd.com/wiki/index.php/2637:_Roman_Numerals
罗马数字
http://xkcd.in/comic?lg=cn&id=2637
罗马数字是表示罗马帝国时期使用的数字的系统。字母 I、V、X、L、C、D 和 M 用于表示数字,每个字母代表一个一致的值。具体来说,I 代表 1,V 代表 5,X 代表 10,L 代表 50,C 代表 100,D 代表 500,M 代表 1000。被添加到一个等于或小于其右侧的罗马数字(例如,II=1+1=2,因为 1≥1,VI=5+1=6,因为 5≥1 [需要引用]),并且从其右侧的较大值的罗马数字中减去罗马数字(例如,IV=5-1=4,因为 1<5,IX=10-1=9,因为 1<10)。(此外,每个位必须分开写,例如,一个不能通过 IL 表示 49,而是必须通过 XL IX 分别表示十位和个位——尽管在实践中不会包含空格)。
表示数字的现代系统是使用数字(0、1、2、3、4、5、6、7、8 和 9)的十进制位置表示法。西方人经常称这种系统为“阿拉伯数字”或“印度-阿拉伯数字”,因为它们是在印度发明并由阿拉伯商人引入欧洲的。
因此,在罗马数字中,一个数字始终具有相同的绝对值,但根据其后面的数字可能被视为正数或负数,而对于印度教-阿拉伯数字,数字的值根据其绝对位置变化 10 的幂,并且是从未减去。
Cueball 的罗马数字形式的原始方程是:
第三行的另一种解释,虽然不严格按照罗马数字“规则”,是
在标题文本中,Randall 将用阿拉伯数字中的值替换罗马数字的相同想法应用于英语单词的字符串。
100 | 他 | 100 | ķ | 出去 | th | 1 | s | 1 | 无 | 5 | 在 | 4 | e | 字符串 | 1 | 吴 | zh | 100 | ○ | 501 | 吴 | 15 | e | 到过 | 500 | e | 5 | e | 50 | 操作 | 1 | 哦! | 1 | t | 6 | rtua | 100 | 是的 | 完美 | 100 | 吨! | |||||
C | 他 | C | ķ | 出去 | th | 我 | s | 我 | 无 | 五 | 在 | 四 | e | 字符串 | 我 | 吴 | zh | C | ○ | DI | 吴 | 四 | e | 到过 | D | e | 五 | e | 大号 | 操作 | 我 | 哦! | 我 | t | 六 | rtua | LL/C | 是的 | 完美 | C | 吨! |
原始字符串(带有将被解释为大写罗马数字的字母)是,“Check out this InnoVatIVEe string en CoDIng I’ve been DeVeLopIng! It’s Virtually Perfect!” 对于第一个单词“Check”,在单词的两个实例中,C 都替换为该罗马数字的阿拉伯数字值,即“100”,结果为“100he100k”。与漫画不同,兰德尔使用适当的加减法规则组合罗马数字。例如,他将“IV”替换为“4”,而不是“15”,例如,“innovative”变为“1nno5at4e”,而不是“1nno5at15e”。(但是,“I’ve”变成了“15e”,而不是“4e”,大概是因为撇号是在之后而不是之前被删除的,用阿拉伯数字代替罗马数字。然而,兰德尔删除撇号的原因并不明显。)
讽刺源于“虚拟完美”的主张,因为这种编码存在问题。
编码的一个问题是“虚拟”中的双 L 被替换为 100。这在技术上遵循罗马数字的规则,即将一个字母的值添加到其右侧的等值字母的值 (50+50 =100)。但是,此加法规则不应适用,因为在标准罗马数字中,单个数字不应有多个 V、多个 L 或多个 D,例如,100 应仅由 C (100) 表示,而不是 LL (50 50) . 这意味着一个简单的解码脚本会错误地将“6rtua100y”解码为“VIrtuaCy”,而不是“VIrtuaLLy”。因此,这个字符串编码系统实际上并不完美。它会丢失信息。
编码的另一个问题是只有非常小的源文本子集会受到这种编码的影响:英语(编写文本的语言)有 26 个字母中的 7 个字母,并且没有非字母字符。
替代解码[编辑]
在今天普遍使用的现代编纂之前,罗马数字并没有那么标准化,所以“LL”可能是“C”的一个可容忍的替代品。有关更多信息,请参阅Roman_numerals#Classical_Roman_numerals。但是,让解码脚本使用该替代方案并不能解决问题,而是会使解码脚本将 Cs 替换为 LL,例如“delloding sllript”。
也可以将 L 分成单独的数字,成为“virtua5050y”,但这会产生更多问题,因为 5,050 实际上是 MMMMML,而“virtuammmmmly”绝对不是英文单词。[需要引用]