65.9K
CodeProject 正在变化。 阅读更多。
Home

C# vs. VB 对决 - 使用 .NET 解决麦克马洪问题

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.40/5 (16投票s)

2005 年 3 月 14 日

3分钟阅读

viewsIcon

120914

downloadIcon

455

与其永远争论 C# 比 VB 好还是 VB 比 C# 好,不如让我们看看哪类程序员更胜一筹。

Sample Image - macmahon2.png

引言

在过去两年里,大约每隔几个月,就会有一篇文章声称“C# 比 VB.NET 快”。我同意 C# 可能确实稍快一些,我不会争辩。也许这是公平的。也许这是为了补偿 C# 程序员可能不如 VB 程序员的事实。您明白,是时候重燃一场像我们多年前在 Atari 和 Amiga 之间那样经典的战争了。如果我们无法决定哪种语言更好,那就让我们看看**哪类程序员更好**,是 VB 程序员还是 C# 程序员。

麦克马洪问题

我想挑战你们的是这个问题。

您需要拼凑一个由 24 个碎片组成的拼图。碎片已在本文开头图片的展示中。

  1. 必须使用所有 24 个碎片。
  2. 每个碎片都可以任意旋转到任何方向。
  3. 每个片段的颜色必须与相邻片段的颜色匹配。
  4. 拼图边框必须是同一种颜色(在这种情况下是红色)。

这个问题也可以复刻在硬纸板上,作为单人纸牌游戏来玩。

一个有效的解决方案

这是该问题的一种解决方案。

正如您所见

  • 它使用了所有 24 个碎片。
  • 边框全是红色的。
  • 每个碎片都与其邻居共享一种颜色。

挑战

挑战在于创建一个程序来寻找这个拼图的解决方案。程序需要计算出拼图有多少个解,然后尽可能快地完成。现有的代码已经在搜索了,但速度不快。我让我的电脑运行了 24 小时,但它没有完成……

VB.NET 结果

日期 描述 结果
14/03/2005

首次发布
作者:Pascal GANAYE

10,000 个解,超过 24 小时。未完成
15/03/2005 添加了一些优化 106624 个解,90 分钟

C# 结果

日期 描述 结果
14/03/2005

暂无提交

-
17/03/2005 Marc Clifton 开始了一个 C# 77,306 个解,约 60 分钟

其他语言

我很想看到其他语言的尝试。如果您有尝试,请在下面的论坛中发帖。

关注点

正如您所见,每个碎片都分为 4 个三角形,并填充了 3 种颜色。从数学上讲,这是一个不错的问题,因为这并不是随意选择的 24 个碎片,而是包含了所有可能的组合。有 3*3*3*3 = 81 种可能性。但如果您去掉重复项,最终只有 24 个不同的碎片。

提交规则

  • 我将为每种提交的语言发布一个提交。您也可以使用页面底部的论坛。
  • 程序可以使用任何形式的优化,只要它保持在托管的 .NET 环境中并且是原生语言(不能使用 MSIL)。
  • 所有优化都必须加以描述。请不要使用硬编码的解决方案。

我建议一种解决方案的命名结构。如果您将碎片命名为 A0, B0, C0,...X0。

Sample screenshot A0 Sample screenshot B0 Sample screenshot C0 Sample screenshot D0 Sample screenshot E0 Sample screenshot F0
Sample screenshot G0 Sample screenshot H0 Sample screenshot I0 Sample screenshot J0 Sample screenshot K0 Sample screenshot L0
Sample screenshot M0 Sample screenshot N0 Sample screenshot O0 Sample screenshot P0 Sample screenshot Q0 Sample screenshot R0
Sample screenshot S0 Sample screenshot T0 Sample screenshot U0 Sample screenshot V0 Sample screenshot W0 Sample screenshot X0

碎片 Sample screenshot B0 的旋转版本将被命名为

Sample screenshot B1(逆时针旋转 90 度)

Sample screenshot B2(旋转 180 度),以及

Sample screenshot B3(旋转 270 度)。

那么像这样的一个解决方案

可以这样写

B2 D0 I0 L0 J0 G0
A0 C2 V0 S0 T2 O3
K0 F0 X0 W0 U0 Q3
H2 E0 P2 R2 M2 N3

甚至可以像这样写成一行

B2D0I0L0J0G0A0C2V0S0T2O3K0F0X0W0U0Q3H2E0P2R2M2N3

这可能有助于比较我们的结果。

您可以在 这里 看到我的。

最后说明

我希望您能明白,我并不认真对待这场语言大战。我只是热爱麦克马洪问题。如果我们不确定有多少解决方案,我们怎么能继续生活呢?

历史

  • 2005年3月14日:初始版本

许可证

本文没有明确的许可,但可能包含文章文本或下载文件本身的用途条款。如有疑问,请通过下方的讨论板联系作者。作者可能使用的许可列表可以在 这里 找到。

© . All rights reserved.