题目位置: http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdevent10.mspx
官方题解: http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/sdsol10.mspx
这个题目应该是比较有意思的, 因为你可以不写任何脚本就能做出此题. 由于我不会VBScript, 也不是很熟悉Perl, 所以这题让我觉得很有难度. 我们需要从 .CSRIIEHRRTOENSWWPOCTIHPT-T 中找出3个命令, 它们要完成同样的功能. 三个命令分别来自三种语言. 一上来我完全没有头绪, 于是我想先看看究竟都有哪些字符:
Name Value
---- -----
N 1
W 2
P 2
I 3
R 3
. 1
- 1
T 4
O 2
H 2
C 2
S 2
E 2
利用哈希表, 我发现, 出现的字符个数不是很多, 但是由于对VBscript和Perl不熟悉, 我还是没有任何思路. 既然字符种类很少, 那么PowerShell中cmdlet能匹配的数量应该不会很多, 1.0中有129个命令, 我可以试试...根据这个思路, 我执行了下面的命令:
Name : Set - Content
Name : Stop - Process
Name : Write - Error
Name : Write - Host
对于哈希表中Keys进行排序, 然后放在正则表达式中, 只选取那些使用Keys的命令. 现在只有4条命令入围...看起来问题很简单了, 我的第一反应就是Write-Host, 因为看起来它是最普通的cmdlet. 现在我需要从$hash表中删除这些用过的字符:
PS C : Users Eden > $h . GetEnumerator() | ? { $_ . Value - gt 0 }
Name Value
---- -----
N 1
W 1
P 2
I 2
R 2
. 1
T 2
O 1
H 1
C 2
S 1
E 1
锁定Write-Host之后, 我想到Perl中最普通的输出就是print命令, 再继续试试:
PS C:/Users/Eden > $h.GetEnumerator() | ? ... { $_.Value -gt 0 }
Name Value
---- -----
W 1
P 1
I 1
R 1
. 1
T 1
O 1
H 1
C 2
S 1
E 1
ok, 现在看起来快到最后了, 可是我完全不会VBscript, 这些东西我还是不知道是什么. 我回忆起有个WScript的东西, 再一次排除后, 我发现原来是单词Echo. 已经解完了, 当我准备发送E-Mail的时候, 发现E-mail示例正是使用Wscript.Echo的例子...我觉得自己好笨...呵呵