[2637] Roman Numerals

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

罗马数字

100he100k out th1s 1nno5at4e str1ng en100o501ng 15e been 500e5e50op1ng! 1t’s 6rtua100y perfe100t! …等等,virtuacy是咋冒出来的。

注释:附加文本使用罗马数字的阿拉伯数字值来替换英文字母(例如C=100),但由于将virtually中的双L按照运算法则相加(LL=50+50=100=C)进而导致信息歧义。

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 的罗马数字形式的原始方程是:

我+我=我
II + II = IV
IV + V = IX
通常翻译成更熟悉的印度教-阿拉伯数字,这些等式是:

1 + 1 = 2
2 + 2 = 4
4 + 5 = 9
但是 Randall/Cueball 用印度-阿拉伯数字中的值单独替换了每个字母——忽略了上述解释组合罗马数字的规则,而是使用罗马数字的规则。“I”替换为“1”,“V”替换为“5”,“X”替换为“10”。例如,对于最后一个等式末尾的 IX,将“I”替换为“1”,将“X”替换为“10”,因此“IX”变为“110”。因此,方程写成

1 + 1 = 1 1
1 1 + 1 1 = 1 5
1 5 + 5 = 1 10
为了清楚起见,添加了空格。

第三行的另一种解释,虽然不严格按照罗马数字“规则”,是

15 + 5 = 20(十进制)
20 是 2 0
2 是 11
所以 20 是 11 0
笑话是因为阿拉伯数字不使用与罗马数字相同的加法和减法规则,所以这两个系统中的等式似乎都不正确。11 的通常解释是 10+1,而不是 1+1,因为它在解释罗马数字的规则下。Randall 从 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”绝对不是英文单词。[需要引用]

Leave a Reply

Your email address will not be published.

Categories