2008脚本大赛PowerShell高级组Event 4解题及分析
2008-03-01 17:24
525 查看
中文题目位置: http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/chs/aevent4.mspx
英文解题位置: http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol04.mspx
这道题, 比较考验大家对格式处理的能力. 通过分析, 我们可以知道2008. 3月需要6行才能完整显示结果. 而 2009年2月, 只需要4行就能显示完整结果. 因此, 我使用42个元素字符串数组, 也就是7 * 6行. 7代表一周7天, 最多需要6行. 将这些数组元素初始化为3个空格. 这样就可以满足Sun等星期的对齐要求. 计算出需要显示月份的起点, 在数组中的偏移就是星期对应的int值. 数值也要按照3个字符的宽度进行打印. 最后把6行结果全部输出就好了, 利用双引号连接数组, 我使用五个空格作为分隔符. 显示的结果可以说和官方的要求很像了. 看起来也还算舒服. 代码如下
$inMonth = Read-Host "Please enter a month"
[void] ($inMonth -match "^(?<m>/d+)/(?<y>/d+)$")
$titles = "Sun","Mon","Tue","Wed","Thu","Fri","Sat"
$m = $matches.m
$y = $matches.y
$d = 1
$width = 3
$ofs = ' ' * 5
$targetMonth = Get-Date -Year $y -Month $m -Day $d
$a = New-Object -TypeName 'String[]' -ArgumentList 42
for($i = 0; $i -lt $a.Length; $i++) { $a[$i] = " " * $width }
$daysInMonth = [datetime]::DaysInMonth($y, $m)
$startDay = [int]($targetMonth.DayOfWeek)
while ($daysInMonth--) {$a[$startDay++] = "{0,${width}:D}" -f $d++ }
"{0:Y}" -f $targetMonth;
""
"$titles"
"$($a[0..6])"
"$($a[7..13])"
"$($a[14..20])"
"$($a[21..27])"
"$($a[28..34])"
"$($a[35..41])"
英文解题位置: http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol04.mspx
这道题, 比较考验大家对格式处理的能力. 通过分析, 我们可以知道2008. 3月需要6行才能完整显示结果. 而 2009年2月, 只需要4行就能显示完整结果. 因此, 我使用42个元素字符串数组, 也就是7 * 6行. 7代表一周7天, 最多需要6行. 将这些数组元素初始化为3个空格. 这样就可以满足Sun等星期的对齐要求. 计算出需要显示月份的起点, 在数组中的偏移就是星期对应的int值. 数值也要按照3个字符的宽度进行打印. 最后把6行结果全部输出就好了, 利用双引号连接数组, 我使用五个空格作为分隔符. 显示的结果可以说和官方的要求很像了. 看起来也还算舒服. 代码如下
$inMonth = Read-Host "Please enter a month"
[void] ($inMonth -match "^(?<m>/d+)/(?<y>/d+)$")
$titles = "Sun","Mon","Tue","Wed","Thu","Fri","Sat"
$m = $matches.m
$y = $matches.y
$d = 1
$width = 3
$ofs = ' ' * 5
$targetMonth = Get-Date -Year $y -Month $m -Day $d
$a = New-Object -TypeName 'String[]' -ArgumentList 42
for($i = 0; $i -lt $a.Length; $i++) { $a[$i] = " " * $width }
$daysInMonth = [datetime]::DaysInMonth($y, $m)
$startDay = [int]($targetMonth.DayOfWeek)
while ($daysInMonth--) {$a[$startDay++] = "{0,${width}:D}" -f $d++ }
"{0:Y}" -f $targetMonth;
""
"$titles"
"$($a[0..6])"
"$($a[7..13])"
"$($a[14..20])"
"$($a[21..27])"
"$($a[28..34])"
"$($a[35..41])"
相关文章推荐
- 2008脚本大赛PowerShell高级组Event 8解题及分析
- 2008脚本大赛PowerShell高级组Event 5解题及分析
- 2008脚本大赛PowerShell高级组Event 7解题及分析
- 2008脚本大赛PowerShell高级组Event 6解题及分析
- 2008脚本大赛PowerShell高级组Event 2解题及分析
- 2008脚本大赛PowerShell高级组Event 1解题及分析
- 2008脚本大赛PowerShell高级组Event 9解题及分析
- 2008脚本大赛PowerShell Sudden Death Event 4解题及分析
- 2008脚本大赛PowerShell初级组Event 9解题及分析
- 2008脚本大赛PowerShell Sudden Death Event 9解题及分析
- 2008脚本大赛PowerShell初级组Event 10解题及分析
- 2008脚本大赛PowerShell Sudden Death Event 6解题及分析
- 2008脚本大赛PowerShell高级组Event 3解题及分析
- 2008脚本大赛PowerShell Sudden Death Event 5解题及分析
- 2008脚本大赛PowerShell Sudden Death Event 7解题及分析
- [3月28日的脚本] 修复Event ID 4107 and Event ID 11 问题 (PowerShell)
- APL杂谈--高级语言之罗嗦 与 apl脚本语言之简约 对比分析
- SQL Server 2008的常用高级脚本
- PowerShell脚本中查看网卡的高级属性