![]() |
|
Spaces home 剪燈閒筆ProfileFriendsBlogMore ![]() | ![]() |
剪燈閒筆我的精神家園
This friends list is empty.
感谢您的光临!
|
Diablo II 装备的一致性问题【分类】计算机 » 游戏 » Diablo | 计算机 » 程序设计逻辑
【标签】Diablo II | 装备 Diablo II 中不少物品装备需要一定属性等级才能装备,比如下面这条暗金腰带就需要 60 的力量:
![]() 一般情况下,如果力量不足 60,你是无法装备这条腰带的。但是这条腰带自身有力量 +5 的魔法属性,论理只要力量达到 55,就应当能装备它。可惜实际上不行。
有没有办法呢?有的。我们找一条同样力量 +5 的护身符,放在物品栏中。这样这条腰带就可以被成功装备了:
![]() 现在,你的力量达到了 65,对于这条腰带来说,护身符已经多余了。我们把护身符撤掉,可以看到腰带仍然完好地挂在腰上:
![]() 这就是 Diablo II 装备的一致性问题:同样的物品,因为装备顺序不同,结果也不同。
要解决这个问题,考虑下面的办法:
Diablo III 会不会也有这个问题,我们拭目以待。 手动下载 .NET Framework 源代码【分类】计算机 » 程序设计 » Visual Studio | 计算机 » 程序设计 » .NET
【标签】Visual Studio | .NET Framework 源代码 | 微软符号服务器 | Pdb 文件 数月前,微软开放了部分 .NET Framework 源代码,Visual Studio 2008 和 Visual Studio 2005 用户可以通过配置符号服务器(Symbol Server)获取这部分代码。不过,不象设计 MFC 程序那样编辑时就能进入源代码,Visual Studio 只允许 .NET 程序员调试程序的时候打开当前代码相关的 .cs 文件。这个 .cs 文件没有缓存到本地硬盘,缓存到本地硬盘的是 .pdb 文件,也就是 Visual Studio 程序数据库(Program DataBase)。我们知道,.pdb 是保存程序调试信息的文件,不包含程序源代码,这对于希望系统阅读 .NET Framework 源代码的用户来说十分不便,于是一款称为 .NET Mass Downloader 的程序应运而生。顾名思意,.NET Mass Downloader 就是批量下载 .NET Framework 源代码的下载器。它不但能下载 .pdb 文件,还能下载每个 .pdb 文件对应的一系列 .cs 文件。这种做法可能不符合微软的商业利益,但注意到这个软件是发布在微软的开源社区 CodePlex 上的,我猜想它的存在是得到微软许可的。
.NET Mass Downloader 发布有一段时间了,我是昨天才知道它的,也很偶然地下载了它的源代码。因为重装 Visual Studio 2008 发生错误——我安装了 Silverlight 2 Tools Beta 2,接着安装 Visual Studio 2008 SP1 Beta。结果后者安装失败,提示要先卸载 KB944899 这个补丁。这个补丁恰好与 .NET Framework 源代码有关。可是我没有安装 KB944899,猜想可能是 Silverlight 2 Tools Beta 2 安装了其它的补丁涵盖了 KB944899。确实是这样,问题出在 KB949325 上,卸载 KB949325 后一切正常——我顺手打开新下载的 .NET Mass Downloader 源代码测试 Visual Studio 2008 的安装是否成功。
下面的教程就是这次粗略浏览 .NET Mass Downloader 源代码的结果。当然,有了 .NET Mass Downloader 这样好的工具,没有谁会真的去手动下载 .NET Framework 源代码。这篇教程的目的是从侧面窥视微软符号服务器(Microsoft Symbol Servers)的工作原理。
就在我写这篇教程的时候,Microsoft Symbol Servers 正巧在调整,时时连接不上,并且下载到的 .pd_ 文件版本也不一样。如果你也遇到这种情况,请隔天再试。
最后修订:2008-6-25 Undocumented Windows Bugs【分类】计算机 » 软件 » Windows
【标签】Windows bug | 回收站界面更新 | 文件名非法字符 | 剪贴板
最后修订:2008-6-20
【注】上面列举的适用平台,我并没有完整地测试过,部分结论来自记忆和推断,但我想大概不会出现例外。 双鱼 香草 咖啡(一)【分类】计算机 » 编程语言 » Java
【标签】JDK | 线程安全 下面是 java.awt.Component 的代码片段,用于获取当前组件的背景色。
public Color getBackground() {
Color background = this.background;
if (background != null) {
return background;
}
// ...
} 初次读到这里时,想不明白 Color background = this.background; 这条语句的用意,第一个反应这是 JDK 经过多次版本变迁后不经意留下的代码碎片。这理由很快就被否定,原因是 Component 类中有大量类似的语句,很难想象 JDK 程序员会对如此频繁出现的冗余代码熟视无睹。既然这样,那这条语句必定有它的作用,我又想到四条理由:一是为了遵循与相似代码一致的代码风格;二是为了边际代码的安全,防止日后由于疏忽或误解而对代码做出错误的改动;三是为了将来需要扩展时,不必更改过多的代码;四是为了提高代码的执行效率,进行编译器顾及不到的优化。这四条理由都可能导致非常规代码的产生,但这里显然又都不是。
想了一小会,几乎要放弃的时候,我突然意识到这可能和线程安全有关。这么一想,思路豁然开朗。用局部变量 background 代替域变量 background 可以防止程序执行了 background != null 的判别后可以进入但还没有进入 return background; 时被别的线程修改了域变量 background 的值。否则,这两处的 background 可能不同值,那么 background != null 的保护性判别就失去了意义。
问题似乎该结束了,但有一个问题,如果上面的情形真的发生,即当前线程准备执行 return background; 时被另一线程修改了域变量 background 的值,则当前线程的 getBackground() 返回的值并不能反映最新的 background 的变化,所以这里的线程安全有瑕疵。要解决这个问题,简单的办法是用 synchronized 对这块临界区加锁,Component 类中就有大量这样的例子。但是同时,我们知道,synchronized 是很影响性能的,getBackground() 由于只涉及到对域变量 background 的读操作,所以没有必要加锁。也说是说,getBackground() 的实现也只能象上面那样——因为没有简单的办法做到更完美。
但我还是找到一个办法让问题变得简单,这需要扩展 Java 语法。如果我们有两个同步关键字:读同步 readsync 和写同步 writesync。当两个线程都进入 readsync 临界区时,互不加锁;当一个线程位于 readsync 临界区,另一个线程企图进入 writesync 临界区,或者反过来,一个线程位于 writesync 临界区,另一个线程企图进入 readsync 临界区,或者两个线程都企图进入 writesync 临界区时,实现同步。这既可以解决上面的线程安全问题,又不损失性能。更精细地,readsync 和 writesync 不仅像 synchronized 那样能同步类和对象,还能同步类的域变量,比如上例,即用 readsync(background) 来同步域变量 background。
如果不扩展 Java 语法,也可以通过改进编译器来实现上述设想。仍用 synchronized 来标识,编译器自动分析临界区内哪些域变量是读同步,哪些是写同步,这不困难。困难的是,编译器无法知道临界区内哪些域变量是无须同步的。 焦晃《蜀道难》正音【分类】汉语 » 普通话 | 文学 » 诗词
【标签】焦晃 | 朗诵 | 蜀道难 焦晃的朗诵颇见功力。他的嗓音浑厚而低沉,感情粗犷而沧桑,尤其这篇《蜀道难》的表现,尽可与专业播音员比肩。遗憾的是,不知出于何种原因,焦晃这篇吟咏里的字音误读俯拾皆是,听来如芒在背,如鲠在喉,真是遗珠之恨。这里以列表的形式列出这些错误,希望初学者在欣赏优秀作品的同时,免受它的误导。
顺便提一下,“噫吁嚱”有些书写作“噫吁戏”,其实是“戲”简化为“戏”后,“嚱”没有对应的简化字“口戏”造成的误用。“砯”不少书【1】写作“砅(lì)”,还有的写作“石冰”,都是不对的。
【1】如王力先生的名著《诗词格律》。相信是印刷问题。 关于汤姆孙灯问题的解释【分类】数学 » 数学分析 | 哲学
【标签】汤姆孙灯 | 芝诺悖论 | 阿喀琉斯悖论 汤姆孙灯【1】(Thomson's Lamp)问题是 James Thomson 1954 年在 Analysis 第 15 期中提出的,文章题为 Tasks and super-tasks,也收录在 Martin Gardner 的 Aha! Gotcha: Paradoxes to Puzzle and Delight (Tools for Transformation)(《从惊讶到思考——数学悖论奇景》)第六章《超级任务》中。问题是这样描述的:
一盏灯由一个开关控制。把灯开 1 分钟,再关 ½ 分钟,再开 ¼ 分钟,再关 ⅛ 分钟,……如此进行下去。试问,两分钟后灯是开着还是关着?
许多时候,这个问题和芝诺悖论(Zeno's Paradoxes)中的阿喀琉斯悖论(Achilles and the Tortoise)联系在一起。阿喀琉斯悖论说的是古希腊神话英雄阿喀琉斯(Ἀχιλλεύς,Achilles)和乌龟赛跑,阿喀琉斯让乌龟先跑一段距离,然后从后面追赶。假定阿喀琉斯起跑时,乌龟已爬到 A。当阿喀琉斯跑到 A 时,乌龟又爬到 B,当阿喀琉斯跑到 B 时,乌龟又爬到 C,……也就是说,乌龟总是爬在阿喀琉斯前面,从而得出阿喀琉斯永远赶不上乌龟的结论。
阿喀琉斯悖论当然有违常理。级数计算表明,A, B, C, ... 组成的序列是收敛的,阿喀琉斯最终能追上乌龟。难道芝诺的推理有问题?没有!芝诺的推理逻辑是严密的,没有漏洞。那漏洞在哪呢?不少人认为芝诺的推理有一个隐含的假设,即空间的无限可分性。如果否定空间的无限可分性,那阿喀琉斯悖论就不攻自破了。我认为这种解释并不妥当,有两个原因。一是物理世界的空间是不是无限可分的,目前无从知晓;二是即使空间是无限可分的,阿喀琉斯悖论也不成立。
我们假设阿喀琉斯在 Z 处追上乌龟。如果空间是无限可分的,那么 A 和 Z 可以理解为实数轴上的两点。康托(Cantor)告诉我们,A 和 Z 之间有无穷多个点,并且这些点的个数和实数的基数一样,为
。另一方面,A, B, C, ... 也是个无穷序列,这个序列中的点的个数和自然数的基数相等,为 。这就引发了一个矛盾:芝诺试图用可数的 {A, B, C, ...} 去度量不可数的 [A, Z)。由于前者的基数比后者的小,用前者度量后者,结果只能是∞。这里的∞对应了阿喀琉斯永远赶不上乌龟。解决了阿喀琉斯悖论,我们回到汤姆孙灯问题。汤姆孙灯问题看起来和阿喀琉斯悖论有些相似,都涉及到无穷级数求和,共同的疑惑都是到达极限和之前存在着无休止的阻尼振荡运动,这个运动不会终结,所以问题看似不可解。
这种类比也许有理,但仅仅是表面现象,汤姆孙灯问题远没有阿喀琉斯悖论深刻和复杂。实际上,汤姆孙灯问题只是一个简单的函数求值问题。我们用 f(t) 表示 t 时刻汤姆孙灯的开关状态,f(t)=1 表示开,f(t)=0 表示关。显然,原题等价于求解 f(2) 的值。f(2) 是多少,我们不知道,因为原题只给出了 f(t), t∈[0,2) 的定义。也就是说,f(2) 是没有定义的!如此而已。
我们又问,这样的话,我们就可以随意地定义 f(2) 为 0 或 1 了。那不是说,无论 f(2) 为何值,f(t) 总能依上面的开关规则过渡到 f(2)?换句话说,f(1.∞)【2】既可以为 0,也可以为 1?这不是矛盾吗?
确是如此!因为当 t=1.∞ 时,开与关的时间间隔已经减小到 0 了。既然是 0,那此时无论灯是开着还是关着,都可以在没有时间损耗的前提下切换到另一状态。f(1.∞) 的确既等于 0,又等于 1。这违反了单值函数的定义,所以 f(t) 当 t→2- 时的极限不存在。也就是 f(t) 在 t=2 附近不连续。
至此,我们得到汤姆孙灯在两分钟这个时刻:
(1) 其状态数学上无意义;
(2) 既是开着,也是关着。
两个结果任选其一,都是正确的,含义不同罢了。
对于第二个结果,也许有人会问:一盏灯怎么可能既是开着又是关着?是的,是有点超乎想象,但理论上确是可能的。如果再问:现实中这种情况也能发生吗?我想现实中不会存在这种开关不需要时间的灯。话说回来,如果这种开关出现在微观世界里,那不好说了,也许量子真有能耐改变了状态却不消耗时间。之所以这么说,因为我感觉这一概念似乎有助于解释奇异的电子双缝实验。
【1】Thomson 这个名字有四种常见的译法:汤姆逊、汤姆孙、汤姆森和汤姆生,不知哪种是标准译名。比照 Edison 译为爱迪生,Simpson 译为辛普森,Amazon 译为亚马孙(逊),似乎后缀 -son / -zon 没有固定译法。汤姆生这个译名比较少见,汤姆森更适用于 Thomsen,亚马逊已被标准化为亚马孙。因此这里我选择了个人认为最合适的汤姆孙。
【2】f(1.∞) 表示 lim f(t), t→2-。 《红楼梦》中容易疏忽的血亲关系【分类】文学 » 文学评论和研究 » 红楼梦
【标签】王熙凤 | 贾宝玉 | 薛宝钗 | 薛潘 | 贾元春 | 王仁 我们读《红楼梦》,通常把王熙凤看作贾宝玉的堂嫂。其实从王夫人算起,王熙凤还是贾宝玉的表姐。并且,王熙凤、贾宝玉和薛宝钗三人互为表姐妹(弟)。甚至,书中看似毫不相干的王仁、薛潘和贾元春也是血缘很近的表亲。
![]() 王熙凤的父亲是谁,脂批本《红楼梦》没有交代,只在第六回指出王熙凤的父亲是王夫人的大兄。有红学爱好者找出各种证据试图证明王熙凤的父亲就是王子腾,以箬衣之见,这些证据至多算是旁证,不足为凭。目前对这个问题最好的答案大概是:无从知晓。
最后修订:2008-6-4 也谈“命”字义——与周汝昌先生商榷【分类】文学 » 文学评论 » 红楼梦
【标签】命 | 甲戌本 | 周汝昌 邓遂夫《脂砚斋重评石头记甲戌校本》的《校后记》末页有篇周汝昌对“命”字义的“补证”文字,摘录如下:
再如第五十回《争联即景诗》,写至“黛玉忙联道:‘剪剪舞随腰。煮芋成新赏’”处,又云:“一面说,一面推宝玉,命他联。……”再到下文,叙李纨要罚宝玉作诗。湘云说有个好题目。众人问是何题目?湘云道:“命他就作《访妙玉乞红梅》,……”请看黛、湘二位,对他们的表兄,皆用“命”字。黛、湘既可于宝玉用“命”字,岂不正好说明脂砚之于雪芹亦可用“命”字乎?
我所举例,足破“(畸笏乃雪芹)长辈”论者之惑。至于所谓“靖本批语”之伪文,已有无锡、南京等处诸学者揭其内幕,故更不烦词费了。 类似的观点和论证还见于周汝昌《定是红楼梦里人》第三十二篇《奇语惊人》。
周先生的这段论证说的是一条非常有名的脂批,甲戌本第十三回《秦可卿死封龙禁尉 王熙凤协理宁国府》回后朱批云:“秦可卿淫丧天香楼,作者用史笔也。老朽因有魂托凤姐贾家后事二件,嫡是安富尊荣坐享人能想得到处;其事虽未漏,其言其意则令人悲切感服,姑赦之,因命芹溪删去。”这条批语没有署名,一般认为是畸笏叟的,理由是畸笏叟惯用“朽物”、“老朽”这样的称呼。而批语中的“芹溪”,一般也认为就是曹雪芹,因为从张宜泉的多篇诗作和小注综合起来可以得出曹雪芹号芹溪居士。当然,这还不是定论,学界有争议。我们姑且这么认为,无伤本文的讨论。
顺便提一句,许多学者认为这条脂批能够证明芹溪是《红楼梦》(或《石头记》)的作者,我对此心存疑窦。单从这条批语来看,《红楼梦》作者另有其人,芹溪只是《红楼梦》的披阅增删者也说得通。畸笏叟也许在说:“秦可卿淫丧天香楼,(原)作者用史笔也。……因命(修订此书的)芹溪删去。”并无矛盾之处。 回到原题。这条批语的语气给人的感觉是长辈在对晚辈说话,可能是由于这么几个原因:一、畸笏叟这个名字给人的感觉是年长的男子,“老朽”这一自称加强了这种印象;二、“赦”给人以权力感,往往当权者才有资格赦免有过错者(意指秦可卿的原型);三、“命”是居高临下的口气,长辈对晚辈可以命令。于是,不少学者从这“命”字推断出畸笏叟是曹雪芹的长辈。而上面引用的周先生的补证正是反驳这种观点。周先生从《红楼梦》内寻找依据,证明“命”可以用于平辈间,且不分年长年幼。另外,同一书中,周先生还提到《红楼梦》中有凤姐“令”贾琏如何如何的例子,目的是由“令”及“命”,曲线支持他的观点。
我认为周先生论证的方法是对的,但选取的证据却不对。以我的理解,“命”字不一定非用于长辈对晚辈,但一般用于地位高者对地位低者。换句话说,“命”字包含两重含义:一、施者无需征得受者同意而提出要求;二、受者通常不能拒绝施者的要求。这里的要求可以是合情理的,也可以是不合情理的。这里,我们把问题简化一下,来看看《红楼梦》中哪些人可以“命”宝玉做这做那。
一、直系长辈,有贾母、贾政和王夫人,他们可以“命”宝玉,无可厚非。第二十九回:“贾母听说,便命宝玉摘下通灵玉来,放在盘内。”第十七回:“贾政拈髯寻思,因抬头见宝玉侍侧,便笑命他也拟一个来。”旁系长辈呢?道理上也可以,但出于礼节和权力制度上的不宜越权,一般不会这么做。
二、年长的直系平辈,即元春。元春既是贵妃,又是宝玉的亲姐姐,还是宝玉的启蒙老师,自然也可以“命”宝玉。第十八回:“元妃等起身,命宝玉导引,遂同诸人步至园门前。”
三、关系好的年长平辈,如凤姐、贾珍。关系好则禁忌少,所以说话行事不拘束。第十三回:“贾珍便忙向袖中取了宁国府对牌出来,命宝玉送与凤姐,……”第十五回:“一时凤姐进入茅堂,因命宝玉等先出去顽顽。”
四、未出嫁的姊姊妹妹,指黛玉、宝钗和湘云。黛玉和宝玉内心深处早已视对方为终身伴侣,宝钗年纪比宝玉大又懂事,湘云活泼爽直有才情,她们对宝玉都有精神优势,可以自然地“命”他做事。尤其在玩笑的场合,更不必“锦心绣口”,如上文周先生引用的例子。而宝玉呢,和这些姊姊妹妹在一起时,向来处在下风,常常被支使得不亦乐乎却又乐此不疲。其他姊妹,如迎春,她的性格和与宝玉的亲近程度决定了她不会命令宝玉。而探春、惜春比宝玉小,又不象湘云那样直肠子,所以也不会这么做。特别是探春,对宝玉这个哥哥还十分亲密敬重,这从第三十七回邀宝玉结海棠诗社帖可知一二。
五、关系好的丫鬟,如香菱。宝玉不但会被姊姊妹妹欺负,甚至常受丫鬟们的气,第三十五回傅秋芳家两个嬷嬷的对话明明白白地指出这一点。也正因为宝玉对女孩儿百般怜爱敬重,以香菱的温柔谨慎,面对宝玉也有心理优越感。第六十二回:“(香菱)说着,接了裙子,展开一看,果然同自己的一样。又命宝玉背过脸去,自己叉手向内解下来,将这条系上。”如果换了薛潘,她敢“命”吗?其他的丫鬟,象晴雯,道理上也是可能这么做的,只是没有合适的场景表现罢了。
以上罗列了《红楼梦》中“命”字使用的几种场合,可以说和现代汉语的“命”字义没有差别——“命”字是优势地位者对劣势地位者行使权力的表达。周先生引用的例子不能证明“命”字在写作《红楼梦》的年代也适用于地位相当的人群间。再有,畸笏叟的这条批语严肃深沉,不是玩笑语,也不是随意点评。以这里的“命”字义判断,畸笏叟确当地位高于曹雪芹,可能是长辈,可能是年长的平辈,或是曹雪芹也如贾宝玉一般视女儿为水做的骨肉,那畸笏叟是他敬爱的女孩儿也未可知。
最后,由“令”及“命”的推理,逻辑上也有问题。“令”和“命”在字意上并不完全相同,“令”的语气可以比“命”轻,有“使”、“让”的意思,适用的场合相对较广。第十六回:“一时贾琏的乳母赵嬷嬷走来,贾琏与凤姐忙让他一同吃酒,令其上炕去。赵嬷执意不肯。”这里的“令”无论如何不会是命令的意思。 哈泽德的难题【分类】数学 » 算术 | 数学 » 数学游戏
【标签】算式题 | Martin Gardner 下面的乘法算式题(Cryptarithm Multiplication Problem)来自 Harry Hazard,收录于 Scientific American(《科学美国人》)著名专栏作家 Martin Gardner(马丁·加德纳)主持的 Mathematical Games 1967 年的结集出版物 Numerology of Dr. Matrix。该书 1976 年再版时扩充并更名为 The Incredible Dr. Matrix,1985 年再次扩充并更名为 The Magic Numbers of Dr. Matrix。
LYNDON
×
B
JOHNSON 算式中,相同的字母代表相同的数字,不同的字母代表不同的数字。
这道题有几个新巧的地方。首先,它在题面上嵌入了美国总统 Lyndon Baines Johnson(林登·贝恩斯·约翰逊)的名字;其次,从命题到解答,它仅仅涉及非常浅显的算术知识,但这并不意味着求解过程也同样简单。实际上,整个求解过程颇为繁琐;最后,更加难得的是,它竟然有唯一的答案,这多少有些出人意表。
我们来试着解决这个问题。
1 已知:b,d,h,j,l,n,o,s,y 为互不相等的整数,且 0≤b,d,h,j,l,n,o,s,y≤9。
2 显然,b≠0,1,即 b≥2。否则,算式不成立。
3 我们从低位开始依次建立等式。
3.1 考虑算式的最末位,有:nb=10x1+n,即 n(b-1)=10x1。因为 0≤n≤9,b≥2,n≠b,所以 (n,b) 可能的取值为 (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (2,6), (5,3), (4,6), (5,7), (5,9), (8,6)。
3.2 考虑算式的末两位,有:(10o+n)b=100x2+10o+n,即 (10o+n)(b-1)=100x2。
3.2.1 若 n=0,则 10o(b-1)=100x2,即 o(b-1)=10x2。由 0≤o≤9,o≠n 得,(o,b) 可能的取值为 (2,6), (5,3), (4,6), (5,7), (5,9), (8,6)。即 (o,n,b) 可能的取值为 (2,0,6), (5,0,3), (4,0,6), (5,0,7), (5,0,9), (8,0,6)。
3.2.2 若 b=6,则 (10o+n)×5=100x2,即 10o+n=20x2。由此可知 10|n,因为 0≤n≤9,所以 n=0。见 3.2.1。
3.2.3 若 n=5,则 (10o+5)(b-1)=100x2,即 (2o+1)(b-1)=20x2。因为 2o+1 为奇数,所以 4|b-1。由 b≥2,b≠n 知 b=9。从而,o=2 或 7。即 (o,n,b) 可能的取值为 (2,5,9), (7,5,9)。
综合 3.2.1、3.2.2 及 3.2.3 得,(o,n,b) 可能的取值为 (2,0,6), (5,0,3), (4,0,6), (5,0,7), (5,0,9), (8,0,6), (2,5,9), (7,5,9)。
3.3 考虑算式的末四位,有:(1000n+100d+10o+n)b=10000x3+1000n+100s+10o+n,即 100db+(1001n+10o)(b-1)=10000x3+100s。
3.3.1 若 n=0,则 100db+10o(b-1)=10000x3+100s,即 db+o(b-1)/10=100x3+s,即 100|db+o(b-1)/10-s。因为 db+o(b-1)/10-s<100,所以 db+o(b-1)/10-s=0。
3.3.1.1 若 (o,b)=(2,6),则 6d+1-s=0。因为 d≠n,所以 d≠0,从而 d=1,s=7。即 (d,s,o,n,b) 可能的取值为 (1,7,2,0,6)。
3.3.1.2 若 (o,b)=(5,3),则 3d+1-s=0。因为 d≠n,所以 d≠0,从而 d=1,s=4 或 d=2,s=7。即 (d,s,o,n,b) 可能的取值为 (1,4,5,0,3), (2,7,5,0,3)。
3.3.1.3 若 (o,b)=(4,6),则 6d+2-s=0。因为 d≠n,所以 d≠0,从而 d=1,s=8。(d,s,o,n,b) 可能的取值为 (1,8,4,0,6)。
3.3.1.4 若 (o,b)=(5,7),则 7d+3-s=0。因为 d≠n,所以 d≠0。无解。
3.3.1.5 若 (o,b)=(5,9),则 9d+4-s=0。因为 d≠n,所以 d≠0。无解。
3.3.1.6 若 (o,b)=(8,6),则 6d+4-s=0。因为 d≠n,所以 d≠0。无解。
3.3.2 若 (n,b)=(5,9),则 900d+8(5005+10o)=10000x3+100s,即 90d+4004+8o=1000x3+10s,即 100|9d+(2002+4o)/5-s。
3.3.2.1 若 o=2,则 100|9d+402-s。因为 393≤9d+402-s≤483,所以 9d+402-s=400,即 9d+2-s=0。因为 s≠o,所以 s≠2。无解。
3.3.2.2 若 o=7,则 100|9d+406-s。因为 397≤9d+406-s≤487,所以 9d+406-s=400,即 9d+6-s=0。从而 d=0,s=6。即 (d,s,o,n,b) 可能的取值为 (0,6,7,5,9)。
综合 3.3.1 及 3.3.2 得,(d,s,o,n,b) 可能的取值为 (1,7,2,0,6), (1,4,5,0,3), (2,7,5,0,3), (1,8,4,0,6), (0,6,7,5,9)。
3.4 考虑算式的末五位,有:(10000y+1000n+100d+10o+n)b=100000x4+10000h+1000n+100s+10o+n,即 10000yb+100db+(1001n+10o)(b-1)=100000x4+10000h+100s。
3.4.1 若 n=0,则 10000yb+100db+10o(b-1)=100000x4+10000h+100s,即 yb+(db+o(b-1)/10-s)/100=10x4+h。由 3.3.1 知 db+o(b-1)/10-s=0,所以 10|yb-h。
3.4.1.1 若 b=6,则 10|6y-h。
3.4.1.1.1 若 (d,s,o)=(1,7,2),因为 y≠b,y≠s,h≠n,y≠h,所以 (y,h) 可能的取值为 (3,8), (9,4)。即 (y,h,d,s,o,n,b) 可能的取值为 (3,8,1,7,2,0,6), (9,4,1,7,2,0,6)。
3.4.1.1.2 若 (d,s,o)=(1,8,4),因为 y≠d,h≠s,h≠o,h≠n,y≠h,所以 (y,h) 可能的取值为 (7,2)。即 (y,h,d,s,o,n,b) 可能的取值为 (7,2,1,8,4,0,6)。
3.4.1.2 若 b=3,则 10|3y-h。
3.4.1.2.1 若 (d,s,o)=(1,4,5),因为 y≠b,y≠s,h≠b,h≠d,h≠s,y≠h,所以 (y,h) 可能的取值为 (2,6), (6,8), (9,7)。即 (y,h,d,s,o,n,b) 可能的取值为 (2,6,1,4,5,0,3), (6,8,1,4,5,0,3), (9,7,1,4,5,0,3)。
3.4.1.2.2 若 (d,s,o)=(2,7,5),因为 y≠b,y≠d,y≠s,h≠b,h≠d,h≠s,y≠h,所以 (y,h) 可能的取值为 (6,8), (8,4)。即 (y,h,d,s,o,n,b) 可能的取值为 (6,8,2,7,5,0,3), (8,4,2,7,5,0,3)。
3.4.2 若 (d,s,o,n,b)=(0,6,7,5,9),则 9y+4=10x4+h。即 10|9y+4-h。因为 y≠d,y≠s,y≠n,h≠d,h≠s,h≠n,y≠h,所以 (y,h) 可能的取值为 (1,3), (3,1)。即 (y,h,d,s,o,n,b) 可能的取值为 (1,3,0,6,7,5,9), (3,1,0,6,7,5,9)。
综合 3.4.1 及 3.4.2 得,(y,h,d,s,o,n,b) 可能的取值为 (3,8,1,7,2,0,6), (9,4,1,7,2,0,6), (7,2,1,8,4,0,6), (2,6,1,4,5,0,3), (6,8,1,4,5,0,3), (9,7,1,4,5,0,3), (6,8,2,7,5,0,3), (8,4,2,7,5,0,3), (1,3,0,6,7,5,9), (3,1,0,6,7,5,9)。
3.5 考虑整个算式,有:(100000l+10000y+1000n+100d+10o+n)b=1000000j+100000o+10000h+1000n+100s+10o+n,即 100000lb+10000yb+100db+(1001n+10o)(b-1)=1000000j+100000o+10000h+100s。
3.5.1 若 (y,h,d,s,o,n,b)=(3,8,1,7,2,0,6),则 6l=10j+1。因为左式为偶,右式为奇,所以无解。
3.5.2 若 (y,h,d,s,o,n,b)=(9,4,1,7,2,0,6),则 6l=10j-3,因为左式为偶,右式为奇,所以无解。
3.5.3 若 (y,h,d,s,o,n,b)=(7,2,1,8,4,0,6),则 6l=10j。因为 l≠j,所以 (l,j) 可能的取值为 (5,3)。即 (l,j,y,h,d,s,o,n,b)=(5,3,7,2,1,8,4,0,6)。
3.5.4 若 (y,h,d,s,o,n,b)=(2,6,1,4,5,0,3),则 3l=10j+5,即 l=5,j=1。因为 l≠o,所以无解。
3.5.5 若 (y,h,d,s,o,n,b)=(6,8,1,4,5,0,3),则 3l=10j+4,即 l=8,j=2。因为 l≠h,所以无解。
3.5.6 若 (y,h,d,s,o,n,b)=(9,7,1,4,5,0,3),则 3l=10j+3,即 l=1,j=0。因为 l≠d,所以无解。
3.5.7 若 (y,h,d,s,o,n,b)=(6,8,2,7,5,0,3),则 3l=10j+4,即 l=8,j=2。因为 l≠h,所以无解。
3.5.8 若 (y,h,d,s,o,n,b)=(8,4,2,7,5,0,3),则 3l=10j+3,即 l=1,j=0。因为 j≠n,所以无解。
3.5.9 若 (y,h,d,s,o,n,b)=(1,3,0,6,7,5,9),则 9l=10j+6,即 l=4,j=3。因为 j≠h,所以无解。
3.5.10 若 (y,h,d,s,o,n,b)=(3,1,0,6,7,5,9),则 9l=10j+4,即 l=6,j=5。因为 l≠s,所以无解。
综合 3.5.1 至 3.5.10 可知,本题有唯一解 (l,j,y,h,d,s,o,n,b)=(5,3,7,2,1,8,4,0,6),即:
570140
×
6
3420840 ❏验证程序Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 # Hazard Problem - hazard.py
# Copyright © 2008 Roy Fang <royfang@hotmail.com>. All rights reserved.
l = 10
a = range(l)
def permute(n):
if n > 1:
for i in range(n):
if i > 0:
m = n - 1 if n == 2 or n % 2 else i - (i == n - 1)
a[-n], a[-m] = a[-m], a[-n]
permute(n - 1)
else:
atoi = lambda *s: reduce(lambda x, y: x * 10 + y, s)
p = atoi(a[0], a[1], a[2], a[3], a[4], a[2])
q = a[5]
r = atoi(a[6], a[4], a[7], a[2], a[8], a[4], a[2])
if p * q == r:
print p, '*', q, '=', r
permute(l) 最后修订:2008-6-13 滕王阁序【分类】艺术 » 书法
【标签】滕王阁序 | 王勃 | 文徵明 关于《滕王阁序》,最有争议的话题是王勃创作这篇序文的年龄。流传甚广的《唐摭言》记载了一个传奇故事,明确指出王勃当年十四岁(虚岁)。不少人对此深信不疑,我想这和下面几个原因有关:一、人普遍存在追求英雄主义的心理,这只要看看美片为什么风行就知道了,美片归根结底就是宣扬个人英雄主义;二、《唐摭言》的这段故事说得尽极精彩,一波三折,让人不由得不信;三、王勃早慧,自幼能文善诗,《旧唐书》及《新唐书》均有记载,这增加了故事发生的可能性;四、杨炯《王子安集序》隐约对这个年龄提供旁证。
如果《唐摭言》的记载成立,我们来看完成这样一篇文章有哪些困难。一、王勃创作《滕王阁序》年仅十四;二、《滕王阁序》是即席创作的,并且天文地理历史典故这样的知识型内容俯拾皆是。如果不是事先有所准备(根据现有资料,事先准备的可能性不大),就要求王勃有充分的时间博闻,还要做到强识;三、《滕王阁序》是骈文中的翘楚,文学性强,文学技巧高,文笔精华不胜枚举,即使称它“天下骈文第一”,也不为过。这一点从《滕王阁序》衍生了多少成语,再比较其它骈文名篇,如曹植《洛神赋》、司马相如《子虚赋》、杜牧《阿房宫赋》即可见一斑。
先谈年龄问题,十四岁有没有可能创作这种顶级文章。我的观点是几不可能。
我们来找找智力活动范畴内,人类历史上有没有十六周岁前完成顶级作品的例子。我的记忆里没有(俟查补)。勉强擦边的例子是白居易十五周岁(这一年龄大概是根据《唐摭言》里的故事反推的,不一定就是事实)拜谒顾况的行卷《赋得古原草送别》,只是这首五律还很难算作顶级诗文。
如果把年龄稍放宽些,二十岁前达到非凡成就的则不乏其人。如高斯(Gauß,Gauss),十七岁发现最小二乘法(Least Squares Method),十九岁重新发现并证明二次互反律(The Law of Quadratic Reciprocity)及构造正十七边形尺规作法(Heptadecagon)。这些问题的解决在当时都称得上顶级成果,但和他后来系统地创建或发展数论(《算术研究》,Disquisitiones Arithmeticae)、代数学、非欧几何学、微分几何学(《关于曲面的一般研究》,Disquisitiones Generales Circa Superficies Curvas)、函数论、天文学(《关于天体作绕日圆锥曲线运动的理论》【1】,Theoria Motus Corporum Coelestium in Sectionibus Conicis Solem Ambientum)、测地学等又有霄壤之别。再如莫扎特(Mozart)、舒伯特(Schubert),雪莱(Shelley)、济慈(Keats)、徐志摩……,他们在短暂的生命里创建了丰功伟业,垂髫总发就已达到同行一生难以企及的高度。尽管如此,一般还是认为,他们中后期的作品较之少年时期的作品为佳。
二十岁后的例子就更多了,值得一提的是肖洛霍夫(Шолохов,Sholokhov),二十三岁开始创作《静静的顿河》(Тихий Дон,And Quiet Flows the Don),三十五岁完成。因为过于年轻,以至于数十年来对肖洛霍夫著作权的质疑不绝于耳。
再看即席创作,即席创作能产生什么样的文章。首先应该明白,古人即席创作诗词曲赋比今人做同样的事容易的多。这是文字训练的问题,不是智力差异——古人和今人在智力方面不大会有可察觉的差异。但同时也要明白,古人也不是随随便便灵光一闪,就能写出绝世名篇的,否则就不会有贾岛“独行潭底影,数息树边身”和王安石“春风又绿江南岸”了。此外还需明白,即席而作不同于有感而发。前者不管你有感没感,有料没料,一般要当众完成,限题限时,有时还限韵;后者没有这些限制。
我们同样来找找即席创作或限时完成顶级作品的例子。即席创作是古代读书人的基本功,应用的场合很多,《红楼梦》就有大量即景联句赋诗的描写。我们不难发现,《红楼梦》里即席创作的诗作虽有良品,如黛玉的《杏帘在望》、宝钗的《螃蟹咏》,但往往还是比不上感情与文辞都经过深刻酝酿的《葬花吟》、《芙蓉女儿诔》。而在即景联句这样的场合,甚至黛玉也会出现“斜风仍故故”、“无风仍脉脉”一类重叠或者合掌的大忌。当然,这里只是强调即席创作好的作品比较困难,但并不是说即席就创作不出好作品。刘禹锡《酬乐天扬州初逢席上见赠》就是一例。
来看即席创作的另一种形式——考试,古时是科举考试,现在是高考、考研(为何不叫“研考”?)。我的问题是:考场上出过千古名篇吗?我的记忆里没有(俟查补)。也许考试的形式限制了文才的发挥,也许出于保密原因,考场上的文章不能外泄。总之这类文章难得一见。
至于《滕王阁序》的文学价值和历史地位,如何分析与评价这篇序文。相信已有大量的文章论及此点,这里不再赘言。
关于王勃创作《滕王阁序》的年龄,上述观点至多只能算作旁证,权威的证据则来自文章本身,许多细微问题值得探讨。如“童子何知?躬逢胜饯”里的“童子”能说明王勃未成年吗?王勃哪些时期称得上“时运不齐,命途多舛”?一个十四年的少年会用“老当益壮,宁移白首之心”激励自己吗?“无路请缨,等终军之弱冠”的“弱冠”能说明王勃已成年吗?哪些时期王勃“无路请缨”呢?“他日趋庭,叨陪鲤对”是指此行乃是赴交趾探望父亲吗?至于那些相互矛盾的外证,不论正史还是野史,在没有新的更权威的资料发现之前,均不采信为宜。
本文的起意来自凌空网文徵明行书《滕王阁序》。因为喜爱,所以将原图简单整饬一番。经过重排、连缀、放缩、漂洗和修饰,字迹尚可辨识,收藏在这里,与同好共飨。原文第一节“襟三江而帶五湖”句缺一“帶”字,“五”字也不齐全。第二节“徐孺下陳蕃之榻”句的“之”字似乎也有缺笔。
![]() 【1】此名是箬衣依据原论文的英文译名 Theory of the Motion of the Heavenly Bodies Moving about the Sun in Conic Sections 转译。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||