徐小玉的博客。
分类:
2008-03-11 15:12:30
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“茶歇”活动中,要求参赛人员读取文本文件并从中找出唯一的条目。
小组 |
初级 |
最终期限 |
2008 年 2 月 26 日,星期二(太平洋标准时间上午 8:00) |
奖励点数 |
10 |
又是一个周一的早晨,办公楼里至少一半的人们将工作到周末,每个人都有点疲惫而且仍有大堆的工作需要去做。一位好心的小组助理决定为每个人来一杯咖啡。每个人可以选择 Latte、Espresso 和 Cappuccino 中的一种。助理将依次到各个办公室去拿大家的订单。(每个办公室里都有几个人。)他记下每个办公室的编号,以及预订的 Lattes、Espressos 和 cappuccinos 的数量。最后得到的列表如下所示:
Office 100 Espresso 3 Latte 1 Cappuccino 1 Office 200 Cappucino 2 Latte 2 Espresso 1 Office 300 …
等等。记完订单后,他突然发现一个问题:他需要的不是 3 杯 spressos 加 1 杯 espresso 加 2 杯 espressos 这样的订单。他需要的是一张记录每种类型咖啡总数的订单。如果您读取包含订单的文本文件(中的 Coffee.txt)并正确输出助理需要预订的每种类型饮料的总数,您即算成功完成了本次活动,输出内容如下所示:
Espresso: 15 Latte: 10 Cappuccino: 14
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Beginner VBScript: Event 6、Beginner Windows PowerShell: Event 6 或 Beginner Perl: Event 6。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“修复缺陷”活动中,要求参赛人员调试一个包含许多错误的脚本。
小组 | 初级 |
最终期限 | 2008 年 2 月 28 日,星期四(太平洋标准时间上午 8:00) |
奖励点数 | 10 |
任何编写过脚本,或者曾经修改过现有脚本的人都知道调试需要花费大量时间。在本次活动中,您将有机会测试一下自己的调试技能。我们将给你一个脚本,您需要找出其中的错误并使其能够正常工作。本练习的重点不是重新编写脚本;我们会为您提供脚本供您使用。我们将告诉您脚本应该具备的功能,您需要做一些必要的修改使该脚本能够正常工作。您可以移动代码行和修改代码行,但不得删除或添加新行。
VBScript 和 Windows PowerShell
这些脚本应具备如下功能:
• | 搜索 C:\Scripts 文件夹及其所有子文件夹。 |
• | 在每个文件夹里,搜索所有文本文件(扩展名为 .txt 的文件)并检查每个文件的创建日期。 |
• | 将 10 天以前创建的所有 .txt 文件复制到文件夹 C:\Old 中。 |
• | 回显每个复制文件的文件名(不是完整路径,仅文件名)。(在 VBScript 中,当在 CScript 下运行时应该将这些文件名显示到控制台窗口中。或者,您可以在单个消息框中显示所有列出的文件名。) |
• | 回显复制的文件个数。 |
提示:我们向每个脚本的正确版本中引入了 10 个错误来创建有错误的版本。
以下是这些脚本(也可在中找到):
VBScript:
Set objFSO = CreateObject("FileSystemObject") Set objFolder = objFSO.GetFolder("C:\scripts") dtmOld = DateAdd("m", -10, Now) AllFolders objFolder CopyTextFiles objFolder Sub AllFolders Folder For Each objFolder in Folder.SubFolders CopyTextFiles subfolder AllFolders Subfolder Next End Sub Sub CopyTextFiles(subFolder) colFiles = SubFolder.Files For Each objFile in colFiles arrSplitName = Split(objFile.Name, ".") strExtension = arrSplitName(UBound(arrSplitName) - 1) If strExtension = "txt" and objFile.DateCreated > dtmOld Then objFSO.CopyFile objFile.Path, "C:\old\" Wscript.Echo objFile.Name i = i + 1 Edn If Next End Wscript.Echo Wscript.Echo "Total Files: " & i
PowerShell:
for ($i in Get-ChildItem C:\Scripts) ( if {($i.CreationTime -gt ($(Get-Date).AddMonths(-10))) and ($i.Extension = "txt")} { # Copy-Item $i.FullName C:\old $i.Name $x = $x + 1 } ) "" "Total Files: " + $y
Perl
本活动的 Perl 版本稍有不同。在 Perl 中处理日期有点复杂,特别是当您没有安装特定的模块时更是如此。我们不能假设每个人都已安装了这些模块,而且我们也不希望这项活动变得复杂。所以我们提供给您的脚本只需完成以下操作即可:
• | 搜索 C:\Scripts 文件夹及其所有子文件夹。 |
• | 在每个文件夹里,搜索所有文本文件(扩展名为 .txt 的文件)。 |
• | 将每个 .txt 文件复制到文件夹 C:\Old 中。 |
• | 回显每个复制文件的文件名(不是完整路径,仅文件名)。 |
• | 回显复制的文件个数。 |
提示:我们为正确的脚本引入了 5 个错误来得到错误脚本。
以下是包含错误的脚本(也可在中找到):
use File::Copy; File::Find; File::Find::find({wanted => \&wanted}, 'C:\Scripts'); print "\nTotal Files: " . $count; exit; sub wanted ( my $count = 0; /\.txt$/ or return; my $filename = $_; print "$filename \n"; my $newfile = "C:\\old\\" . "$_"; copy($File::Find::name, $newfile) or die "Copy failed: $!"; $count = $cout + 1 )
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Beginner VBScript: Event 7、Beginner Windows PowerShell: Event 7 或 Beginner Perl: Event 7。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• | 在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• | 您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• | 您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“猜随机数”活动中,要求参赛人员生成一个随机数,并允许用户尝试猜测该数字。
小组 |
初级 |
最终期限 |
2008 年 2 月 28 日,星期四(太平洋标准时间上午 8:00) |
奖励点数 |
15 |
在本次活动中,不同的参赛小组稍有差异。如果您在 VBScript 小组参赛,则需要创建一个 HTML 应用程序 (HTA)。如果您在 Windows PowerShell 或 Perl 小组参赛,则需要使用标准命令行脚本。
此活动要求您创建一个游戏。当然,也许没有您平时看到的游戏那么有趣(毕竟这是初级小组),但不管怎么说都是个游戏啊。在本次比赛中,您的脚本将生成一个 1 到 50 之间的随机数,并要求用户猜测该数字。
VBScript
创建标题为猜随机数的 HTA,其中包含:1) 一些要求用户输入数字的文本;2) 一个文本框;和 3) 一个标记猜猜看的按钮。您的 HTA 应与下面的输出类似:
HTA 启动后,它应该生成一个 1 到 50 之间的随机数(仅限整数)。当用户输入一个数字并单击“猜猜看”按钮后,HTA 应显示一个消息框,说明用户是否猜对了这个随机数。如果猜错了,消息框应该告诉用户猜测的数比随机数大还是小:
当用户关闭消息框后,允许用户再猜一次。用户猜对后,HTA 应该显示消息框,并在其中显示随机数和猜对正确数一共用了多少次。类似如下输出:
当用户单击“确定”后,游戏结束,脚本需要关闭 HTA 窗口。
Windows PowerShell/Perl
Windows PowerShell 和 Perl 将使用标准命令行脚本。该脚本将显示一条消息,要求用户输入一个 1 到 50 之间的数。脚本将把用户提供的数字与随机生成的数字进行比较。如果数字不同,脚本将显示消息指示猜测的数是太大还是太小,并要求用户再次输入。
用户猜对后,脚本将显示该随机数和猜对正确数一共用了多少次。游戏到此结束,脚本也将结束。
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Beginner VBScript: Event 8、Beginner Windows PowerShell: Event 8 或 Beginner Perl: Event 8。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
2008 冬季脚本编写比赛
初级活动 9:游泳池派对
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。
在“游泳池派对”活动中,要求参赛人员读取数据库,并根据数据库中的数据进行一些简单的计算。
On This Page
小组 | 初级 |
最终期限 | 2008 年 3 月 3 日,星期一(太平洋标准时间上午 8:00) |
奖励点数 | 15 |
在本次活动中,您将需要读取数据库(Pool.mdb 位于)。 这是一个 Microsoft Access 数据库,但不用担心,您不需要在计算机上安装 Access 即可完成本活动。
Pool.mdb 数据库包含一个名为 SwimmingPool 的表格。该表格有 8 个字段:
• | ID.每个表格的唯一标识符。一个好的数据库通常会为每个表创建一个唯一的键,但完成本活动不需要使用该键。 |
• | Name.一个字符串,其中包含输入游泳池信息的客户的姓名。 |
• | Length.游泳池的长度,以米为单位。(所有游泳池都为矩形。) |
• | Width.游泳池的宽度,以米为单位。 |
• | Depth.游泳池的深度,以米为单位。如果游泳池不是统一深度(即 Slope 字段为 Yes),则该字段的值为 0。 |
• | Slope.一个 Yes/No 字段,表明该游泳池是统一深度 (No) 还是有浅端和深端 (Yes)。对于本次活动,您可以假定深端和浅端的尺寸相同。也就是说,如果游泳池有 10 米宽,20 米长,则深端应该有 10 米宽,10 米长(整个游泳池长度的一半),浅端也有 10 米宽,10 米长。 |
• | SStart.游泳池浅端的深度,以米为单位。 |
• | SEnd.游泳池深端的深度,以米为单位。 |
要成功完成本活动,您需要读取数据库并显示每位客户的名称,以及该客户的游泳池的储水量(以升为单位)。您的脚本输出应与下面的输出类似:
Name: Jones Volume of Water: 1000000 Name: Myer Volume of Water: 1800000
为了帮助您取得成功,下面给出计算游泳池储水量(以升为单位)的公式:
• | 统一深度:长 x 宽 x 深 x 1000 |
• | 坡度:长 x 宽 x ((深端深度 + 浅端深度) / 2) x 1000 |
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Beginner VBScript: Event 9、Beginner Windows PowerShell: Event 9 或 Beginner Perl: Event 9。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• | 在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• | 您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• | 您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“保龄球”活动中,参赛人员将得到 10 局保龄球的分数卡,并要求计算分数。
小组 | 初级 |
最终期限 | 2008 年 3 月 3 日,星期一(太平洋标准时间上午 8:00) |
奖励点数 | 10 |
保龄球游戏是在球道上投球,尝试击倒以三角形布局放置的 10 个球瓶。选手有两次机会。如果第一次投球就击倒了全部 10 个球瓶,则称为“全中”。全中在记分卡上以 X 表示。如果选手在第一次投球时击倒部分球瓶,且在第二次投球时击倒剩余的球瓶,则称为“补中”。补中在记分卡上以 / 表示。
如果选手两次投球都没能击倒所有球瓶,则他或她将得到一个指示击倒球瓶数的分数。例如,如果他第一次投球击倒 4 个球瓶,第二次击倒 3 个球瓶,则他的分数为 7。
补中按照击倒全部球瓶的 10 分加上下一次投球所得分数进行计算。例如,如果先击倒 8 个球瓶,然后击倒 2 个球瓶,则为补中。下一局时(一“局”表示下一次尝试击倒 10 个球瓶),选手第一次投球击倒 4 个球瓶。这表示,对于他补中的那一局来说,选手将得到 14 分。在保龄球记分卡上应显示类似下面的信息:
该信息的含义在于为了计算补中局的总分数,您必须等到下一局第一次投球结束。全中与此类似,不同之处在于所得分数应加上后两次投球所得的分数,而不是后一次投球所得的分数。因此,如果选手在第一局里全中,他还将得到随后两次投球的分数。如果随后两次投球分别击倒 6 瓶和 3 瓶,则第 1 局总分数为 19 (10 + 6 + 3),而第 2 局的分数为 9 (6 + 3)。这样前两局结束后,总分数将为 28,如下所示:
在本次活动中,您将挑战根据 10 局的记分卡计算总分:
开始之前,我们将给您一点小小的提示。不仅仅是提示,我们将为您提供的是脚本的入手点。虽然可能还有其他方式能够完成本活动,但您应使用一个数组。为什么呢?因为我们将要给您的就是一个数组:
VBScript
arrFrames = Array(2,5,7,"/",8,1,"X",9,"/",5,3,7,0,4,5,"X",2,0)
Windows PowerShell
$arrFrames = 2,5,7,"/",8,1,"X",9,"/",5,3,7,0,4,5,"X",2,0
Perl
@arrFrames = (2,5,7,"/",8,1,"X",9,"/",5,3,7,0,4,5,"X",2,0)
为什么我们会给您一个数组呢?因为当测试本活动参赛人员编写的脚本时,我们将用不同的数组替换该数组。这表示您的脚本需要能够处理任意 10 局保龄球分数,而不仅是我们在此处演示的这一组。
注意:如果您对最后一局出现补中的情况感到迷惑,那告诉您,在真实的保龄球比赛中,您将在最后一局结束后得到第三次投球的机会。但在本次活动中,我们不会测试这种情况。本次活动的最后一局包含两个数字,没有补中或全中的情况。测试脚本时输入的任意数组也将以两个数字结尾,不会在最后一局出现补中或全中。换句话说,您不需要考虑最后一局出现补中或全中的情况。 |
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Beginner VBScript: Event 10、Beginner Windows PowerShell: Event 10 或 Beginner Perl: Event 10。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• | 在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• | 您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• | 您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“我能否知道您的电话号码?”中,将向参赛人员提供电话号码,然后他们需使用标准电话拨号盘上的字母来构建一个词,其中的字母对应于电话号码中的数字。
小组 | 高级 |
最终期限 | 2008 年 2 月 20 日,星期三(太平洋标准时间上午 8:00) |
奖励点数 | 10 |
您可能知道,电话号码比较难记;这也是许多公司和组织使用各种助记手段(如缩写词和诗文)来使其电话号码易于记忆的原因。
它具体指什么呢?我们能否向您举出一个此类助记手段示例?当然可以。例如,假定脚本专家的电话号码是 727-4787。此号码比较难记;因此,脚本专家可能告诉人们改为拨打 SCRIPTS。SCRIPTS 这个词中的字母对应于电话号码中的数字 – 这就是助记手段:它使您更容易记住某些事情。
好问题:您如何从 SCRIPTS 获知电话号码(如 727-4787)?在标准的电话拨号盘上,数字 2 到 9 除其数字值外均被指定了字母值:
数字 | 字母值 |
2 | A B C |
3 | D E F |
4 | G H I |
5 | J K L |
6 | M N O |
7 | P R S |
8 | T U V |
9 | W X Y |
正是这些对应字母值使我们能从 SCRIPTS 一词推出电话号码 727-4787:
7 | S |
2 | C |
7 | R |
4 | I |
7 | P |
8 | T |
7 | S |
真是太酷了;SCRIPTS 比 727-4787 容易记得多。另一方面,尝试从指定的电话号码推出使用哪个词(如果有)也是种挑战。真正酷的是可将电话号码转换成某个词的脚本。
现在,请猜猜您需在高级小组的活动 1 中做些什么。
猜对啦。您在活动 1 中的任务是:根据给定的七位数字电话号码(如 732-3464)创建对应于这些数字的七个字母的单词。记住只能使用每个数字所对应的三个字母值。例如,为 732-3464 创建的词必须以字母 P、R 或 S 开头。为什么呢?因为电话号码的第一个数字是 7,并且在标准电话拨号盘上,只有这三个字母与数字 7 关联。如果您觉得疑惑,请看 732-3464 的一个组词示例 READING:
7 | 3 | 2 | 3 | 4 | 6 | 4 |
R | E | A | D | I | N | G |
此项活动的规则是:您必须提出一个七个字母的词;不接受其他方式的七个字母(如一个四个字母的词加上一个三个字母的词)。此外,该单词还必须出现在文件 WordList.txt 中,它是。 请切记:1) 尽管对于指定的一个电话号码可能存在多个解决方案,您的脚本只应显示一个解决方案;2) 脚本只应显示正确的解决方案。请勿显示所有可能的解决方案;例如,切勿显示:
PDBEGMH READING SFCFHOI
如果这样,我们将认为您的回答不合格。相反,请仅显示一个正确的解决方案,如:
READING
脚本必须提示用户输入电话号码(通过命令行或使用输入框)。脚本经过测试后,电话号码将以无连字符的形式输入;因此号码 732-3464 在程序中的实际输入为:
7323464
换句话说,无需包含从电话号码中删除连字符的代码;连字符不会出现在电话号码中。对了,当脚本读取文件 WordList.txt(相信我们:脚本需要这样做)时,请确保该文件位于 C:\Scripts 文件夹中。如果文件位于任何其他文件夹中,在我们测试您的脚本时它可能会失败。
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 1、Advanced Windows PowerShell: Event 1 或 Advanced Perl: Event 1。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• | 在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• | 您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• | 您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“冰上激情”中,参赛人员必须编写一个脚本来确定花样滑冰比赛的优胜者。
小组 |
高级 |
最终期限 |
2008 年 2 月 20 日,星期三(太平洋标准时间上午 8:00) |
奖励点数 |
10 |
虽然您可能是脚本专家,您平生最大的愿望却是能够裁决一场花样滑冰比赛。高级小组中的活动 2 即是梦想成真的实证。
如果您想较真,那好,不必实际裁决花样滑冰比赛;已为您完成了裁决。而您所需做的是确定谁实际赢取了比赛,所用公式大致类似于国际滑冰联合会所用的公式。听起来很有趣,对吧?
要确定优胜者,您的脚本必须使用文本文件 Skaters.txt(可在)中的评分信息。文本文件中的每行包括比赛的每名参赛人员的信息;更具体点说,每行包含了滑冰者的姓名以及每名裁判(共七名)所判定的分数:
Ken Myer,55,66,76,67,59,70,54
要计算 Ken Myer 的分数,您(或更准确地说,您的脚本)必须执行以下操作:
• |
去掉七个分数中的最高分 (76)。 |
• |
去掉七个分数中的最低分 (54)。 |
• |
计算剩余五个分数(55、66、67、59 和 70)的平均数。 |
因此,Ken Myer 的得分将为 63.4(55 + 66 + 67 + 59 +70,然后除以 5)。
此项活动的规则是:您的脚本必须报告金牌得主(最高分数的滑冰者);银牌得主(次高分数的滑冰者)以及铜牌得主(第三高分数的滑冰者)以及他们的分数。最终输出应与以下类似:
Gold medal: Ken Myer, 63.4 Silver medal: Pilar Ackerman, 62.78 Bronze medal: Jonathan Haas, 61.8272
如果您的另一最大愿望是成功完成此活动,请务必将文件 Skaters.txt 放入文件夹 C:\Scripts;如果使用任何其他文件夹,则脚本可能会失败。此外,还必须在命令窗口中显示结果;切勿覆盖文件 Skaters.txt。如果覆盖此文件,您将不会收到此活动的任何点数。(并且我们会对您有些小小意见,因为您覆盖了我们的文件副本!)
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 2、Advanced Windows PowerShell: Event 2 或 Advanced Perl: Event 2。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“即刻(对决)优胜者”中,参赛人员必须编写一个脚本来确定“即刻(对决)”选拔的优胜者。
小组 |
高级 |
最终期限 |
2008 年 2 月 22 日,星期五(太平洋标准时间上午 8:00) |
奖励点数 |
20 |
实话告诉您,解释活动 3 可能比成功完成此活动更难。但让我们试试吧。
投票和选举领域的最新趋势之一是“即刻对决”选举。此活动要求您确定在此类选举中的优胜者。
当然,说到即刻对决选举,存在着多种形式;我们这个版本的即刻对决选举原理如下。四个候选人参加竞选:
• |
Ken Myer |
• |
Jonathan Haas |
• |
Pilar Ackerman |
• |
Syed Abbas |
在典型的选举中,投票者只能投票赞成一名候选人。然而,在我们的即刻对决选举中,投票者可投票赞成所有四名候选人,以偏爱程度排序。例如,假定某个用户觉得 Jonathan Haas 是最适合此职位的人选,随后依次是 Pilar Ackerman、Syed Abbas 和 Ken Myer。此时,投票者的投票应如下所示:
1. |
Jonathan Haas |
2. |
Pilar Ackerman |
3. |
Syed Abbas |
4. |
Ken Myer |
这部分比较简单;接下来就有点难度了。在计算选票时,仅记录投票者首要选择的票;即意味着,在该选票上,Jonathan Haas 获得一票。记录得票数后,检查有无候选人的得票数超过选票总数的 50%。假设 Jonathan Haas 得到了 53% 的选票。则 Jonathan Haas 为优胜者,脚本应报告此结果以及 Jonathan 的得票百分比:
The winner is Jonathan Haas with 53% of the vote.
祝贺您,Jonathan!
但是,如果假定没有人获得超过 50% 的选票,则得票最少的候选人将被淘汰。例如,假定经过第一轮后,各候选人的得票百分比如下所示:
Pilar Ackerman |
40% |
Syed Abbas |
30% |
Ken Myer |
20% |
Jonathan Haas |
10% |
由于总百分比最低,Jonathan Haas 从竞选中被淘汰。也就意味着需重新计算选票,但有一人除外:不会记录 Jonathan Haas 的选票。而是将从所有选票中删除 Jonathan Haas。注意,投票如下的投票者:
1. |
Jonathan Haas |
2. |
Pilar Ackerman |
3. |
Syed Abbas |
4. |
Ken Myer |
该选票现在将变为:
1. |
Pilar Ackerman |
2. |
Syed Abbas |
3. |
Ken Myer |
明白其工作原理了吗?一旦从选票中删除了 Jonathan Haas,Pilar Ackerman(他开始是投票者的第 2 号选择)将变为投票者的首选。然后重新计算选票。如果没有人得到超过 50% 的选票,则从选票中删除总百分比最低的候选人,接着做最后一次汇总统计。
您都清楚了吗?很好。您的脚本需做的是读取文本文件 Votes.txt,可在 (顺便提一句,应将此文件放到文件夹 C:\Scripts 中)。然后,脚本应首先遍历一次所有选票,针对四位候选人中的每一位汇总选票。文本文件中的每一行代表一张选票(类似如下所示),并按偏爱程度列出所有四名候选人,候选人姓名以逗号分隔:
Jonathan Haas,Pilar Ackerman,Syed Abbas,Ken Myer
在本示例中,投票者的首要选择是 Jonathan Haas;请记住,在统计选票时,我们仅计算首要选择。
如果没有候选人得到超过 50% 的选票,会从选票中删除得分最低的候选人。如果 Jonathan Haas 是得分最低候选人,该选票现在将如下所示(Pilar Ackerman 现已成为投票者的首要选择):
Pilar Ackerman,Syed Abbas,Ken Myer
一旦从选票中删除了 Jonathan Haas,选票总数将重置为 0,并随后重新计算修改后的选票。如果没有候选人得到超过 50% 的选票,将从选票中删除得分最低的候选人并最后一次计算选票。一旦某个候选人得到超过 50% 的选票,选举随即结束,并且需要按如下方式报告结果:
The winner is Syed Abbas with 62% of the vote.
是的,我们知道:它确实有点复杂。完成活动 3 的秘诀是:计算选票(请记住,仅计算用户首要选择的选票)并看有无任何人得到超过 50% 的选票。如果没有,则彻底删除其选票百分比最低的候选人,将剩余候选人的选票总数设置为 0,然后重新计算。如何彻底删除其选票百分比最低的候选人呢?对不起,我们不能透露答案;请开动脑筋自行解决吧。
注意。无论如何切勿覆盖文件 Votes.txt。如果这样,我们将认为您的回答不合格。但不用为此担心;没必要覆盖 Votes.txt。 |
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 3、Advanced Windows PowerShell: Event 3 或 Advanced Perl: Event 3。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“想象万岁”中,参赛人员必须编写一个脚本来在屏幕上显示美仑美奂的日历。
小组 | 高级 |
最终期限 | 2008 年 2 月 22 日,星期五(太平洋标准时间上午 8:00) |
奖励点数 | 5 |
只注重外在美而忽略内在美是非常肤浅的人的特征。欢迎来到脚本专家的皮毛世界!
对了,还欢迎参加高级小组的活动 4。
说实话,这个活动非常简单(相对而言,确实如此)。要成功完成此活动,需编写一个可提示用户输入月份的脚本(使用数字值:1 代表一月,2 代表二月等等)以及年份(使用四个数字的值,如 2008)。换句话说,为响应提示,将输入以下值来代表 2008 年 3 月:
3/2008
现在您需要做的是生成并显示(在命令窗口中)该月的日历。例如,如果用户针对月份输入值 2(二月)并针对年份输入 2008,您的脚本应在命令窗口中显示以下信息:
February 2008 Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
明白了吗?日历必须类似以上所示,包括显示月份和年份名称以及每周中的每一天;换句话说,它必须看起来像实际的日历,就像在 Windows 操作系统中看到的那样:
为评价本活动,我们将随机选取并输入 2000 年 1 月到 2010 年 12 月之间的任意月份。并且请记住,在相当程度上,整洁会在考虑范畴内。您的日历并非必须完全像我所展示的那样;但是,日历必须易于读取。类似如下的输出会导致脚本失败:
February 2008 SMTWTFS 12 3456789 10111213141516 17181920212223 242526272829
为什么它会失败?因为我们无法确定将哪个日期指定给所给定的那天。例如,请看一下日期第三行。该周的星期日是第 1 天还是第 10天?至少,应向我们提供类似如下的输出:
February 2008 S M T W T F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
它并非我们见过的最酷日历,但它的确有效。
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 4、Advanced Windows PowerShell: Event 4 或 Advanced Perl: Event 4。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• | 在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• | 您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• | 您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“您称之为强密码?”中,参赛人员必须根据提供的条件编写一个脚本来确定密码的强度。
小组 |
高级 |
最终期限 |
2008 年 2 月 26 日,星期二(太平洋标准时间上午 8:00) |
奖励点数 |
10 |
在当今时代,人们常被鼓励在需要创建或更改密码时尽可能使用“强”密码。它确实是个好建议,但也带来了一些问题:1) 究竟什么是强密码,2) 我们如何用相同的方式判断一个给定密码的强弱?活动 5 旨在帮助您回答这两个问题。
在本次活动中,您将创建一个可确定密码“强度”的脚本。密码强度将通过对其进行以下检查来确定。此脚本必须执行以下所有操作:
• |
确保密码并非某个实际的词。密码 rhubarb 无法通过本测试,因为 rhubarb 是个实际的词。要确定某个词是否为实际词,请始终使用文件 WordList.txt,它是一个官方词列表,包含在。 (请务必将此文件放入文件夹 C:\Scripts 中。) |
• |
确保密码去掉最后一个字母后并非某个实际的词。例如,密码 rhubarb5 无法通过此测试,因为:如果删除最后一个字母,剩余字符值 – rhubarb – 是一个实际的词。 |
• |
确保密码去掉第一个字母后并非某个实际的词。例如,密码 @rhubarb 无法通过此测试,因为:如果删除第一个字母,剩余字符值 – rhubarb – 是一个实际的词。 |
• |
确保密码不能简单地将 0(零)替换为字母 o(无论大写 O 还是小写 o)。例如,密码 t00lbox 无法通过此测试。为什么呢?因为如果将每个零替换成字母 O,就会得到一个实际的词:toolbox。 |
• |
确保密码不能简单地将 1(一)替换为字母 l(无论大写 L 还是小写 l)。例如,密码 f1oti11a 无法通过此测试。为什么呢?因为如果将每个一替换成字母 L,就会得到一个实际的词:flotilla。 |
• |
确保密码至少为 10 个字符,但不能超过 20 个字符长。密码 rhubarb 无法通过此测试,因为它只有 7 个字符。 |
• |
确保密码包括至少一个数字(数字 0 到 9)。密码 rhubarb%$qwC 无法通过此测试,因为它未包括数字。 |
• |
确保密码包括至少一个大写字母。密码 rhubarb 无法通过此测试,因为它未包括大写字母。 |
• |
确保密码包括至少一个小写字母。密码 RHUBARB 无法通过此测试,因为它未包括小写字母。 |
• |
确保密码包括至少一个符号。它可以是任意字符(大写或小写字母,或者数字);也可包括(但不限于)符号 ~、@、#、$、% 和 ^。 |
• |
确保密码并不包括四个连续(或更多)小写字母。密码 rhubARB 无法通过此测试,因为它包括四个连续小写字母 (rhub)。 |
• |
确保密码并不包括四个连续(或更多)大写字母。密码 rHUBArb 无法通过此测试,因为它包括四个连续大写字母 (HUBA)。 |
• |
确保密码并不包括任何重复字符。密码 rhubarb 无法通过此测试,因为它包括两个 r 和两个 b。 |
注意。确实有许多要记的条件,对吧?为帮助您追踪所有事项,我们在。 |
要成功完成此活动,您的脚本必须接受某个可能密码作为命令行参数,然后评定该密码。例如,如果要评定密码 rhubarb33! 的强度,脚本的开头类似以下命令:
myscript.vbs rhubarb33!
脚本开始的密码分数应为 13;即意味着通过所有检查的密码的最终分数为 13。从参数集检索密码后(并且我们将每次只向脚本传递一个密码),脚本应针对密码运行之前提到的每个检查。如果密码通过某个指定检查(例如检查密码是否为实际词的测试),脚本随后应继续下一测试。这应该是比较简单的。
那么,如果密码未能通过指定检查又会如何呢?例如,密码 rhubarb 将无法通过规定密码不能具有四个连续小写字母的测试。在这种情况下,脚本必须执行两项操作:
• |
从密码分数中减 1。例如,如果密码分数为 11 并且脚本对四个连续小写字母的检查失败,则密码分数应降到 10 |
• |
返回一条消息,说明提议的密码无法通过此测试。例如,此时应返回类似如下的消息: Four consecutive lowercase letters in password. |
完成所有检查后,脚本应使用以下等级评定密码:
• |
低于 6 的分数代表弱密码。 |
• |
分数 7、8、9 或 10 代表中等强度密码。 |
• |
分数 11 或更高代表强密码。 |
您应返回分数和密码评定。例如:
A password score of 4 indicates a weak password.
比方说,检查密码 rhubarb33! 时应得到以下输出:
No uppercase letters in password. Four consecutive lowercase letters in password. Duplicate letters in password. A password score of 10 indicates a moderately-strong password.
这就是您需要完成的全部功能。
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 5、Advanced Windows PowerShell: Event 5 或 Advanced Perl: Event 5。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“素数时间”中,参赛人员必须编写一个脚本来计算并显示 1 到 200(包括 1 和 200)之间的所有素数。
小组 |
高级 |
最终期限 |
2008 年 2 月 26 日,星期二(太平洋标准时间上午 8:00) |
奖励点数 |
5 |
素数是只能被 1 和自身整除的数字。例如,7 是一个素数。为什么呢?因为可被 7 整除的数字只有两个:1 和 7。与其相比,12 则不是素数。这又是为什么呢?因为,除数字 1 和 12 外,12 还可整除其他值(2、3、4 和 6)。
了解素数的定义后,就可以编写能计算素数的脚本了。此项活动的规则是:您必须编写一个脚本来计算并列出 1 到 200(包括 1 和 200)之间的所有素数。例如:
1 3 5 7
等等。这就算完成了吗?这即是成功完成本活动所需实现的功能。(嗯,即使是脚本能手也需要偶尔做点简单的事儿,对吧?)
提示。对,你们中的有些人可能已经忘记了如何计算素数。幸运的是,可通过 Internet 获取帮助您完成此任务的算法。例如,搜索筛法求质数,并看看是否有所帮助。 |
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 6、Advanced Windows PowerShell: Event 6 或 Advanced Perl: Event 6。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“打球!”中,参赛人员必须编写一个脚本来规划棒球联赛的所有比赛。
小组 |
高级 |
最终期限 |
2008 年 2 月 28 日,星期四(太平洋标准时间上午 8:00) |
奖励点数 |
10 |
在棒球联赛(对于本活动而言,也可以是其他任意类型的联赛)中,每个队将与比赛中的其他参赛队仅进行一次比赛。例如,假定我们的比赛有三个队(A、B 和 C 队)。那么,联赛将包含以下比赛:
• |
A 对 B |
• |
A 对 C |
• |
B 对 C |
明白其工作原理了吗?A 对 B 和 C;B 对 A 和 C;C 对 A 和 B。就这么简单。
您在活动 7 中的任务是规划以下 6 个队的棒球联赛:
• |
A 队 |
• |
B 队 |
• |
C 队 |
• |
D 队 |
• |
E 队 |
• |
F 队 |
为规划联赛,必须完成两项工作。首先,必须确保每个队与其他每个队进行一次(并且仅一次)比赛。例如,A 队必须参加以下比赛:
• |
A 对 B |
• |
A 对 C |
• |
A 对 D |
• |
A 对 E |
• |
A 对 F |
然后,必须按参赛顺序列出比赛。之前的顺序不可接受。为什么不行呢?因为它意味着 A 队将必须参加联赛的前 5 场比赛,这似乎不公平。因此,在计算要举行的比赛(如 A 对 B、A 对 C 等等)后,脚本必须随后随机规划比赛。这样,最终的联赛计划将类似如下所示:
• |
C 对 D |
• |
A 对 F |
• |
B 对 D |
等等。
请记住,由于规划是随机确定的,因此并无正确答案的说法。只要达到以下要求,就算满足了活动的所有规定:1) 安排每队与其他队进行一次并且仅进行一次比赛;2) 实际的比赛规划是随机确定的。还应注意,各队的列出顺序无关紧要;换句话说,比赛:
• |
A 对 B |
被视为与以下比赛相同:
• |
B 对 A |
它也意味着如果这样做规划,就算是出错:
• |
A 对 B |
• |
B 对 A |
提示。告诉您一个秘诀,您可以用它快速检查您的答案:规划应包含 15 场比赛。 |
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 7、Advanced Windows PowerShell: Event 7 或 Advanced Perl: Event 7。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“制作美妙的音乐”中,参赛人员必须编写一个脚本来编译一个音乐播放列表,其中列出要烧录到 CD 中的歌曲。
小组 |
高级 |
最终期限 |
2008 年 2 月 28 日,星期四(太平洋标准时间上午 8:00) |
奖励点数 |
15 |
数字音乐播放器无疑是未来的潮流,但在它尚未到来之前,许多人仍喜欢将数字音乐文件“烧录”到 CD 上。烧录过程非常简单;困难的是尝试确定将哪些歌曲放到一张 CD 上,以及可将多少首歌曲放到一张 CD 上。但是,如果能为高级小组中的活动 8 想出一个解决方案,它将不再是个问题。
在此项活动中,将为您提供一个文本文件(SongList.csv,可在),它包含了有关多个数字音乐文件的信息;文本文件中的每一行包含了歌曲名、艺术家姓名以及歌曲长度(格式为 分钟:秒)。例如:
Rocky Raccoon,The Beatles,3:41 Honey Pie,The Beatles,2:41 I Saw Her Standing There,The Beatles,2:56
您的工作是使用该文本文件中的信息来创建一个歌曲播放列表,这些歌曲(至少在理论上)会最终烧录到一张音乐 CD 中。
注意。您只需要创建播放列表;不必实际将歌曲烧录到 CD 上。我们也不希望您实际将歌曲烧录到 CD 上;如果这样,我们的测试过程将需要很长的时间。 |
因此,知道要点了吗?实际上这里有几个要点。首先,需要优化播放列表上的音乐数量;因此,音乐的总时间必须至少为 75 分钟但不超过 80 分钟。换句话说,如果播放列表上所有歌曲的长度加起来为 82 分零 45 秒,那么,您就违反了此活动的规则。
其次,播放列表最多只能包含同一艺术家的两首歌曲。如果播放列表已包括 Beatles 的 Rocky Raccoon 和 Honey Pie,您将再无法添加其他 Beatles 歌曲;如果继续添加,我们将认为您的答案不合格。每位艺术家最多两首歌曲。
不用说,此活动有多个可能的解决方案。即意味着不必刻意追求解决方案;毕竟,并无解决方案的说法。只需确保创建(并显示)歌曲列表以及音乐的时间总长即可。例如:
The BeatlesRocky Raccoon3:41 The BeatlesHoney Pie2:41 Total music time: 6:22
当然,如果音乐时间总长不足 75 分钟,此示例将失败。但是,您已经明白我的意思了吧。
为成功完成此活动,请将文件 SongList.csv 放入文件夹 C:\Scripts;如果使用任何其他文件夹,它可能会失败。脚本应返回艺术家姓名、歌曲名称以及格式为 m:ss 的歌曲长度,其中 m 代表分钟数,ss 代表秒数。请注意,秒数的返回格式必须为两位数字;例如,如果歌曲长度为 3 分零 9 秒,则必须显示为如下所示:
3:09
在列表的末尾,还必须报告光盘总时间,也使用格式 m:ss。请记住,总时间必须大于或等于 75 分钟且小于或等于 80 分钟。
噢:您还需按艺术家姓名以字母顺序排序播放列表;从而使我们可更加轻松地确认播放列表中任何艺术家的歌曲不超过两首。以下为您的脚本应显示的输出类型示例:
Alice Cooper I'm Eighteen 2:58 Badfinger Carry On Til Tomorrow 4:49 Badfinger Day After Day 3:11 Credence Clearwater Revival Have You Ever Seen the Rain? 2:39 Dire Straits Walk of Life 4:12 Donovan Catch the Wind 5:02 George Harrison What is Life? 4:27 Jefferson Airplane White Rabbit 2:34 Nick Cave and the Bad Seeds Henry Lee 3:56 Nirvana All Apologies 3:50 Nirvana Heart-Shaped Box 4:41 Paul Simon Mother and Child Reunion 2:48 Robert Palmer Simply Irresistible 4:12 The Animals House of the Rising Sun 4:31 The Bangles Manic Monday 3:06 The Beatles Back in the USSR 2:43 The Beatles Honey Pie 2:41 The Kinks Lola 4:05 The Ramones I Wanna Be Sedated 2:29 The Rolling Stones Anybody Seen My Baby? 4:07 The Rolling Stones It's Only Rock and Roll 4:10 Total music time: 77:11
祝您好运!
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 8、Advanced Windows PowerShell: Event 8 或 Advanced Perl: Event 8。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“变换词义”中,参赛人员必须编写一个脚本来颠倒文本内每个词中的字母,同时保持该词在文本中的顺序不变。
小组 |
高级 |
最终期限 |
2008 年 3 月 3 日,星期一(太平洋标准时间上午 8:00) |
奖励点数 |
5 |
活动 9 可能是高级小组中最简单的活动。然而,它还是有一点棘手,因此请务必仔细阅读说明。
您认为这么说有点儿多余,对吧?毕竟,所有人都会仔细阅读说明,是吧?
要成功完成此活动,您的脚本必须首先读取文本文件 Alice.txt(可在。 读取文件后,您的脚本必须颠倒文件中每个词中的字母,同时保持这些词(以及所有标点符号)的顺序。然后,脚本应将该修改后的字符串返回到屏幕。
“颠倒文件中每个词中的字母,同时保持这些词的顺序”是什么意思?让我们假定 Alice.txt 包含以下文本:
This is my sentence.
您的脚本应读取文件,颠倒每个词中的字母,然后返回以下内容:
sihT si ym .ecnetnes
明白其工作原理了吗?我们颠倒了词 This 中的所有字母;但是,词 This(或颠倒后的词)仍是句子中的第一个词。然后对词 is、my 和 sentence 执行相同操作。对了,您有没有注意到字符串结尾处是什么?没错:标点符号(如句号)需保留。
如果尚未完全确定,可通过使 Alice.txt 的内容等于以下所示来进行练习:
This is my sentence.
一旦您的脚本可将它转换成以下字符串,您就已经掌握要领了:
sihT si ym .ecnetnes
不必担心字母大小写;即不必更改字母大小写以使每个句子以大写字母开头:
Siht si ym ecnetnes.
只需颠倒每个词中的字母,让字母大小写保持原样。这样就足以达到本活动的要求了。
重要事项。确保脚本会将修改后的字符串返回屏幕。切勿覆盖文件 Alice.txt 的内容。如果覆盖此文件,就算您违反了此活动的规则。脚本还应使用此文本文件的路径 C:\Scripts\Alice.txt。如果不使用该路径,您的脚本可能会失败。 |
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 9、Advanced Windows PowerShell: Event 9 或 Advanced Perl: Event 9。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“二十一点!”中,参赛人员必须编写一个脚本来坐庄并玩单局二十一点(二十一点纸牌游戏)。
小组 |
高级 |
最终期限 |
2008 年 3 月 3 日,星期一(太平洋标准时间上午 8:00) |
奖励点数 |
10 |
在高级小组中的最后一个活动中,您必须编写一个脚本来坐庄并玩单局二十一点(也称为二十一点纸牌游戏)。为此,我们将玩一个简化版的二十一点,它包含以下规则:
• |
不包含打赌功能。(对不起,也许明年可以。) |
• |
所有幺点均值 11 点。我们知道:在标准二十一点中,幺点可值 1 点或 11 点。但在活动 10 中,幺点将仅值 11 点。(我们不希望此活动过于复杂。) |
• |
所有人头牌(K、Q、J)均值 10 点。 |
• |
所有其他牌则等于其面值:黑桃 3 值 3 点,方块 7 值 7 点,等等。 |
• |
平局(平)算庄家胜。假定,在本局结束时,玩家 18 点且庄家也 18 点。此时,庄家为赢家。 |
您的脚本应首先“洗”牌,然后发两张给玩家,两张给庄家。在常规二十一点中,发给玩家的两张牌应“面朝上”;即两张牌应亮出来。
Your cards: Seven of Spades Eight of Spades
与之相对,庄家仅应亮一张牌:
Dealer's cards: Ace of Hearts
注意。请注意,我们按名称指定牌。切勿仅列出牌值,如: 7 8 它会导致您的脚本失败。列出牌时要具体。 |
然后,根据标准的二十一点规则,玩家应有权选择停牌(亮出所发的两张牌)或拿牌(发另一张牌)。即:
Stay (s) or hit (h) ?
如果玩家选择“拿牌”,则应向他或她发另一张牌。如果三张牌的总数超过 21,则玩家自动算输:
Stay (s) or hit (h) ?h Seven of Spades Eight of Spades Seven of Diamonds Over 21. Sorry, you lose.
如果总数为 21 或更少,则玩家还有机会拿牌或停牌。只要玩家选择停牌,庄家(计算机)就会检查自己的总点数是否超过了玩家。例如,假定玩家有黑桃 7 和黑桃 8;即表示玩家有 15 点。现在假定庄家有红心幺点和方块 6。即意味着庄家有 17 点 (11 + 6),同时代表庄家自动获胜。
现在,假定玩家有 16 点而庄家有 13 点。此时,必须向庄家发另一张牌。我们来看看下一张牌的一些可能性:
• |
庄家分到 2,即庄家为 15 点。它低于玩家的 16,因此庄家输。 |
• |
庄家分到 9,即它为 22 点。22 大于 21,因此庄家输。 |
• |
庄家分到 3,则庄家和玩家均为 16。由于平局算庄家赢,因此庄家自动获胜。 |
完整的一局结束时应如下所示:
Your cards: King of Hearts Seven of Hearts Dealer's cards: Nine of Hearts Stay (s) or hit (h)?s You have 17. Nine of Hearts Seven of Diamonds Dealers' cards: Nine of Hearts Seven of Diamonds Five of Diamonds The dealer has 21. Sorry, you lose.
明白了吗?它应该不算太难,尤其对于那些完成了前面九个活动的人来说。
请注意,完全接受在命令窗口中完成此局二十一点(实际上,更偏向于用命令窗口)。我们还将接受图形版本(如 HTA)。但请注意,任何图形版本均仅限于三种脚本编写比赛语言:VBScript、Windows PowerShell 和 Perl。
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 10、Advanced Windows PowerShell: Event 10 或 Advanced Perl: Event 10。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“二十一点!”中,参赛人员必须编写一个脚本来坐庄并玩单局二十一点(二十一点纸牌游戏)。
小组 |
高级 |
最终期限 |
2008 年 3 月 3 日,星期一(太平洋标准时间上午 8:00) |
奖励点数 |
10 |
在高级小组中的最后一个活动中,您必须编写一个脚本来坐庄并玩单局二十一点(也称为二十一点纸牌游戏)。为此,我们将玩一个简化版的二十一点,它包含以下规则:
• |
不包含打赌功能。(对不起,也许明年可以。) |
• |
所有幺点均值 11 点。我们知道:在标准二十一点中,幺点可值 1 点或 11 点。但在活动 10 中,幺点将仅值 11 点。(我们不希望此活动过于复杂。) |
• |
所有人头牌(K、Q、J)均值 10 点。 |
• |
所有其他牌则等于其面值:黑桃 3 值 3 点,方块 7 值 7 点,等等。 |
• |
平局(平)算庄家胜。假定,在本局结束时,玩家 18 点且庄家也 18 点。此时,庄家为赢家。 |
您的脚本应首先“洗”牌,然后发两张给玩家,两张给庄家。在常规二十一点中,发给玩家的两张牌应“面朝上”;即两张牌应亮出来。
Your cards: Seven of Spades Eight of Spades
与之相对,庄家仅应亮一张牌:
Dealer's cards: Ace of Hearts
注意。请注意,我们按名称指定牌。切勿仅列出牌值,如: 7 8 它会导致您的脚本失败。列出牌时要具体。 |
然后,根据标准的二十一点规则,玩家应有权选择停牌(亮出所发的两张牌)或拿牌(发另一张牌)。即:
Stay (s) or hit (h) ?
如果玩家选择“拿牌”,则应向他或她发另一张牌。如果三张牌的总数超过 21,则玩家自动算输:
Stay (s) or hit (h) ?h Seven of Spades Eight of Spades Seven of Diamonds Over 21. Sorry, you lose.
如果总数为 21 或更少,则玩家还有机会拿牌或停牌。只要玩家选择停牌,庄家(计算机)就会检查自己的总点数是否超过了玩家。例如,假定玩家有黑桃 7 和黑桃 8;即表示玩家有 15 点。现在假定庄家有红心幺点和方块 6。即意味着庄家有 17 点 (11 + 6),同时代表庄家自动获胜。
现在,假定玩家有 16 点而庄家有 13 点。此时,必须向庄家发另一张牌。我们来看看下一张牌的一些可能性:
• |
庄家分到 2,即庄家为 15 点。它低于玩家的 16,因此庄家输。 |
• |
庄家分到 9,即它为 22 点。22 大于 21,因此庄家输。 |
• |
庄家分到 3,则庄家和玩家均为 16。由于平局算庄家赢,因此庄家自动获胜。 |
完整的一局结束时应如下所示:
Your cards: King of Hearts Seven of Hearts Dealer's cards: Nine of Hearts Stay (s) or hit (h)?s You have 17. Nine of Hearts Seven of Diamonds Dealers' cards: Nine of Hearts Seven of Diamonds Five of Diamonds The dealer has 21. Sorry, you lose.
明白了吗?它应该不算太难,尤其对于那些完成了前面九个活动的人来说。
请注意,完全接受在命令窗口中完成此局二十一点(实际上,更偏向于用命令窗口)。我们还将接受图形版本(如 HTA)。但请注意,任何图形版本均仅限于三种脚本编写比赛语言:VBScript、Windows PowerShell 和 Perl。
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 10、Advanced Windows PowerShell: Event 10 或 Advanced Perl: Event 10。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next
重要事项:在本项活动的最终期限后,可在脚本中心上找到 VBScript、Windows PowerShell 和 Perl。 |
在“二十一点!”中,参赛人员必须编写一个脚本来坐庄并玩单局二十一点(二十一点纸牌游戏)。
小组 |
高级 |
最终期限 |
2008 年 3 月 3 日,星期一(太平洋标准时间上午 8:00) |
奖励点数 |
10 |
在高级小组中的最后一个活动中,您必须编写一个脚本来坐庄并玩单局二十一点(也称为二十一点纸牌游戏)。为此,我们将玩一个简化版的二十一点,它包含以下规则:
• |
不包含打赌功能。(对不起,也许明年可以。) |
• |
所有幺点均值 11 点。我们知道:在标准二十一点中,幺点可值 1 点或 11 点。但在活动 10 中,幺点将仅值 11 点。(我们不希望此活动过于复杂。) |
• |
所有人头牌(K、Q、J)均值 10 点。 |
• |
所有其他牌则等于其面值:黑桃 3 值 3 点,方块 7 值 7 点,等等。 |
• |
平局(平)算庄家胜。假定,在本局结束时,玩家 18 点且庄家也 18 点。此时,庄家为赢家。 |
您的脚本应首先“洗”牌,然后发两张给玩家,两张给庄家。在常规二十一点中,发给玩家的两张牌应“面朝上”;即两张牌应亮出来。
Your cards: Seven of Spades Eight of Spades
与之相对,庄家仅应亮一张牌:
Dealer's cards: Ace of Hearts
注意。请注意,我们按名称指定牌。切勿仅列出牌值,如: 7 8 它会导致您的脚本失败。列出牌时要具体。 |
然后,根据标准的二十一点规则,玩家应有权选择停牌(亮出所发的两张牌)或拿牌(发另一张牌)。即:
Stay (s) or hit (h) ?
如果玩家选择“拿牌”,则应向他或她发另一张牌。如果三张牌的总数超过 21,则玩家自动算输:
Stay (s) or hit (h) ?h Seven of Spades Eight of Spades Seven of Diamonds Over 21. Sorry, you lose.
如果总数为 21 或更少,则玩家还有机会拿牌或停牌。只要玩家选择停牌,庄家(计算机)就会检查自己的总点数是否超过了玩家。例如,假定玩家有黑桃 7 和黑桃 8;即表示玩家有 15 点。现在假定庄家有红心幺点和方块 6。即意味着庄家有 17 点 (11 + 6),同时代表庄家自动获胜。
现在,假定玩家有 16 点而庄家有 13 点。此时,必须向庄家发另一张牌。我们来看看下一张牌的一些可能性:
• |
庄家分到 2,即庄家为 15 点。它低于玩家的 16,因此庄家输。 |
• |
庄家分到 9,即它为 22 点。22 大于 21,因此庄家输。 |
• |
庄家分到 3,则庄家和玩家均为 16。由于平局算庄家赢,因此庄家自动获胜。 |
完整的一局结束时应如下所示:
Your cards: King of Hearts Seven of Hearts Dealer's cards: Nine of Hearts Stay (s) or hit (h)?s You have 17. Nine of Hearts Seven of Diamonds Dealers' cards: Nine of Hearts Seven of Diamonds Five of Diamonds The dealer has 21. Sorry, you lose.
明白了吗?它应该不算太难,尤其对于那些完成了前面九个活动的人来说。
请注意,完全接受在命令窗口中完成此局二十一点(实际上,更偏向于用命令窗口)。我们还将接受图形版本(如 HTA)。但请注意,任何图形版本均仅限于三种脚本编写比赛语言:VBScript、Windows PowerShell 和 Perl。
编写完脚本后,单击适当链接提交答案:
• | |
• | |
• |
如果链接并未自动打开预先填好地址的邮件,请将电子邮件发送到 scripter@microsoft.com,主题行为 Advanced VBScript: Event 10、Advanced Windows PowerShell: Event 10 或 Advanced Perl: Event 10。
您所需做的是将代码粘贴到邮件正文中,然后发送电子邮件。您还可包括以下内容:
• |
在公布脚本编写比赛点数领先者名单时可以使用的您的名字或昵称。 |
• |
您希望代表的国家的名称。它可以是您的出生国或当前所居住的国家,但也可以是其他国家;您可以代表所希望的任意国家。 |
• |
您所属的任意用户组的名称。如果您的用户组正在参加“用户组挑战”,应包括此信息。 |
只需在电子邮件上方键入这些项目即可。此时,您的电子邮件(假定您将提交针对 VBScript 小组的答案)可能看起来像:
Ken Myer USA Northern Iowa User Group For i = 1 to 100 Wscript.Echo i Next