<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>scripting-games &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/scripting-games/</link>
	<description>Feed of posts on WordPress.com tagged "scripting-games"</description>
	<pubDate>Sun, 29 Nov 2009 22:24:29 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Scripting Games 2009 &ndash; Готовьтесь! ;)]]></title>
<link>http://xaegr.wordpress.com/2009/05/18/scripting-games-2009/</link>
<pubDate>Mon, 18 May 2009 08:47:03 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2009/05/18/scripting-games-2009/</guid>
<description><![CDATA[В этом году Scripting Games пройдут немного позже обычного: 15-26 июня. Кроме того они будут организ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img title="events" border="0" alt="events" align="left" src="http://img.microsoft.com/library/media/1033/technet/images/scriptcenter/games/scripto_torchrunner.gif" width="150" height="167" />В этом году <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games09/announcement.mspx">Scripting Games</a> пройдут немного позже обычного: 15-26 июня. Кроме того они будут организованы совместно с <a href="http://powershellcommunity.org/">PowerShellCommunity.org</a> и <a href="http://poshcode.org/">PoshCode.org</a>, с использованием их технологий для размещения сценариев.</p>
<p>Если вы думаете что это мероприятие только для каких нибудь “зубров PowerShell’а”, то вы сильно заблуждаетесь <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Во-первых существует два уровня сложности – Beginner Division и Advanced Division. Во-вторых, участие можно принимать не только на PowerShell, но и на VB Script! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Так что добро пожаловать &#8211; попытка не пытка, и стартовых взносов за участие нет <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ах да, там еще будут всякие призы, но не это главное <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Главное это то чему мы сможем научиться в процессе <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Чтобы поучаствовать, заходите <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/default.mspx">сюда</a>, 15го июня. А сейчас по этой ссылке можно посмотреть задания (и варианты решений) предыдущих игр.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Sudden Death Challenge - Events 8 &amp; 9]]></title>
<link>http://xaegr.wordpress.com/2008/04/08/scripting-games-sudden-death-challenge-events-8-9/</link>
<pubDate>Tue, 08 Apr 2008 09:39:24 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/04/08/scripting-games-sudden-death-challenge-events-8-9/</guid>
<description><![CDATA[Эти два задания явно слишком просты для отдельных постов, поэтому я опишу их в одном В Event 8 требо]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Эти два задания явно слишком просты для отдельных постов, поэтому я опишу их в одном <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>В <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdevent8.mspx">Event 8</a> требовалось найти соответствия имен параметров в LDAP, таковым в консоли Active Directory Users and Computers. Задачка не сложная, и решить её можно просто задав параметры пользователю, и посмотрев на него в консоли adsiedit.msc. Но можно еще проще:</p>
<pre>[PS &#60;72&#62; C:\Root] Get-QADUser gusev &#124; Format-List *

objectClass                     : {top, person, organizationalPerson, user}
sn                              : Гусев
telephoneNumber                 : 120
givenName                       : Василий
... неинтересные параметры поскипаны ...
</pre>
<p>Единственная проблема была со страной, так как она задается в 2х параметрах: c и cn. Но указание в ответе обоих &#8211; <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/sdsol08.mspx">прокатило</a> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Подробнее у <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/28/scripting-games-2008-sudden-death-challenge-event-8.aspx">MoW</a> (он кстати использовал родной функционал PowerShell, полезно посмотреть).</p>
<p>Ну и в Event 9 было вообще смешное задание: убрать из строки все &#8220;мусорные&#8221; символы, оставив одну фразу:</p>
<pre>T#$h!e ()200$~``8 W,\i&#124;n&#60;:;&#62;t.?e&#38;^%-r S#=_cri??{}p()-t@@@i&#124;[[ng G!@!am=_+e^%s/.,
</pre>
<p>Применяем оператор <a href="http://xaegr.wordpress.com/2008/04/02/replace/">-replace</a> с простеньким регулярным выражением (все символы кроме букв a-z, пробелов и цифр):</p>
<pre>(gc "C:\scripts\symbols.txt") -replace "[^a-z \d]"
</pre>
<p> И получаем &#8220;The 2008 Winter Scripting Games&#8221;. Всё <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Sudden Death Challenge - Event 7]]></title>
<link>http://xaegr.wordpress.com/2008/04/01/scripting-games-sudden-death-challenge-event-7/</link>
<pubDate>Tue, 01 Apr 2008 04:48:40 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/04/01/scripting-games-sudden-death-challenge-event-7/</guid>
<description><![CDATA[Sudden Death 7. Тут я понаписал много лишнего кода #Считаем и выводим результат на консоль. $result ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img style="border-width:0;" height="254" alt="sd7" src="http://xaegr.files.wordpress.com/2008/04/sd7.png?w=253&#038;h=254" width="253" border="0"> </p>
<p><a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdevent7.mspx">Sudden Death 7</a>. Тут я понаписал много лишнего кода <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;">Считаем и выводим результат на консоль.</span><span style="color:#008000;">
</span><span style="color:#800080;">$result</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">{0:n2}</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#008080;">-f</span><span style="color:#000000;"> ([math]</span><span style="color:#000000;">::</span><span style="color:#000000;">Sqrt([math]</span><span style="color:#000000;">::</span><span style="color:#000000;">Pow([math]</span><span style="color:#000000;">::</span><span style="color:#000000;">Floor(</span><span style="color:#000000;">100</span><span style="color:#000000;">*</span><span style="color:#000000;">2</span><span style="color:#000000;">/</span><span style="color:#000000;">30</span><span style="color:#000000;">),</span><span style="color:#000000;">5</span><span style="color:#000000;">)</span><span style="color:#000000;">*</span><span style="color:#000000;">4</span><span style="color:#000000;">)</span><span style="color:#000000;">/</span><span style="color:#000000;">45</span><span style="color:#000000;">)
Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800080;">$result</span><span style="color:#000000;">

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем объект Speech Agent'а</span><span style="color:#008000;">
</span><span style="color:#800080;">$agent</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> New</span><span style="color:#000000;">-</span><span style="color:#000000;">Object </span><span style="color:#000000;">-</span><span style="color:#000000;">com Agent.Control.</span><span style="color:#000000;">2</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Не знаю зачем, тупо содрал откуда то <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Может и не нужно вообще <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span><span style="color:#008000;">
</span><span style="color:#800080;">$agent</span><span style="color:#000000;">.Connected </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Подгружаем персонажа.</span><span style="color:#008000;">
</span><span style="color:#800080;">$agent</span><span style="color:#000000;">.Characters.Load(</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Merlin</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">) </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Out</span><span style="color:#000000;">-</span><span style="color:#000000;">Null
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Помещаем его в переменную.</span><span style="color:#008000;">
</span><span style="color:#800080;">$merlin</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$agent</span><span style="color:#000000;">.Characters.Character(</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Merlin</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Показываем на экране.</span><span style="color:#008000;">
</span><span style="color:#800080;">$merlin</span><span style="color:#000000;">.Show() </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Out</span><span style="color:#000000;">-</span><span style="color:#000000;">Null
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Говорим <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span><span style="color:#008000;">
</span><span style="color:#800080;">$merlin</span><span style="color:#000000;">.Speak(</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Result of equation is $result.</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">) </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Out</span><span style="color:#000000;">-</span><span style="color:#000000;">Null
</span></div>
</pre>
</div>
<p>Для сравнения стоит посмотреть как решил <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/28/scripting-games-2008-sudden-death-challenge-event-7.aspx">MoW</a>. Ну и конечно <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/sdsol07.mspx">официальное решение</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Sudden Death Challenge - Event 6]]></title>
<link>http://xaegr.wordpress.com/2008/03/24/scripting-games-sudden-death-challenge-event-6/</link>
<pubDate>Mon, 24 Mar 2008 12:47:00 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/24/scripting-games-sudden-death-challenge-event-6/</guid>
<description><![CDATA[Тоже достаточно простая задачка&#8230; SD6.ps1 # Преобразуем содержимое файла в массив символов, и п]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Тоже достаточно простая <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdevent6.mspx">задачка</a>&#8230;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SD6.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Преобразуем содержимое файла в массив символов, и потом снова в строки, </span><span style="color:#008000;">
#</span><span style="color:#008000;"> разрубив таким образом на строки по одному символу. Можно было сделать -split &#34;&#34; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span><span style="color:#008000;">
#</span><span style="color:#008000;"> Ну и эта последовательность строчек идет в switch с аргументами проверки по </span><span style="color:#008000;">
#</span><span style="color:#008000;"> регулярным выражениям, и чувствительности к регистру символов.</span><span style="color:#008000;">
</span><span style="color:#000000;">$</span><span style="color:#000000;">(</span><span style="color:#0000FF;">switch</span><span style="color:#000000;"> </span><span style="color:#008080;">-regex</span><span style="color:#000000;"> </span><span style="color:#008080;">-casesensitive</span><span style="color:#000000;"> ([string[]][char[]](gc </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">c:\scripts\lettercase.txt</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">))
{
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если строчная буква, то переводим в верхний регистр...</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">^[a-z]$</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.toUpper()}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> ... и наоборот.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">^[A-Z]$</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.toLower()}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если цифра, то преобразовываем в число ([int]) и прибавляем единицу.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">^\d$</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {[int]</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Иначе - передаем без изменений.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">default</span><span style="color:#000000;"> {</span><span style="color:#800080;">$_</span><span style="color:#000000;">}
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Объединяем в строку.</span><span style="color:#008000;">
</span><span style="color:#000000;">}) </span><span style="color:#000000;">-</span><span style="color:#000000;">join </span><span style="color:#800000;">&#34;&#34;</span></div>
</pre>
</div>
<p>Ну и смотрим вариант <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/28/scripting-games-2008-sudden-death-challenge-event-6.aspx">MoW</a> (почти 1 в 1 с моим <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ) и <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/sdsol06.mspx">официальный</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[2008 Scripting Games Statistics]]></title>
<link>http://poshoholic.com/2008/03/23/2008-scripting-games-statistics/</link>
<pubDate>Mon, 24 Mar 2008 03:46:19 +0000</pubDate>
<dc:creator>Kirk Munro</dc:creator>
<guid>http://poshoholic.com/2008/03/23/2008-scripting-games-statistics/</guid>
<description><![CDATA[Now that the 2008 Scripting Games are over, I was wondering how the various scripting languages brok]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Now that the <a target="_blank" href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08.mspx">2008 Scripting Games</a> are over, I was wondering how the various scripting languages broke down in terms of individual participation.  I contacted fellow MVP <a target="_blank" href="http://marcoshaw.blogspot.com/">Marco Shaw</a> about this a few weeks ago because last year he wrote a <a target="_blank" href="http://marcoshaw.blogspot.com/2007/03/another-powergadgets-example.html">script</a> that would generate a nice chart using <a target="_blank" href="http://www.powergadgets.com">PowerGadgets</a> showing the breakdown of the 2007 Scripting Games participation by division for each country.  He had been working on running his old script against this year&#8217;s results, and was kind enough to let me have his work in progress to experiment with myself (thanks Marco!).</p>
<p>After tweaking the script off and on (more off than on) over the past few weeks I&#8217;ve managed to get the results I was looking for.  The following screenshot shows two charts from the results of each of the last two years of the Scripting Games, all generated using <a target="_blank" href="http://www.powergadgets.com">PowerGadgets</a>.  The charts on the left show the breakdown of individual participation by country for the top 10 countries (where the top 10 countries are defined by those with the most unique participants across all divisions), sorted alphabetically.  The charts on the right show the number of unique participants in each division.  The 2007 results are on the top, and the 2008 results are on the bottom.</p>
<p><a target="_blank" href="http://kirkmunro.files.wordpress.com/2008/03/scriptinggamesstatisticsdashboard.png"><img border="0" width="408" src="http://kirkmunro.files.wordpress.com/2008/03/scriptinggamesstatisticsdashboard-thumb.png?w=408&#038;h=250" alt="ScriptingGamesStatisticsDashboard" height="250" style="border-width:0;" /></a></p>
<p>The results are pretty interesting.  Not surprisingly, the charts show that PowerShell is growing in popularity.  Last year there were 1/3 as many participants in the PowerShell categories as in the VBScript categories.  This year that gap has narrowed, with PowerShell participation climbing to just under ½ of the VBScript participation.  The charts also show that there were only two changes in the top 10 participating countries since last year, and that VBScript wasn&#8217;t the scripting language of choice in all top 10 countries in either year.</p>
<p>In addition to the charts that are output, my updated version of Marco&#8217;s script also outputs some general statistical information for the years that it is being run against.  From this I can see that the number of individual participants has increased from 510 in 2007 to 709 in 2008, with the number of active participants (where an active participant is defined as one that participated in 5 or more events) increasing from 378 in 2007 to 563 in 2008.</p>
<p>The script used to generate these results can be found <a target="_blank" href="http://cid-8d190219876b1dda.skydrive.live.com/self.aspx/PowerShell/Get-ScriptingGamesStatistics.ps1" title="Get-ScriptingGamesStatistics.ps1">here</a>.</p>
<p>All in all, the Scripting Games seem to be increasing in popularity year over year which is likely a trend that will continue as PowerShell and other scripting languages continue to gain traction.  It will be interesting to see how things pan out next year!</p>
<p>Kirk out.</p>
<div style="display:inline;margin:0;padding:0;" class="wlWriterSmartContent">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/PowerShell">PowerShell</a>,<a rel="tag" href="http://technorati.com/tags/PoSh">PoSh</a>,<a rel="tag" href="http://technorati.com/tags/Poshoholic">Poshoholic</a>,<a rel="tag" href="http://technorati.com/tags/PowerGadgets">PowerGadgets</a>,<a rel="tag" href="http://technorati.com/tags/Scripting%20Games">Scripting Games</a></div>
<p><span class="sbmLink"><span class="sbmLink"></span></span><span class="sbmLink"><span class="sbmLink"></span></span><span class="sbmLink"><span class="sbmLink"></p>
<table cellPadding="0" cellSpacing="1">
<tr>
<td class="sbmText">Share it:</td>
<td class="sbmDim"><a target="_blank" href="http://www.blinkbits.com/bookmarklets/save.php?v=1&#38;source_url=http://poshoholic.com/2008/03/23/2008-scripting-games-statistics&#38;title=2008 Scripting Games Statistics" title="Post it to blinkbits!" class="sbmDim"><img border="0" src="http://blogs.msdn.com/blogfiles/rahulso/WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites_B387/blinkbit4.png" /></a></td>
<td class="sbmDim"><a target="_blank" href="http://del.icio.us/post?url=http://poshoholic.com/2008/03/23/2008-scripting-games-statistics&#38;;title=2008 Scripting Games Statistics" title="Post it to del.icio.us" class="sbmDim"><img border="0" src="http://blogs.msdn.com/blogfiles/rahulso/WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites_B387/deliciou4.png" /></a></td>
<td class="sbmDim"><a target="_blank" href="http://de.lirio.us/bookmarks/sbmtool?action=add&#38;address=http://poshoholic.com/2008/03/23/2008-scripting-games-statistics&#38;title=2008 Scripting Games Statistics" title="Post it to del.iri.ous!" class="sbmDim"><img border="0" src="http://blogs.msdn.com/blogfiles/rahulso/WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites_B387/deliriou4.png" /></a></td>
<td class="sbmDim"><a target="_blank" href="http://digg.com/submit?phase=2&#38;url=http://poshoholic.com/2008/03/23/2008-scripting-games-statistics&#38;title=2008 Scripting Games Statistics" title="Post it to digg" class="sbmDim"><img border="0" src="http://blogs.msdn.com/blogfiles/rahulso/WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites_B387/digg14.png" /></a></td>
<td class="sbmDim"><a target="_blank" href="http://www.furl.net/store?s=f&#38;to=0&#38;u=http://poshoholic.com/2008/03/23/2008-scripting-games-statistics&#38;ti=2008 Scripting Games Statistics" title="Post it to furl" class="sbmDim"><img border="0" src="http://blogs.msdn.com/blogfiles/rahulso/WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites_B387/furl4.png" /></a></td>
<td class="sbmDim"><a target="_blank" href="http://reddit.com/submit?url=http://poshoholic.com/2008/03/23/2008-scripting-games-statistics&#38;title=2008 Scripting Games Statistics" title="Post it to reddit!" class="sbmDim"><img border="0" src="http://blogs.msdn.com/blogfiles/rahulso/WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites_B387/reddit4.png" /></a></td>
<td class="sbmDim"><a target="_blank" href="http://www.spurl.net/spurl.php?v=3&#38;url=http://poshoholic.com/2008/03/23/2008-scripting-games-statistics&#38;title=2008 Scripting Games Statistics" title="Post it to spurl" class="sbmDim"><img border="0" src="http://blogs.msdn.com/blogfiles/rahulso/WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites_B387/spurl8.png" /></a></td>
<td class="sbmDim"><a target="_blank" href="http://technorati.com/faves/?add=http://poshoholic.com/2008/03/23/2008-scripting-games-statistics&#38;title=2008 Scripting Games Statistics" title="Post it to technorati!" class="sbmDim"><img border="0" src="http://blogs.msdn.com/blogfiles/rahulso/WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites_B387/technora4.png" /></a></td>
<td class="sbmDim"><a target="_blank" href="http://myweb.yahoo.com/myresults/bookmarklet?u=http://poshoholic.com/2008/03/23/2008-scripting-games-statistics&#38;t=2008 Scripting Games Statistics" title="Post it to yahoo!" class="sbmDim"><img border="0" src="http://blogs.msdn.com/blogfiles/rahulso/WindowsLiveWriter/IconsfordifferentSocialBookmarkingSites_B387/yahoo9.png" /></a></td>
</tr>
</table>
<p><span class="sbmLink"><span class="sbmLink"></span>P.S. One of the many things I was involved in while I wasn&#8217;t blogging during the month of February was the 2008 Scripting Games.  A while back Scripting Guy Greg Stemp invited me to be a guest commentator for this years games (thanks Greg!) and I was assigned Advanced Windows PowerShell Event #5.  While I unfortunately didn&#8217;t have time to participate in the other events this year, I did find some spare time during a train trip to Toronto so I wrote my solution for the event on the train.  The games are all done for this year, but if you&#8217;re interested in my solution, it can be found <a target="_blank" href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/expssol05.mspx" title="2008 Winter Scripting Games - Advanced Windows PowerShell Event 5 Solution">here</a>.</span></p>
<p></span></span><span class="sbmLink"></span><span class="sbmLink">P.P.S. I&#8217;m trying out using Windows Live SkyDrive as the site from which to share ps1 files.  If you have any problem viewing the script file I&#8217;ve linked to in this article, please let me know.</span></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Sudden Death Challenge - Event 5]]></title>
<link>http://xaegr.wordpress.com/2008/03/21/scripting-games-sudden-death-challenge-event-5/</link>
<pubDate>Fri, 21 Mar 2008 06:48:48 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/21/scripting-games-sudden-death-challenge-event-5/</guid>
<description><![CDATA[Решая эту задачку я совсем забыл про [wmiclass] и использовал вместо него system.management.manageme]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://xaegr.files.wordpress.com/2008/03/sd5.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="290" alt="sd5" src="http://xaegr.files.wordpress.com/2008/03/sd5-thumb.png?w=364&#038;h=290" width="364" border="0"></a> </p>
<p>Решая эту <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdevent5.mspx">задачку</a> я совсем забыл про <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/26/scripting-games-2008-sudden-death-challenge-5.aspx">[wmiclass]</a> и использовал вместо него system.management.managementClass&#8230;</p>
<p>&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SD5.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Объявляем хэш-таблицу.</span><span style="color:#008000;">
</span><span style="color:#800080;">$h</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">@</span><span style="color:#000000;">{}
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Получаем список WMI объектов.</span><span style="color:#008000;">
</span><span style="color:#000000;">Get</span><span style="color:#000000;">-</span><span style="color:#000000;">WmiObject </span><span style="color:#000000;">-</span><span style="color:#000000;">List </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> отбираем только начинающиеся на win32_ и заодно проверяем не заполнена ли уже </span><span style="color:#008000;">
#</span><span style="color:#008000;"> хэш-таблица.</span><span style="color:#008000;">
</span><span style="color:#000000;">Where</span><span style="color:#000000;">-</span><span style="color:#000000;">Object {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.Name </span><span style="color:#008080;">-like</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">win32_*</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#008080;">-and</span><span style="color:#000000;"> </span><span style="color:#800080;">$h</span><span style="color:#000000;">.count </span><span style="color:#008080;">-ne</span><span style="color:#000000;"> </span><span style="color:#000000;">25</span><span style="color:#000000;">}</span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Для каждого отобранного объекта...</span><span style="color:#008000;">
</span><span style="color:#0000FF;">ForEach</span><span style="color:#000000;">-</span><span style="color:#000000;">Object {
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> ... помещаем имя класса в переменную $Class.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Class</span><span style="color:#000000;">=</span><span style="color:#800080;">$_</span><span style="color:#000000;">.name;
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем .net объект System.Management.ManagementClass для текущего класса...</span><span style="color:#008000;">
</span><span style="color:#000000;">    (New</span><span style="color:#000000;">-</span><span style="color:#000000;">Object system.management.managementClass(</span><span style="color:#800080;">$Class</span><span style="color:#000000;">)).psbase.properties </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> ...и отбираем из всех его свойств поле Name, которое передаем дальше по</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> конвейеру.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">ForEach</span><span style="color:#000000;">-</span><span style="color:#000000;">Object {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.Name}
}</span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Для каждого полученного по конвейеру свойства...</span><span style="color:#008000;">
</span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> {
    </span><span style="color:#008000;">#</span><span style="color:#008000;">... если оно начинается с нужных букв (^ - обозначает начало строки, а [a-y]</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> любой символ от a до y. Скобки в регулярном выражении помещают первый </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> символ слова в $Matches[1]).</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-match</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">^([a-y])</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)
    {
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если в хэш-таблице еще нет указанной буквы...</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (</span><span style="color:#000000;">!</span><span style="color:#800080;">$h</span><span style="color:#000000;">[</span><span style="color:#800080;">$matches</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">]])
        {
            </span><span style="color:#008000;">#</span><span style="color:#008000;"> Помещаем текущее свойство в переменную $Prop</span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#800080;">$prop</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$_</span><span style="color:#000000;">
            </span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем новый объект со свойствами Letter, Property и Class, </span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#008000;">#</span><span style="color:#008000;"> который помещаем в хэш-таблицу под соответствующей буквой.</span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#800080;">$h</span><span style="color:#000000;">[</span><span style="color:#800080;">$matches</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">]]</span><span style="color:#000000;">=</span><span style="color:#000000;">0</span><span style="color:#000000;">&#124;</span><span style="color:#000000;">select </span><span style="color:#000000;">@</span><span style="color:#000000;">{n</span><span style="color:#000000;">=</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Letter</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">;e</span><span style="color:#000000;">=</span><span style="color:#000000;">{</span><span style="color:#800080;">$matches</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">]}},
                                    </span><span style="color:#000000;">@</span><span style="color:#000000;">{n</span><span style="color:#000000;">=</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Property</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">;e</span><span style="color:#000000;">=</span><span style="color:#000000;">{</span><span style="color:#800080;">$prop</span><span style="color:#000000;">}},
                                    </span><span style="color:#000000;">@</span><span style="color:#000000;">{n</span><span style="color:#000000;">=</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Class</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">;e</span><span style="color:#000000;">=</span><span style="color:#000000;">{</span><span style="color:#800080;">$class</span><span style="color:#000000;">}}
        }
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Пишем в заголовке текущий сколько уже нашли свойств и текущий класс.</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#800080;">$host</span><span style="color:#000000;">.ui.rawui.windowtitle </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">$($h.count)/25 - $Class.$_</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    }
}
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Красиво выводим результаты.</span><span style="color:#008000;">
</span><span style="color:#800080;">$h</span><span style="color:#000000;">.values </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Sort</span><span style="color:#000000;">-</span><span style="color:#000000;">Object letter </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Format</span><span style="color:#000000;">-</span><span style="color:#000000;">Table </span><span style="color:#000000;">-</span><span style="color:#000000;">AutoSize</span></div>
</pre>
</div>
<p>Обязательно посмотреть <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/26/scripting-games-2008-sudden-death-challenge-5.aspx">оба варианта MoW</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Sudden Death Challenge - Event 4]]></title>
<link>http://xaegr.wordpress.com/2008/03/20/scripting-games-sudden-death-challenge-event-4/</link>
<pubDate>Thu, 20 Mar 2008 07:53:56 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/20/scripting-games-sudden-death-challenge-event-4/</guid>
<description><![CDATA[Задача &#8211; получить из 6882463283678273808479 строку &#8220;DR. SCRIPTO&#8221;. Ерунда &nbsp; SD]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdevent4.mspx">Задача</a> &#8211; получить из 6882463283678273808479 строку &#8220;DR. SCRIPTO&#8221;. Ерунда <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SD4.ps1
<pre style="width:100%;">
<div><span style="color:#000000;">$</span><span style="color:#000000;">(</span><span style="color:#0000FF;">foreach</span><span style="color:#000000;">(</span><span style="color:#800080;">$c</span><span style="color:#000000;"> </span><span style="color:#0000FF;">in</span><span style="color:#000000;">([char[]](gc C:\scripts\numbers.txt))){[char][int]</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">$c$($foreach.movenext()&#124;out-null;$foreach.current)</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">})</span><span style="color:#000000;">-</span><span style="color:#000000;">join''</span></div>
</pre>
</div>
<p>Но вот разобрать и прокомментировать этот ужас куда сложнее&#8230; И поэтому я просто переписал ту же логику заново, но более понятно <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SD4_easy.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Инициализируем переменную $Result для хранения итоговой строки.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Result</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;&#34;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Получаем содержимое файла в переменную.</span><span style="color:#008000;">
</span><span style="color:#800080;">$stringNumbers</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Content </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">C:\scripts\numbers.txt</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Преобразуем строку в массив символов</span><span style="color:#008000;">
</span><span style="color:#800080;">$charNumbers</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> [char[]]</span><span style="color:#800080;">$stringNumbers</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Для каждого символа в массиве...</span><span style="color:#008000;">
</span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#800080;">$FirstNumber</span><span style="color:#000000;"> </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> </span><span style="color:#800080;">$charNumbers</span><span style="color:#000000;">)
{
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Сдвигаем перебор на одну итерацию вперед с помощью метода MoveNext() </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> специального объекта $ForEach (который доступен только внутри цикла foreach.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Foreach</span><span style="color:#000000;">.MoveNext() </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Out</span><span style="color:#000000;">-</span><span style="color:#000000;">Null
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Помещаем следующий символ в переменную $SecondNumber.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$SecondNumber</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Foreach</span><span style="color:#000000;">.Current
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Объединяем оба номера в число, которое и является кодом символа.</span><span style="color:#008000;">
</span><span style="color:#000000;">    [int]</span><span style="color:#800080;">$CharCode</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$FirstNumber</span><span style="color:#000000;">+</span><span style="color:#800080;">$SecondNumber</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Преобразовываем число в символ, и добавляем к $Result.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Result</span><span style="color:#000000;"> </span><span style="color:#000000;">+=</span><span style="color:#000000;"> [char]</span><span style="color:#800080;">$CharCode</span><span style="color:#000000;">
}
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Выводим результат.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Result</span></div>
</pre>
</div>
<p> Кстати у MoW <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/26/scripting-games-2008-sudden-death-challenge-event-4.aspx">получилось</a> еще короче и красивее.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Sudden Death Challenge - Event 3]]></title>
<link>http://xaegr.wordpress.com/2008/03/19/scripting-games-sudden-death-challenge-event-3/</link>
<pubDate>Wed, 19 Mar 2008 08:09:48 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/19/scripting-games-sudden-death-challenge-event-3/</guid>
<description><![CDATA[Вопросы про американских президентов У какого президента самое длинное имя? Какие буквы не встречают]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdevent3.mspx">Вопросы про американских президентов</a> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>У какого президента самое длинное имя?</p>
<p>Какие буквы не встречаются в инициалах президентов?</p>
<p>Сколько гласных во всех именах президентов?</p>
<p>&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SD3.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Загружаем список президентов в переменную.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Presidents</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Content </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">c:\scripts\presidents.txt</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Объявляем переменную содержащую гласные буквы.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Vowels</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">aeiou</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Выводим строчку &#34;Longest first name: &#34; без перехода на новую строку.</span><span style="color:#008000;">
</span><span style="color:#000000;">Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Longest first name: </span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">NoNewline
(</span><span style="color:#800080;">$Presidents</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Сортируем президентов по имени. (оператор -replace тут удаляет текст до </span><span style="color:#008000;">
#</span><span style="color:#008000;"> пробела и сам пробел. Дальше используем свойство .length чтобы получить </span><span style="color:#008000;">
#</span><span style="color:#008000;"> длину оставшейся строки. Получившийся скриптблок {} передаем как аргумент</span><span style="color:#008000;">
#</span><span style="color:#008000;"> командлету Sort-Object, в качестве критерия для сортировки.</span><span style="color:#008000;">
</span><span style="color:#000000;">sort {(</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">^.+, </span><span style="color:#800000;">&#34;</span><span style="color:#000000;">).length} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Выбираем один последний результат, и опять с помощью оператора -replace</span><span style="color:#008000;">
#</span><span style="color:#008000;"> меняем имя и фамилию местами.</span><span style="color:#008000;">
</span><span style="color:#000000;">select </span><span style="color:#000000;">-</span><span style="color:#000000;">last </span><span style="color:#000000;">1</span><span style="color:#000000;">) </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> '^(.</span><span style="color:#000000;">+</span><span style="color:#000000;">), (.</span><span style="color:#000000;">+</span><span style="color:#000000;">)</span><span style="color:#000000;">$</span><span style="color:#000000;">','</span><span style="color:#800080;">$2</span><span style="color:#000000;"> </span><span style="color:#800080;">$1</span><span style="color:#000000;">'

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем переменную которая будет содержать все буквы алфавита от A до Z.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Alphabet</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> ([char]</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">A</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">..[char]</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Z</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">&#124;</span><span style="color:#0000FF;">foreach</span><span style="color:#000000;">{[char]</span><span style="color:#800080;">$_</span><span style="color:#000000;">}) </span><span style="color:#000000;">-</span><span style="color:#000000;">join </span><span style="color:#800000;">&#34;&#34;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> В переменную $Used помещаем буквы которые используются как инициалы.</span><span style="color:#008000;">
#</span><span style="color:#008000;"> Чтоб получить все инициалы просто удаляем все маленькие буквы, и разделяем из </span><span style="color:#008000;">
#</span><span style="color:#008000;"> массива строк, на массив символов с помощью -split ''.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Used</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Presidents</span><span style="color:#000000;"> </span><span style="color:#008080;">-creplace</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[a-z, ]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">split '' </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Выбираем только уникальные буквы (нам не нужны повторные) и объединяем в </span><span style="color:#008000;">
#</span><span style="color:#008000;"> строчку.</span><span style="color:#008000;">
</span><span style="color:#000000;">select </span><span style="color:#000000;">-</span><span style="color:#000000;">unique) </span><span style="color:#000000;">-</span><span style="color:#000000;">join ''

Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Letters are not used as initials: </span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">NoNewline
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Удаляем из $Alpabet все буквы которые были использованы. Результат будет </span><span style="color:#008000;">
#</span><span style="color:#008000;"> передан на вывод.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Alphabet</span><span style="color:#000000;"> </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[$Used]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">

Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Total vowels used: </span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">NoNewline
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Удаляем из списка президентов все согласные (не гласные <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) и считаем </span><span style="color:#008000;">
#</span><span style="color:#008000;"> получившееся количество гласных.</span><span style="color:#008000;">
</span><span style="color:#000000;">(</span><span style="color:#800080;">$Presidents</span><span style="color:#000000;"> </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[^$vowels]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Measure</span><span style="color:#000000;">-</span><span style="color:#000000;">Object </span><span style="color:#000000;">-</span><span style="color:#000000;">Character).characters
</span></div>
</pre>
</div>
<p>Решение от <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/21/scripting-games-2008-sudden-death-challenge-3.aspx">MoW</a> и <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/sdsol03.mspx">Scripting Guys</a>.</p>
<p><strong>PS</strong>: Напоминаю, что сегодня будет встреча в Live Meeting посвященная обсуждению вчерашнего события и сопутствующим темам. Приходите! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Sudden Death Challenge - Event 2]]></title>
<link>http://xaegr.wordpress.com/2008/03/17/scripting-games-sudden-death-challenge-event-2/</link>
<pubDate>Mon, 17 Mar 2008 06:14:26 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/17/scripting-games-sudden-death-challenge-event-2/</guid>
<description><![CDATA[Так как в первой задаче Sudden Death правильный ответ мог быть только один &#8211; ничего интересног]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Так как в <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdevent1.mspx">первой задаче</a> <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdhome.mspx">Sudden Death</a> правильный ответ мог быть только <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/sdsol01.mspx">один</a> &#8211; ничего интересного в моем варианте нет, и писать я про него соответственно не буду <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  А начну я сразу с <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdevent2.mspx">Event 2</a>, в котором требовалось из составить одну строчку текста из нескольких столбцов.</p>
<p>&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="width:100%;">
<div><span style="color:#000000;">T Sg
hWc
eirG
 nia
2tpm
0ete
0ris
8 n!</span></div>
</pre>
</div>
<p>Вобщем ничего сложного:</p>
<p>&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SD2.Ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Загружаем содержимое файла vertical.txt Командлет Get-Content возвращает </span><span style="color:#008000;">
#</span><span style="color:#008000;"> массив строк.</span><span style="color:#008000;">
</span><span style="color:#800080;">$v</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Content </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">c:\scripts\vertical.txt</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Переменная $Cols будет содержать количество колонок которое мы получим из </span><span style="color:#008000;">
#</span><span style="color:#008000;"> длины первой строки.</span><span style="color:#008000;">
</span><span style="color:#800080;">$cols</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$v</span><span style="color:#000000;">[</span><span style="color:#000000;">0</span><span style="color:#000000;">].length
</span><span style="color:#008000;">#</span><span style="color:#008000;"> А $Rows соответственно количество элементов в массиве $v.</span><span style="color:#008000;">
</span><span style="color:#800080;">$rows</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$v</span><span style="color:#000000;">.count
</span><span style="color:#008000;">#</span><span style="color:#008000;"> С помощью двух for перебираем все символы: сначала первый символ всех </span><span style="color:#008000;">
#</span><span style="color:#008000;"> столбцов, потом второй, и так далее.</span><span style="color:#008000;">
</span><span style="color:#0000FF;">for</span><span style="color:#000000;"> (</span><span style="color:#800080;">$c</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">0</span><span style="color:#000000;">; </span><span style="color:#800080;">$c</span><span style="color:#000000;"> </span><span style="color:#008080;">-lt</span><span style="color:#000000;"> </span><span style="color:#800080;">$cols</span><span style="color:#000000;">; </span><span style="color:#800080;">$c</span><span style="color:#000000;">++</span><span style="color:#000000;">)
{
    </span><span style="color:#0000FF;">for</span><span style="color:#000000;"> (</span><span style="color:#800080;">$r</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">0</span><span style="color:#000000;">; </span><span style="color:#800080;">$r</span><span style="color:#000000;"> </span><span style="color:#008080;">-lt</span><span style="color:#000000;"> </span><span style="color:#800080;">$rows</span><span style="color:#000000;">; </span><span style="color:#800080;">$r</span><span style="color:#000000;">++</span><span style="color:#000000;">)
    {
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Выводим текущий символ текущей строки.</span><span style="color:#008000;">
</span><span style="color:#000000;">        Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host (</span><span style="color:#800080;">$v</span><span style="color:#000000;">[</span><span style="color:#800080;">$r</span><span style="color:#000000;">][</span><span style="color:#800080;">$c</span><span style="color:#000000;">]) </span><span style="color:#000000;">-</span><span style="color:#000000;">NoNewline
    }
}
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Делаем финальный перевод строки для красоты.</span><span style="color:#008000;">
</span><span style="color:#000000;">Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;&#34;</span></div>
</pre>
</div>
<p>Вот ответ от <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/sdsol02.mspx">Scripting Guys</a> и вариант <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/21/scripting-games-2008-sudden-death-challenge-2.aspx">MoW</a> в почти в одну строчку <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Advanced PowerShell - Event 10]]></title>
<link>http://xaegr.wordpress.com/2008/03/14/scripting-games-advanced-powershell-event-10/</link>
<pubDate>Fri, 14 Mar 2008 09:31:52 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/14/scripting-games-advanced-powershell-event-10/</guid>
<description><![CDATA[В последней задачке подразделения Advanced мы писали симулятор игры Black Jack, или по-русски ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://xaegr.files.wordpress.com/2008/03/cards.png"><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="95" alt="cards" src="http://xaegr.files.wordpress.com/2008/03/cards-thumb.png?w=171&#038;h=95" width="171" border="0"></a> </p>
<p>В последней <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent10.mspx">задачке</a> подразделения <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/advanced.mspx">Advanced</a> мы писали симулятор игры Black Jack, или по-русски &#8220;Очко&#8221; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Честно говоря когда я читал задание первый раз, после того как легко расщелкал все предыдущие, я подумал &#8211; &#8220;вот и засада с пушным зверьком&#8230;&#8221; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Но всё оказалось куда проще чем казалось в начале <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><!--more--></p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SG10-BlackJack.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем массив карт.</span><span style="color:#008000;">
</span><span style="color:#000000;">[collections.arraylist]</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">=@</span><span style="color:#000000;">()
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Масти.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Suits</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Spades</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">,</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Hearts</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">,</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Diamonds</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">,</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Clubs</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Хэш-таблица значений.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Values</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">@</span><span style="color:#000000;">{
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Ace</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">11</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">King</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">10</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Queen</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">10</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Jack</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">10</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Two</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">2</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Three</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">3</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Four</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">4</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Five</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">5</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Six</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">6</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Seven</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">7</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Eight</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">8</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Nine</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">9</span><span style="color:#000000;">
  </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Ten</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">10</span><span style="color:#000000;">
}

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем карты и помещаем их в массив. Каждая карта - объект со свойствами </span><span style="color:#008000;">
#</span><span style="color:#008000;"> Name (например &#34;Ace of Spades&#34;, Value (например 11) и Position (где в текущий</span><span style="color:#008000;">
#</span><span style="color:#008000;"> момент находится карта, изначально у всех Deck (колода)).</span><span style="color:#008000;">
</span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#800080;">$key</span><span style="color:#000000;"> </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> </span><span style="color:#800080;">$Values</span><span style="color:#000000;">.keys)
{
  </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Suit</span><span style="color:#000000;"> </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> </span><span style="color:#800080;">$Suits</span><span style="color:#000000;">)
  {
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем объект.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Card</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> New</span><span style="color:#000000;">-</span><span style="color:#000000;">Object </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">PSObject</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Добавляем свойства.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Card</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Add</span><span style="color:#000000;">-</span><span style="color:#000000;">Member </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">NoteProperty</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Name </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Name</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Value </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">$key of $Suit</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    </span><span style="color:#800080;">$Card</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Add</span><span style="color:#000000;">-</span><span style="color:#000000;">Member </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">NoteProperty</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Name </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Value</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Value </span><span style="color:#800080;">$Values</span><span style="color:#000000;">[</span><span style="color:#800080;">$key</span><span style="color:#000000;">]
    </span><span style="color:#800080;">$Card</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Add</span><span style="color:#000000;">-</span><span style="color:#000000;">Member </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">NoteProperty</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Name </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Position</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Value </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Deck</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Добавляем объект к массиву.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Cards</span><span style="color:#000000;"> </span><span style="color:#000000;">+=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Card</span><span style="color:#000000;">
  }
}

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Тасуем колоду.</span><span style="color:#008000;">
</span><span style="color:#800080;">$r</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> New</span><span style="color:#000000;">-</span><span style="color:#000000;">Object random
</span><span style="color:#800080;">$Cards</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">.count)..</span><span style="color:#000000;">1</span><span style="color:#000000;">&#124;%</span><span style="color:#000000;">{</span><span style="color:#800080;">$r</span><span style="color:#000000;">.next(</span><span style="color:#000000;">0</span><span style="color:#000000;">,</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">.count)} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> </span><span style="color:#000000;">%</span><span style="color:#000000;">{</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">[</span><span style="color:#800080;">$_</span><span style="color:#000000;">]; </span><span style="color:#800080;">$Cards</span><span style="color:#000000;">.removeat(</span><span style="color:#800080;">$_</span><span style="color:#000000;">)}

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Раздаем первые 2 карты игроку, одну раздающему не показывая (DealerHidden) и</span><span style="color:#008000;">
#</span><span style="color:#008000;"> одну раздающему которую открываем (Dealer).</span><span style="color:#008000;">
</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">[</span><span style="color:#000000;">0</span><span style="color:#000000;">].Position </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Player</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">].Position </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Player</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">[</span><span style="color:#000000;">2</span><span style="color:#000000;">].Position </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">DealerHidden</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">[</span><span style="color:#000000;">3</span><span style="color:#000000;">].Position </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Dealer</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">

</span><span style="color:#008000;">#</span><span style="color:#008000;"> $n - обозначает верхнюю текущую карту в колоде.</span><span style="color:#008000;">
</span><span style="color:#800080;">$n</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">4</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Начинаем игру.</span><span style="color:#008000;">
</span><span style="color:#0000FF;">while</span><span style="color:#000000;"> (</span><span style="color:#000000;">1</span><span style="color:#000000;">) {
  </span><span style="color:#008000;">#</span><span style="color:#008000;"> Очищаем экран и выводим на экран карты игрока.</span><span style="color:#008000;">
</span><span style="color:#000000;">  cls
  Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Your cards:</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
  </span><span style="color:#800080;">$Cards</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> where {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.Position </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Player</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.name}

  </span><span style="color:#008000;">#</span><span style="color:#008000;"> Считаем текущую сумму очков у игрока и показываем её.</span><span style="color:#008000;">
</span><span style="color:#000000;">  </span><span style="color:#800080;">$PlayerScore</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Cards</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Where {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.Position </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Player</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    Measure</span><span style="color:#000000;">-</span><span style="color:#000000;">Object value </span><span style="color:#000000;">-</span><span style="color:#000000;">Sum).sum
  Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Total: $PlayerScore</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">

  </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если сумма очков больше 21 то игрок проиграл, ...</span><span style="color:#008000;">
</span><span style="color:#000000;">  </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (</span><span style="color:#800080;">$playerScore</span><span style="color:#000000;"> </span><span style="color:#008080;">-gt</span><span style="color:#000000;"> </span><span style="color:#000000;">21</span><span style="color:#000000;">)
  {
    Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Over 21. Sorry, you lose.</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    exit
  }
  </span><span style="color:#008000;">#</span><span style="color:#008000;"> если равна 21, то выиграл,...</span><span style="color:#008000;">
</span><span style="color:#000000;">  </span><span style="color:#0000FF;">elseif</span><span style="color:#000000;"> (</span><span style="color:#800080;">$playerScore</span><span style="color:#000000;"> </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#000000;">21</span><span style="color:#000000;">)
  {
    Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">21. You win!</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    exit
  }
  </span><span style="color:#008000;">#</span><span style="color:#008000;"> ... а если меньше 21, то выводим карты раздающего (ту которая скрыта, не</span><span style="color:#008000;">
</span><span style="color:#000000;">  </span><span style="color:#008000;">#</span><span style="color:#008000;"> показываем, лишь упоминаем о её наличии.</span><span style="color:#008000;">
</span><span style="color:#000000;">  Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">`nDealer's cards:`n[hidden]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
  </span><span style="color:#800080;">$Cards</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> where {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.Position </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Dealer</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.name}

  </span><span style="color:#008000;">#</span><span style="color:#008000;"> Запрашиваем действие игрока.</span><span style="color:#008000;">
</span><span style="color:#000000;">  </span><span style="color:#800080;">$Ans</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> (Read</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Stay (s) or hit (h) ?</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)
  </span><span style="color:#0000FF;">if</span><span style="color:#000000;">(</span><span style="color:#800080;">$Ans</span><span style="color:#000000;"> </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">h</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)
  {
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Тащим еще одну карту игроку</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Cards</span><span style="color:#000000;">[</span><span style="color:#800080;">$n</span><span style="color:#000000;">].Position </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Player</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    </span><span style="color:#800080;">$n</span><span style="color:#000000;">++</span><span style="color:#000000;">
  }
  </span><span style="color:#0000FF;">elseif</span><span style="color:#000000;">(</span><span style="color:#800080;">$Ans</span><span style="color:#000000;"> </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">s</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)
  {
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Игрок закончил, выводим его карты последний раз.</span><span style="color:#008000;">
</span><span style="color:#000000;">    cls
    Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Your cards:</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    </span><span style="color:#800080;">$Cards</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> where {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.Position </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Player</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.name}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Считаем очки игрока.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$PlayerScore</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">&#124;</span><span style="color:#000000;">where{</span><span style="color:#800080;">$_</span><span style="color:#000000;">.Position </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Player</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}</span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
      Measure</span><span style="color:#000000;">-</span><span style="color:#000000;">Object value </span><span style="color:#000000;">-</span><span style="color:#000000;">Sum).sum
    Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Total: $PlayerScore`n`nDealer cards:</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Выводим карты раздающего (в том числе и скрытую).</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Cards</span><span style="color:#000000;">&#124;</span><span style="color:#000000;">where{</span><span style="color:#800080;">$_</span><span style="color:#000000;">.Position </span><span style="color:#008080;">-match</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Dealer</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}</span><span style="color:#000000;">&#124;</span><span style="color:#0000FF;">foreach</span><span style="color:#000000;">{</span><span style="color:#800080;">$_</span><span style="color:#000000;">.name}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Теперь раздающий тянет карты.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">while</span><span style="color:#000000;">(</span><span style="color:#000000;">1</span><span style="color:#000000;">)
    {
      </span><span style="color:#008000;">#</span><span style="color:#008000;"> Считаем очки раздающего</span><span style="color:#008000;">
</span><span style="color:#000000;">      </span><span style="color:#800080;">$DealerScore</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">&#124;</span><span style="color:#000000;">where{</span><span style="color:#800080;">$_</span><span style="color:#000000;">.Position </span><span style="color:#008080;">-match</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Dealer</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}</span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
        Measure</span><span style="color:#000000;">-</span><span style="color:#000000;">Object value </span><span style="color:#000000;">-</span><span style="color:#000000;">Sum).sum
      </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (</span><span style="color:#800080;">$DealerScore</span><span style="color:#000000;"> </span><span style="color:#008080;">-gt</span><span style="color:#000000;"> </span><span style="color:#000000;">21</span><span style="color:#000000;">)
      {
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если больше 21 - игрок победил.</span><span style="color:#008000;">
</span><span style="color:#000000;">        Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">The dealer has $DealerScore. You win!.</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
        exit
      }
      </span><span style="color:#0000FF;">elseif</span><span style="color:#000000;"> (</span><span style="color:#800080;">$DealerScore</span><span style="color:#000000;"> </span><span style="color:#008080;">-ge</span><span style="color:#000000;"> </span><span style="color:#800080;">$PlayerScore</span><span style="color:#000000;">)
      {
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если очков столько же сколько у игрока, то искусственный разум</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#008000;">#</span><span style="color:#008000;"> победил.</span><span style="color:#008000;">
</span><span style="color:#000000;">        Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">The dealer has $DealerScore. Sorry, you lose.</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
        exit
      }
      </span><span style="color:#008000;">#</span><span style="color:#008000;"> Раздающий тащит следующую карту.</span><span style="color:#008000;">
</span><span style="color:#000000;">      </span><span style="color:#800080;">$Cards</span><span style="color:#000000;">[</span><span style="color:#800080;">$n</span><span style="color:#000000;">].Position </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Dealer</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
      </span><span style="color:#008000;">#</span><span style="color:#008000;"> Сразу выводим её на экран.</span><span style="color:#008000;">
</span><span style="color:#000000;">      Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host (</span><span style="color:#800080;">$Cards</span><span style="color:#000000;">[</span><span style="color:#800080;">$n</span><span style="color:#000000;">].name)
      </span><span style="color:#800080;">$n</span><span style="color:#000000;">++</span><span style="color:#000000;">
    }
  }
}</span></div>
</pre>
</div>
<p>Ну и обязательно посмотрите решения <a href="http://msgoodies.blogspot.com/2008/03/2008-scripting-games-solution-10.html">Per Østergaard</a>, и конечно <a href="http://thepowershellguy.com/blogs/posh/archive/2008/03/03/scripting-games-2008-advanced-windows-powershell-event-10.aspx">MoW</a> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><img height="412" src="http://thepowershellguy.com/blogs/posh/attachment/15698.ashx" width="320"> </p>
<p>Это последнее задание в категории Advanced PowerShell, но еще было 10 не менее интересных задачек в <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/sdhome.mspx">Sudden Death Challenge</a>. И их я тоже обязательно опубликую <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Advanced PowerShell - Event 9]]></title>
<link>http://xaegr.wordpress.com/2008/03/13/scripting-games-advanced-powershell-event-9/</link>
<pubDate>Thu, 13 Mar 2008 06:12:39 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/13/scripting-games-advanced-powershell-event-9/</guid>
<description><![CDATA[Совсем простая задачка, надо было взять все слова из текстовика, и записать буквы каждого слова в об]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Совсем простая <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent9.mspx">задачка</a>, надо было взять все слова из текстовика, и записать буквы каждого слова в обратном порядке, не меняя общего порядка слов.</p>
<p>&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SG9-Reverse.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Получаем содержимое файла alice.txt, разделяем его на слова по пробелам, и</span><span style="color:#008000;">
#</span><span style="color:#008000;"> передаем их в конвейер.</span><span style="color:#008000;">
</span><span style="color:#000000;">((Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Content </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">c:\scripts\alice.txt</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">) </span><span style="color:#000000;">-</span><span style="color:#000000;">split </span><span style="color:#800000;">&#34;</span><span style="color:#800000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Для каждого слова ($_)...</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> {
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> ... берем все его символы начиная с последнего и заканчивая нулевым и </span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#008000;">#</span><span style="color:#008000;"> объединяем их снова в слово.</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#800080;">$_</span><span style="color:#000000;">[(</span><span style="color:#800080;">$_</span><span style="color:#000000;">.length</span><span style="color:#000000;">-</span><span style="color:#000000;">1</span><span style="color:#000000;">)..</span><span style="color:#000000;">0</span><span style="color:#000000;">] </span><span style="color:#000000;">-</span><span style="color:#000000;">join </span><span style="color:#800000;">&#34;&#34;</span><span style="color:#000000;">
    }
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Соединяем получившийся массив слов с помощью пробелов.</span><span style="color:#008000;">
</span><span style="color:#000000;">) </span><span style="color:#000000;">-</span><span style="color:#000000;">join </span><span style="color:#800000;">&#34;</span><span style="color:#800000;"> </span><span style="color:#800000;">&#34;</span></div>
</pre>
</div>
<p>Либо тоже самое, но в одну строчку <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="width:100%;">
<div><span style="color:#000000;">((gc c:\scripts\alice.txt)</span><span style="color:#000000;">-</span><span style="color:#000000;">split</span><span style="color:#800000;">&#34;</span><span style="color:#800000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#000000;">&#124;%</span><span style="color:#000000;">{</span><span style="color:#800080;">$_</span><span style="color:#000000;">[(</span><span style="color:#800080;">$_</span><span style="color:#000000;">.length</span><span style="color:#000000;">-</span><span style="color:#000000;">1</span><span style="color:#000000;">)..</span><span style="color:#000000;">0</span><span style="color:#000000;">]</span><span style="color:#000000;">-</span><span style="color:#000000;">join</span><span style="color:#800000;">&#34;&#34;</span><span style="color:#000000;">})</span><span style="color:#000000;">-</span><span style="color:#000000;">join</span><span style="color:#800000;">&#34;</span><span style="color:#800000;"> </span><span style="color:#800000;">&#34;</span></div>
</pre>
</div>
<p>Почти тоже самое от <a href="http://thepowershellguy.com/blogs/posh/archive/2008/03/03/scripting-games-2008-advanced-windows-powershell-event-9.aspx">MoW</a> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (но всё же короче! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) и от <a href="http://msgoodies.blogspot.com/2008/03/2008-scripting-games-solution-9.html">Per Østergaard</a> с применением функционала .Net. Ну и <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol09.mspx">Scripting Guys</a> (блин, я тоже хочу научиться писать скрипты как они &#8211; по слогам <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Advanced PowerShell - Event 8]]></title>
<link>http://xaegr.wordpress.com/2008/03/12/scripting-games-advanced-powershell-event-8/</link>
<pubDate>Wed, 12 Mar 2008 07:17:03 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/12/scripting-games-advanced-powershell-event-8/</guid>
<description><![CDATA[Выполняем работу iTunes Помнится в нём была подобная функциональность &#8211; набить айпод произволь]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent8.mspx">Выполняем работу iTunes</a> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Помнится в нём была подобная функциональность &#8211; набить айпод произвольной музыкой из библиотеки под завязку. Впрочем тут условия чуть сложнее <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SG8-SongList.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Загружаем содержимое файла songlist.csv. Import-Csv использовать не получится,</span><span style="color:#008000;">
#</span><span style="color:#008000;"> так как он берет заголовки из первой строки, а в этом файле заголовков нет, и</span><span style="color:#008000;">
#</span><span style="color:#008000;"> в первой строке находятся данные.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Songs</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Content </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">c:\scripts\songlist.csv</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Отбираем только строки попадающие под регулярное выражение, заодно </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> разбирая на группы.</span><span style="color:#008000;">
</span><span style="color:#000000;">    where {</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-match</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">^(.+),(.+),(.+)$</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> {
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем новый, пустой объект.</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#800080;">$obj</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> New</span><span style="color:#000000;">-</span><span style="color:#000000;">Object </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">PSObject</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Добавляем к нему свойства со значениями полученными из регулярного</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#008000;">#</span><span style="color:#008000;"> выражения ($Matches).</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#800080;">$obj</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Add</span><span style="color:#000000;">-</span><span style="color:#000000;">Member </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">noteproperty</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Name </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Artist</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Value </span><span style="color:#800080;">$matches</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">]
        </span><span style="color:#800080;">$obj</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Add</span><span style="color:#000000;">-</span><span style="color:#000000;">Member </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">noteproperty</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Name </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Song</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Value </span><span style="color:#800080;">$matches</span><span style="color:#000000;">[</span><span style="color:#000000;">2</span><span style="color:#000000;">]
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Добавляя свойство Time, преобразовываем значение в тип [TimeSpan] </span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#008000;">#</span><span style="color:#008000;"> (отрезок времени).</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#800080;">$obj</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Add</span><span style="color:#000000;">-</span><span style="color:#000000;">Member </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">noteproperty</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Name </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Time</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Value ([TimeSpan](</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">0:</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">+</span><span style="color:#800080;">$matches</span><span style="color:#000000;">[</span><span style="color:#000000;">3</span><span style="color:#000000;">]))
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Выводим полученный объект на конвейер.</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#800080;">$obj</span><span style="color:#000000;">
    }
</span><span style="color:#008000;">#</span><span style="color:#008000;"> В результате в переменной $Songs у нас содержится массив объектов со </span><span style="color:#008000;">
#</span><span style="color:#008000;"> свойствами Artist, Song, Time.</span><span style="color:#008000;">
</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем массив $Burnlist, это список песен для записи.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Burnlist</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">@</span><span style="color:#000000;">()
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем объект класса Random для генерации произвольных чисел.</span><span style="color:#008000;">
</span><span style="color:#800080;">$r</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> New</span><span style="color:#000000;">-</span><span style="color:#000000;">Object random

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Запускаем бесконечный цикл.</span><span style="color:#008000;">
</span><span style="color:#0000FF;">while</span><span style="color:#000000;"> (</span><span style="color:#0000FF;">$true</span><span style="color:#000000;">) {
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Получаем произвольную песню из списка.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$song</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Songs</span><span style="color:#000000;">[</span><span style="color:#800080;">$r</span><span style="color:#000000;">.next(</span><span style="color:#800080;">$Songs</span><span style="color:#000000;">.length)]
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если в списке $BurnList содержится не более одной песни от $Song.Artist и</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> в списке еще нет конкретно этой песни...</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (((</span><span style="color:#800080;">$burnlist</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> where {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.artist </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#800080;">$song</span><span style="color:#000000;">.artist}).count </span><span style="color:#008080;">-le</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">) `
        </span><span style="color:#008080;">-and</span><span style="color:#000000;"> (</span><span style="color:#000000;">!</span><span style="color:#000000;">(</span><span style="color:#800080;">$burnlist</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> where {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.song </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#800080;">$song</span><span style="color:#000000;">.song})))
    {
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Добавляем к списку записи $Song</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#800080;">$Burnlist</span><span style="color:#000000;"> </span><span style="color:#000000;">+=</span><span style="color:#000000;"> </span><span style="color:#800080;">$song</span><span style="color:#000000;">

        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Считаем какова общая продолжительность песен в $Burnlist:</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем переменную $n класса [TimeSpan]</span><span style="color:#008000;">
</span><span style="color:#000000;">        [timespan]</span><span style="color:#800080;">$n</span><span style="color:#000000;">=</span><span style="color:#000000;">0</span><span style="color:#000000;">
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Добавляем к $n время всех треков из $BurnList</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#800080;">$burnlist</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;%</span><span style="color:#000000;">{</span><span style="color:#800080;">$n</span><span style="color:#000000;">+=</span><span style="color:#800080;">$_</span><span style="color:#000000;">.time}
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если суммарное время превышает 80 минут, то обнуляем $Burnlist, и он</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#008000;">#</span><span style="color:#008000;"> будет заполняться заново. Не самый оптимальный алгоритм, но... <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (</span><span style="color:#800080;">$n</span><span style="color:#000000;"> </span><span style="color:#008080;">-gt</span><span style="color:#000000;"> [timespan]</span><span style="color:#000000;">::</span><span style="color:#000000;">FromMinutes(</span><span style="color:#000000;">80</span><span style="color:#000000;">)){</span><span style="color:#800080;">$Burnlist</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">@</span><span style="color:#000000;">()}
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если суммарное время удовлетворяет условиям задачи (Больше 75 минут и</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#008000;">#</span><span style="color:#008000;"> меньше 80)...</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (</span><span style="color:#800080;">$n</span><span style="color:#000000;"> </span><span style="color:#008080;">-lt</span><span style="color:#000000;"> [timespan]</span><span style="color:#000000;">::</span><span style="color:#000000;">FromMinutes(</span><span style="color:#000000;">80</span><span style="color:#000000;">) </span><span style="color:#008080;">-and</span><span style="color:#000000;"> </span><span style="color:#800080;">$n</span><span style="color:#000000;"> </span><span style="color:#008080;">-gt</span><span style="color:#000000;"> [timespan]</span><span style="color:#000000;">::</span><span style="color:#000000;">FromMinutes(</span><span style="color:#000000;">75</span><span style="color:#000000;">))
        {
            </span><span style="color:#008000;">#</span><span style="color:#008000;"> Cортируем список по исполнителю.</span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#800080;">$Burnlist</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Sort artist </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
            </span><span style="color:#008000;">#</span><span style="color:#008000;"> Выбираем свойства Artist и Song, а свойство Time заменяем </span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#008000;">#</span><span style="color:#008000;"> текстовым (вместо [TimeSpan]) с временем в формате который </span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#008000;">#</span><span style="color:#008000;"> предпочитают Scripting Guys <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span><span style="color:#008000;">
</span><span style="color:#000000;">            Select Artist, Song, </span><span style="color:#000000;">@</span><span style="color:#000000;">{n</span><span style="color:#000000;">=</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Time</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">;e</span><span style="color:#000000;">=</span><span style="color:#000000;">{</span><span style="color:#800080;">$_</span><span style="color:#000000;">.Time </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">^00:</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
            </span><span style="color:#008000;">#</span><span style="color:#008000;"> Выводим объекты на GridView</span><span style="color:#008000;">
</span><span style="color:#000000;">            Out</span><span style="color:#000000;">-</span><span style="color:#000000;">GridView
            </span><span style="color:#008000;">#</span><span style="color:#008000;"> Пишем сколько всего времени заняли треки на диске.</span><span style="color:#008000;">
</span><span style="color:#000000;">            Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Total music time: $([int]$n.totalminutes):$($n.seconds)</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
            </span><span style="color:#008000;">#</span><span style="color:#008000;"> Завершаем работу скрипта.</span><span style="color:#008000;">
</span><span style="color:#000000;">            Exit
        }
    }
}</span></div>
</pre>
</div>
<p>Опять далеко не идеал <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Другие варианты: <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/28/scripting-games-2008-advanced-windows-powershell-event-8.aspx">Mow</a>, <a href="http://msgoodies.blogspot.com/2008/03/2008-scripting-games-solution-8.html">Per Østergaard</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol08.mspx">Scripting Guys</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/expssol08.mspx">Macro Shaw</a>.</p>
<p>PS: Срочно в номер <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Через полтора-два часа (12 MSK) начнется очень интересный <a href="http://www.microsoft.com/Rus/events/detail.mspx?eventid=1032369954">вебкаст</a>, рекомендую <a href="http://www.microsoft.com/Rus/events/detail.mspx?eventid=1032369954">записаться</a> и посмотреть <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Advanced PowerShell - Event 7]]></title>
<link>http://xaegr.wordpress.com/2008/03/11/scripting-games-advanced-powershell-event-7/</link>
<pubDate>Tue, 11 Mar 2008 06:48:59 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/11/scripting-games-advanced-powershell-event-7/</guid>
<description><![CDATA[Продолжаю публикации ужасного (я очень скромный ) кода со Scripting Games. Седьмая задачка была дост]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Продолжаю публикации ужасного (я очень скромный <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) кода со <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/default.mspx">Scripting Games</a>. <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent7.mspx">Седьмая задачка</a> была достаточно простой, но видимо лень не дала мне найти более красивое и короткое решение (отмазался типа <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) Рекомендую посмотреть на то как её решили другие участники (ссылки внизу).</p>
<p><!--more--></p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SG7-PlayBall.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем массив с именами команд. Да, можно было просто сделать</span><span style="color:#008000;">
#</span><span style="color:#008000;"> $Teams = [string[]][char[]]&#34;ABCDEF&#34; или еще проще, но мы простых путей не ищем <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </span><span style="color:#008000;">
</span><span style="color:#800080;">$Teams</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> [string[]][char[]]([char]</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">A</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">..[char]</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">F</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем [arrayList] для хранения матчей. Отличие от обычного Array в том что </span><span style="color:#008000;">
#</span><span style="color:#008000;"> можно удалять элементы.</span><span style="color:#008000;">
</span><span style="color:#000000;">[collections.arraylist]</span><span style="color:#800080;">$Games</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">@</span><span style="color:#000000;">()
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Просто перебираем все комбинации команд...</span><span style="color:#008000;">
</span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#800080;">$first</span><span style="color:#000000;"> </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> </span><span style="color:#800080;">$Teams</span><span style="color:#000000;">)
{
    </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#800080;">$second</span><span style="color:#000000;"> </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> </span><span style="color:#800080;">$Teams</span><span style="color:#000000;">)
    {
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> ... и если такого сочетания нет в списке, и первая команда не равна</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#008000;">#</span><span style="color:#008000;"> второй...</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> ((</span><span style="color:#800080;">$Games</span><span style="color:#000000;"> </span><span style="color:#008080;">-notcontains</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">$first vs. $second</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">) `
            </span><span style="color:#008080;">-and</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Games</span><span style="color:#000000;"> </span><span style="color:#008080;">-notcontains</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">$second vs. $first</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">) `
            </span><span style="color:#008080;">-and</span><span style="color:#000000;"> (</span><span style="color:#800080;">$first</span><span style="color:#000000;"> </span><span style="color:#008080;">-ne</span><span style="color:#000000;"> </span><span style="color:#800080;">$second</span><span style="color:#000000;">))
        {
            </span><span style="color:#008000;">#</span><span style="color:#008000;"> ...то добавляем матч в список.</span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#800080;">$Games</span><span style="color:#000000;"> </span><span style="color:#000000;">+=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">$first vs. $second</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
        }
    }
}
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем новый объект для генерации произвольных чисел.</span><span style="color:#008000;">
</span><span style="color:#800080;">$r</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> New</span><span style="color:#000000;">-</span><span style="color:#000000;">Object random
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Для каждого числа от (кол-во матчей) до 1...</span><span style="color:#008000;">
</span><span style="color:#000000;">(</span><span style="color:#800080;">$Games</span><span style="color:#000000;">.count)..</span><span style="color:#000000;">1</span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> ...генерируем произвольное число от 0 до (кол-во матчей) и передаем его по</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> конвейеру...</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> {</span><span style="color:#800080;">$r</span><span style="color:#000000;">.next(</span><span style="color:#000000;">0</span><span style="color:#000000;">,</span><span style="color:#800080;">$Games</span><span style="color:#000000;">.count)} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> выводим игру под номером $_ (произвольное число полученное по конвейеру) </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> дальше по конвейеру, и удаляем её из списка (чтоб не вывести второй раз)</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> {</span><span style="color:#800080;">$games</span><span style="color:#000000;">[</span><span style="color:#800080;">$_</span><span style="color:#000000;">]; </span><span style="color:#800080;">$games</span><span style="color:#000000;">.removeat(</span><span style="color:#800080;">$_</span><span style="color:#000000;">)} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем объект со свойством Game, и соответствующим значением полученным по</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> конвейеру</span><span style="color:#008000;">
</span><span style="color:#000000;">    Select </span><span style="color:#000000;">@</span><span style="color:#000000;">{name</span><span style="color:#000000;">=</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Game</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">;expression</span><span style="color:#000000;">=</span><span style="color:#000000;">{</span><span style="color:#800080;">$_</span><span style="color:#000000;">}} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Выводим на Grid View</span><span style="color:#008000;">
</span><span style="color:#000000;">    Out</span><span style="color:#000000;">-</span><span style="color:#000000;">GridView</span></div>
</pre>
</div>
<p>Варианты: <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/28/scripting-games-2008-advanced-windows-powershell-event-7.aspx">Mow</a>, <a href="http://msgoodies.blogspot.com/2008/03/2008-scripting-games-solution-7.html">Per Østergaard</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol07.mspx">Scripting Guys</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/expssol07.mspx">Scott Hanselman</a>. По поводу рандомизации элементов массива еще стоит посмотреть вот эти два моих поста: <a href="http://xaegr.wordpress.com/2008/02/27/%d0%9f%d0%b5%d1%80%d0%b5%d0%bc%d0%b5%d1%88%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%8d%d0%bb%d0%b5%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2-%d0%bc%d0%b0%d1%81%d1%81%d0%b8%d0%b2%d0%b0/#comments">1</a>, <a href="http://xaegr.wordpress.com/2008/02/29/scripting-games-advanced-powershell-event-1/">2</a> и комментарии к ним.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Advanced PowerShell - Event 6]]></title>
<link>http://xaegr.wordpress.com/2008/03/06/scripting-games-advanced-powershell-event-6/</link>
<pubDate>Thu, 06 Mar 2008 06:22:59 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/06/scripting-games-advanced-powershell-event-6/</guid>
<description><![CDATA[Ну тут ничего интересного и красивого &#8211; находим простые числа до 200 Решение честно нагуглил S]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Ну <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent6.mspx">тут</a> ничего интересного и красивого &#8211; находим простые числа до 200 <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Решение честно нагуглил <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SG6-Primes.ps1
<pre style="width:100%;">
<div><span style="color:#0000FF;">function</span><span style="color:#000000;"> Test</span><span style="color:#000000;">-</span><span style="color:#000000;">Prime (</span><span style="color:#800080;">$t</span><span style="color:#000000;">,</span><span style="color:#800080;">$prs</span><span style="color:#000000;">) {
    </span><span style="color:#800080;">$isprime</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">$true</span><span style="color:#000000;">
    </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> (</span><span style="color:#800080;">$i</span><span style="color:#000000;"> </span><span style="color:#0000FF;">in</span><span style="color:#000000;"> </span><span style="color:#000000;">2</span><span style="color:#000000;">..([math]</span><span style="color:#000000;">::</span><span style="color:#000000;">Sqrt(</span><span style="color:#800080;">$t</span><span style="color:#000000;">))) {
        </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (</span><span style="color:#800080;">$t</span><span style="color:#000000;"> </span><span style="color:#000000;">%</span><span style="color:#000000;"> </span><span style="color:#800080;">$i</span><span style="color:#000000;"> </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#000000;">0</span><span style="color:#000000;">) {
            </span><span style="color:#800080;">$isprime</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">$false</span><span style="color:#000000;">
            </span><span style="color:#0000FF;">break</span><span style="color:#000000;">
        }
    }
    </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (</span><span style="color:#800080;">$isprime</span><span style="color:#000000;">) {</span><span style="color:#800080;">$prs</span><span style="color:#000000;"> </span><span style="color:#000000;">+=</span><span style="color:#000000;"> </span><span style="color:#800080;">$t</span><span style="color:#000000;">}
    </span><span style="color:#800080;">$isprime</span><span style="color:#000000;">
}
</span><span style="color:#800080;">$Primes</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">,</span><span style="color:#000000;">2</span><span style="color:#000000;">;
</span><span style="color:#000000;">@</span><span style="color:#000000;">(</span><span style="color:#000000;">2</span><span style="color:#000000;">;</span><span style="color:#000000;">1</span><span style="color:#000000;">..</span><span style="color:#000000;">200</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> where {Test</span><span style="color:#000000;">-</span><span style="color:#000000;">prime </span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#800080;">$primes</span><span style="color:#000000;">}) </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    Select </span><span style="color:#000000;">@</span><span style="color:#000000;">{n</span><span style="color:#000000;">=</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Prime</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">;e</span><span style="color:#000000;">=</span><span style="color:#000000;">{</span><span style="color:#800080;">$_</span><span style="color:#000000;">}} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Out</span><span style="color:#000000;">-</span><span style="color:#000000;">GridView </span></div>
</pre>
</div>
<p>Другие варианты: <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/26/scripting-games-2008-advanced-windows-powershell-event-6.aspx">Mow</a>, <a href="http://msgoodies.blogspot.com/2008/02/2008-scripting-games-solution-6.html">Per Østergaard</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol06.mspx">Scripting Guys</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/expssol06.mspx">Thomas Lee</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Advanced PowerShell - Event 5]]></title>
<link>http://xaegr.wordpress.com/2008/03/05/scripting-games-advanced-powershell-event-5/</link>
<pubDate>Wed, 05 Mar 2008 07:27:21 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/05/scripting-games-advanced-powershell-event-5/</guid>
<description><![CDATA[Сооружаем скрипт для пароля по методике Scripting Guys Пароль должен быть проверен на соответствие с]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img style="border-right:0;border-top:0;border-left:0;border-bottom:0;" height="126" alt="sg5" src="http://xaegr.files.wordpress.com/2008/03/sg5.png?w=517&#038;h=126" width="517" border="0">
<p>Сооружаем скрипт для пароля по методике Scripting Guys <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Пароль должен быть проверен на соответствие следующим критериям:
<p>Make sure that the password is not an actual word.<br />Make sure that the password, minus the last letter, is not an actual word.<br />Make sure that the password, minus the first letter, is not an actual word.<br />Make sure that the password does not simply substitute 0 (zero) for the letter o.<br />Make sure that the password does not simply substitute 1 (one) for the letter l.<br />Make sure that the password is at least 10 characters long but no more than 20 characters long.<br />Make sure that the password includes at least one number (the digits 0 through 9).<br />Make sure that the password includes at least one uppercase letter.<br />Make sure that the password includes at least one lowercase letter.<br />Make sure that the password includes at least one symbol.<br />Make sure that the password does not include four (or more) lowercase letters in succession.<br />Make sure that the password does not include four (or more) uppercase letters in succession.<br />Make sure that the password does not include any duplicate characters.
<p>Подробнее <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent5.mspx">тут</a>. </p>
<p>В моём решении большая часть проверок выполняется с помощью регулярных выражений <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><!--more--></p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SG5-Password.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Объявляем строковый параметр скрипта.</span><span style="color:#008000;">
</span><span style="color:#0000FF;">param</span><span style="color:#000000;"> ([string]</span><span style="color:#800080;">$Password</span><span style="color:#000000;">)
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Стартовый рейтинг пароля.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Score</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#000000;">13</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Загружаем список слов.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Words</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Content </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">c:ScriptsWordList.txt</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Функция для подсчета количества вхождений указанного символа в слове.</span><span style="color:#008000;">
</span><span style="color:#0000FF;">function</span><span style="color:#000000;"> occs ([string]</span><span style="color:#800080;">$word</span><span style="color:#000000;">, [string]</span><span style="color:#800080;">$letter</span><span style="color:#000000;">)
{
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Просто удаляем из слова все символы кроме указанного и смотрим длину <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span><span style="color:#008000;">
</span><span style="color:#000000;">    (</span><span style="color:#800080;">$word</span><span style="color:#000000;"> </span><span style="color:#008080;">-creplace</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[^$($letter)]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">).length
}

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Оператор switch. Проверяются все условия подряд, так как break нигде не </span><span style="color:#008000;">
#</span><span style="color:#008000;"> указан. При совпадении условия - выводится сообщение и уменьшается $Score</span><span style="color:#008000;">
</span><span style="color:#0000FF;">switch</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Password</span><span style="color:#000000;">)
{
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Содержится ли пароль в массиве $Words, проверка простым оператором </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> -contains. Если содержится - устанавливаем переменную $Actual = $True, </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> чтобы уже не пытаться искать его там заменив &#34;0&#34; на &#34;o&#34; и &#34;1&#34; на &#34;l&#34;</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$Words</span><span style="color:#000000;"> </span><span style="color:#008080;">-contains</span><span style="color:#000000;"> </span><span style="color:#800080;">$_</span><span style="color:#000000;">} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Password is actual word</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">; </span><span style="color:#800080;">$Actual</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#0000FF;">$True</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Удаляем последний символ, и смотрим - содержится ли в $Words</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$Words</span><span style="color:#000000;"> </span><span style="color:#008080;">-contains</span><span style="color:#000000;"> (</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">.$</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Password minus the last letter, is actual word</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Аналогично, но удаляем первый символ.</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$Words</span><span style="color:#000000;"> </span><span style="color:#008080;">-contains</span><span style="color:#000000;"> (</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">^.</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Password minus the first letter, is actual word</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если пароль не содержится в списке слов - меняем &#34;0&#34; на &#34;o&#34; и ищем снова.</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#000000;">!</span><span style="color:#800080;">$Actual</span><span style="color:#000000;"> </span><span style="color:#008080;">-and</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Words</span><span style="color:#000000;"> </span><span style="color:#008080;">-contains</span><span style="color:#000000;"> (</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">0</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">,</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">o</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">))} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Password is actual word that does substitute 0 (zero)</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Аналогично, но меняем &#34;1&#34; на &#34;l&#34;</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#000000;">!</span><span style="color:#800080;">$Actual</span><span style="color:#000000;"> </span><span style="color:#008080;">-and</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Words</span><span style="color:#000000;"> </span><span style="color:#008080;">-contains</span><span style="color:#000000;"> (</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">1</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">,</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">l</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">))} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Password is actual word that does substitute 1 (one)</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Проверяем длину пароля</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.length </span><span style="color:#008080;">-lt</span><span style="color:#000000;"> </span><span style="color:#000000;">10</span><span style="color:#000000;"> </span><span style="color:#008080;">-or</span><span style="color:#000000;"> </span><span style="color:#800080;">$_</span><span style="color:#000000;">.length </span><span style="color:#008080;">-gt</span><span style="color:#000000;"> </span><span style="color:#000000;">20</span><span style="color:#000000;">} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Password length is less than 10 or more than 20 characters long</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Проверяем содержатся ли в пароле цифры (группа d в регулярных выражениях</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> означает любую цифру).</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-notmatch</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">d</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Password does not include numbers</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Проверяем содержатся ли заглавные буквы. Группа [A-Z] указывает любой</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> символ из диапазона A-Z. -Cnotmatch в отличии от -notmatch проводит </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> сравнение учитывая регистр символов.</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-cnotmatch</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[A-Z]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">No uppercase letters in password</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Аналогично с маленькими буквами</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-cnotmatch</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[a-z]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">No lowercase letters in password</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Смотрим есть ли в пароле что то кроме букв и цифр, короче говоря символы.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> ^ в начале группы означает &#34;все кроме&#34;, w - любая буква, и d - цифра</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-notmatch</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[^wd]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Password does not include symbols</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Проверяем содержатся ли 4 маленькие буквы подряд. {4,} после группы </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> указывает что для совпадения элемент должен повторится 4 и более раз. </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Например &#34;[z]{2,5}&#34; будет означать &#34;от 2 до 5 букв z&#34;. Сравнение опять </span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> чувствительно к регистру символов потому что используется -Cmatch, а не</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> просто -match</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-cmatch</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[a-z]{4,}</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Four consecutive lowercase letters in password</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Аналогично с заглавными буквами.</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#008080;">-cmatch</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[A-Z]{4,}</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">} {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Four consecutive uppercase letters in password</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Для каждой буквы от &#34;a&#34; до &#34;z&#34; проверяем количество её вхождений в пароль.</span><span style="color:#008000;">
</span><span style="color:#000000;">    {</span><span style="color:#800080;">$w</span><span style="color:#000000;">=</span><span style="color:#800080;">$_</span><span style="color:#000000;">; [bool](([char]</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">a</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">..[char]</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">z</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;%</span><span style="color:#000000;">{occs </span><span style="color:#800080;">$w</span><span style="color:#000000;"> ([char]</span><span style="color:#800080;">$_</span><span style="color:#000000;">)}) </span><span style="color:#008080;">-gt</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">) </span><span style="color:#008080;">-or</span><span style="color:#000000;"> [bool](([char]</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">A</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">..[char]</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Z</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;%</span><span style="color:#000000;">{occs </span><span style="color:#800080;">$w</span><span style="color:#000000;"> ([char]</span><span style="color:#800080;">$_</span><span style="color:#000000;">)}) </span><span style="color:#008080;">-gt</span><span style="color:#000000;"> </span><span style="color:#000000;">1</span><span style="color:#000000;">)}
        {</span><span style="color:#800080;">$Score</span><span style="color:#000000;">--</span><span style="color:#000000;">; Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Password include duplicate characters</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
}
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Выводим результат</span><span style="color:#008000;">
</span><span style="color:#0000FF;">if</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Score</span><span style="color:#000000;"> </span><span style="color:#008080;">-le</span><span style="color:#000000;"> </span><span style="color:#000000;">6</span><span style="color:#000000;">) {</span><span style="color:#800080;">$Rating</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">weak</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
</span><span style="color:#0000FF;">elseif</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Score</span><span style="color:#000000;"> </span><span style="color:#008080;">-ge</span><span style="color:#000000;"> </span><span style="color:#000000;">11</span><span style="color:#000000;">) {</span><span style="color:#800080;">$Rating</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">strong</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
</span><span style="color:#0000FF;">else</span><span style="color:#000000;"> {</span><span style="color:#800080;">$Rating</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">moderately-strong</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">}
Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">`nA password score of $Score indicates a $Rating password</span><span style="color:#800000;">&#34;</span></div>
</pre>
</div>
<p>Варианты других авторов: <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/26/scripting-games-2008-advanced-windows-powershell-event-5.aspx">MoW</a>, <a href="http://msgoodies.blogspot.com/2008/02/2008-scripting-games-solution-5.html">Per Østergaard</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol05.mspx">Scripting Guys</a> (У всех разные решения проверки на повторный символ, и все лучше чем у меня <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Хорошо что мне вообще засчитали &#8211; я только буквы проверял <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  ), <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/expssol05.mspx">Kirk Munro</a> (многабукав, ниасилил).</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Creating an Array of PowerShell Custom Objects]]></title>
<link>http://getpowershell.wordpress.com/2008/03/04/creating-an-array-of-powershell-custom-objects/</link>
<pubDate>Tue, 04 Mar 2008 15:50:28 +0000</pubDate>
<dc:creator>Andy Schneider</dc:creator>
<guid>http://getpowershell.wordpress.com/2008/03/04/creating-an-array-of-powershell-custom-objects/</guid>
<description><![CDATA[During the Scripting Games I found myself creating a lot of custom objects with properties that I co]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>During the Scripting Games I found myself creating a lot of custom objects with properties that I could use to sort , select, take averages of, and a number of other cool things. Getting results into a Powershell object can make life a lot easier for a number of reasons.</p>
<p>There was one little piece I was missing. Not only did I want to create a single object, quite often I would want to put all the objects I created into a collection of objects. Did you know you can add collections of like objects to each other ?</p>
<div style="border-right:gray 1px solid;border-top:gray 1px solid;font-size:8pt;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span> PS 13 &#62;  $a = get-<span style="color:#0000ff;">process</span></pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   2:</span> PS 14 &#62;  $a.count</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   3:</span> 66</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   4:</span> PS 15 &#62;  $b = get-<span style="color:#0000ff;">process</span></pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   5:</span> PS 16 &#62;  $c = $a + $b</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   6:</span> PS 17 &#62;  $c.count</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   7:</span> 131</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   8:</span> PS 18 &#62;</pre>
</div>
</div>
<p>The code above shows that I can add two collections of process objects together. Very cool.</p>
<p>So I tried doing this in the scripting games and came across a problem. For instance, in Event 3 we needed to tally up a bunch of votes. So what I really needed was to create a bunch of $vote objects and put them all together in a collection called $votes</p>
<p>Here&#8217;s what I came up with at first.</p>
<p>By the way, when I create PS Custom Objects I cheat and use the &#8220;&#8221; &#124; Select-Object prop1, prop2 nomenclature. My easier than using new-object followed by a bunch of add-member commands.</p>
<div style="border-right:gray 1px solid;border-top:gray 1px solid;font-size:8pt;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span> $votes = <span style="color:#006080;">""</span> &#124; Select-Object v1,v2,v3,v4</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   2:</span> <span style="color:#0000ff;">foreach</span> ($v <span style="color:#0000ff;">in</span> Get-Content votes.txt)</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   3:</span>     {    </pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   4:</span>         $vote = <span style="color:#006080;">""</span> &#124; Select-Object v1,v2,v3,v4;</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   5:</span>         $vote.v1,$vote.v2,$vote.v3,$vote.v4 = $v.split(<span style="color:#006080;">","</span>)</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   6:</span>         $votes += $vote</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   7:</span>     } </pre>
</div>
</div>
<p>Looks nice and shiny until you run it <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I get the following error:</p>
<p>Method invocation failed because [System.Management.Automation.PSObject] doesn&#8217;t contain a method named &#8216;op_Addition&#8217;.</p>
<p>Not so shiny</p>
<p>The trick is that we $votes needs to be a collection of $vote objects, not another object identical to $vote.</p>
<p>So we instantiate $votes with a cast to [array] and life is good.</p>
<div style="border-right:gray 1px solid;border-top:gray 1px solid;font-size:8pt;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span> $votes = @()</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   2:</span> <span style="color:#0000ff;">foreach</span> ($v <span style="color:#0000ff;">in</span> Get-Content votes.txt)</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   3:</span>     {    </pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   4:</span>         $vote = <span style="color:#006080;">""</span> &#124; Select-Object v1,v2,v3,v4;</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   5:</span>         $vote.v1,$vote.v2,$vote.v3,$vote.v4 = $v.split(<span style="color:#006080;">","</span>)</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   6:</span>         $votes = $votes + $vote</pre>
</p>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   7:</span>     } </pre>
</div>
</div>
<p>A quick update, thanks to <a href="http://powershellers.blogspot.com">Aleksandar</a>. We should instantiate $votes as $votes = @(). I have updated the example above. </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Advanced PowerShell - Event 4]]></title>
<link>http://xaegr.wordpress.com/2008/03/04/scripting-games-advanced-powershell-event-4/</link>
<pubDate>Tue, 04 Mar 2008 12:50:28 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/04/scripting-games-advanced-powershell-event-4/</guid>
<description><![CDATA[На этот раз надо было нарисовать скриптом страничку календаря. Я не стал заморачиваться с определени]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://xaegr.files.wordpress.com/2008/03/calendar.jpg"><img style="border-width:0;" height="145" alt="calendar" src="http://xaegr.files.wordpress.com/2008/03/calendar-thumb.jpg?w=179&#038;h=145" width="179" border="0"></a></p>
<p><a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent4.mspx">На этот раз</a> надо было нарисовать скриптом страничку календаря. Я не стал заморачиваться с определением того с какого дня в системе начинается неделя &#8211; просто лень было <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Кстати это не сложно <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>(Get-Culture).DateTimeFormat.FirstDayOfWeek</p>
<p>Ну и вот что получилось:</p>
<p>&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SG4-Calendar.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Запрашиваем месяц в формате месяц/год и присвиваем её переменной в виде </span><span style="color:#008000;">
#</span><span style="color:#008000;"> массива, разделив по &#34;/&#34;. То есть первый элемент это месяц, второй - год.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Data</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> (Read</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Enter a month</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">) </span><span style="color:#000000;">-</span><span style="color:#000000;">split </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">/</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> В переменную $FirstDay помещаем первый день месяца.</span><span style="color:#008000;">
</span><span style="color:#800080;">$FirstDay</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Date </span><span style="color:#000000;">-</span><span style="color:#000000;">Year </span><span style="color:#800080;">$Data</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">] </span><span style="color:#000000;">-</span><span style="color:#000000;">Month </span><span style="color:#800080;">$Data</span><span style="color:#000000;">[</span><span style="color:#000000;">0</span><span style="color:#000000;">] </span><span style="color:#000000;">-</span><span style="color:#000000;">Day </span><span style="color:#000000;">1</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> С помощью функции DaysInMonth класса DateTime, получаем количество дней в </span><span style="color:#008000;">
#</span><span style="color:#008000;"> месяце.</span><span style="color:#008000;">
</span><span style="color:#800080;">$TotalDays</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> [datetime]</span><span style="color:#000000;">::</span><span style="color:#000000;">DaysInMonth(</span><span style="color:#800080;">$Data</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">],</span><span style="color:#800080;">$Data</span><span style="color:#000000;">[</span><span style="color:#000000;">0</span><span style="color:#000000;">])
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Делаем отступ в одну строчку для красоты <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span><span style="color:#008000;">
</span><span style="color:#000000;">Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;&#34;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Пишем название месяца и год.</span><span style="color:#008000;">
</span><span style="color:#000000;">Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host (Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Date </span><span style="color:#800080;">$FirstDay</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Format </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">MMMM yyyy</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">)
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Пишем заголовки столбцов.</span><span style="color:#008000;">
</span><span style="color:#000000;">Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">`nSun`tMon`tTue`tWed`tThu`tFri`tSat</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Делаем отступ знаками табуляции (&#34;`t&#34;) в количестве равном дню недели первого </span><span style="color:#008000;">
#</span><span style="color:#008000;"> дня месяца. Рисуем число 1.</span><span style="color:#008000;">
</span><span style="color:#000000;">Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host (</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">`t</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">*</span><span style="color:#000000;">([int](</span><span style="color:#800080;">$FirstDay</span><span style="color:#000000;">.DayOfWeek)) </span><span style="color:#000000;">+</span><span style="color:#000000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">1`t</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">) </span><span style="color:#000000;">-</span><span style="color:#000000;">NoNewline
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Если первый день месяца является одновременно последним днём недели - то </span><span style="color:#008000;">
#</span><span style="color:#008000;"> переходим на новую строку.</span><span style="color:#008000;">
</span><span style="color:#0000FF;">if</span><span style="color:#000000;"> ([int]</span><span style="color:#800080;">$FirstDay</span><span style="color:#000000;">.DayOfWeek </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#000000;">6</span><span style="color:#000000;">) {Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;&#34;</span><span style="color:#000000;">}
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Для каждого числа от 2 до $TotalDays включительно, где $_ - текущее число...</span><span style="color:#008000;">
</span><span style="color:#000000;">2</span><span style="color:#000000;">..</span><span style="color:#800080;">$TotalDays</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> </span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> {
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> ...выводим на экран текущее число и знак табуляции.</span><span style="color:#008000;">
</span><span style="color:#000000;">    Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">$_`t</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">NoNewline
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Если это был последний день недели, то переходим на новую строку.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000FF;">if</span><span style="color:#000000;"> ([int](get</span><span style="color:#000000;">-</span><span style="color:#000000;">date </span><span style="color:#800080;">$FirstDay</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Day </span><span style="color:#800080;">$_</span><span style="color:#000000;">).DayOfWeek </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#000000;">6</span><span style="color:#000000;">) {Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;&#34;</span><span style="color:#000000;">}
}
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Финальный отступ. &#34;`n&#34; - символ новой строки.</span><span style="color:#008000;">
</span><span style="color:#000000;">Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">`n</span><span style="color:#800000;">&#34;</span></div>
</pre>
</div>
<p><img style="border-width:0;" height="184" alt="sg4" src="http://xaegr.files.wordpress.com/2008/03/sg4.png?w=422&#038;h=184" width="422" border="0"> </p>
<p>Эх&#8230; Надо было еще названия дней недели выводить местные&#8230;</p>
<p>(Get-Culture).DateTimeFormat.AbbreviatedDayNames</p>
<p>Как обычно еще варианты: <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/23/scripting-games-2008-advanced-windows-powershell-event-4.aspx">MoW</a>, <a href="http://msgoodies.blogspot.com/2008/02/2008-scripting-games-solution-4.html">Per Østergaard</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol04.mspx">Scripting Guys</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/expssol04.mspx">Ed Wilson</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Advanced PowerShell - Event 3]]></title>
<link>http://xaegr.wordpress.com/2008/03/03/scripting-games-advanced-powershell-event-3/</link>
<pubDate>Mon, 03 Mar 2008 13:30:20 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/03/scripting-games-advanced-powershell-event-3/</guid>
<description><![CDATA[В этой задачке пришлось расчитывать результаты &#8220;Instant runoff&#8221; выборов. Решение опять д]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img style="border-width:0;" height="38" alt="sg3" src="http://xaegr.files.wordpress.com/2008/03/sg3.png?w=520&#038;h=38" width="520" border="0"></p>
<p>В этой <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent3.mspx">задачке</a> пришлось расчитывать результаты &#8220;Instant runoff&#8221; выборов. Решение опять далеко не красивое, хоть и работает <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">sg3-Votes.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Помещаем содержимое файла в массив $Votes</span><span style="color:#008000;">
</span><span style="color:#800080;">$Votes</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Content </span><span style="color:#800000;">"</span><span style="color:#800000;">c:scriptsvotes.txt</span><span style="color:#800000;">"</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Начинаем цикл и продолжаем до тех пор пока не определится победитель. </span><span style="color:#008000;">
#</span><span style="color:#008000;"> См. while.</span><span style="color:#008000;">
</span><span style="color:#0000ff;">do</span><span style="color:#000000;"> {
    </span><span style="color:#800080;">$Results</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Votes</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Каждую строчку из $Votes...</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#0000ff;">foreach</span><span style="color:#000000;"> {
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Разделяем в массив по запятым</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">split </span><span style="color:#800000;">"</span><span style="color:#800000;">,</span><span style="color:#800000;">"</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Выбираем первый элемент этого массива (первый столбец)</span><span style="color:#008000;">
</span><span style="color:#000000;">        select </span><span style="color:#000000;">-</span><span style="color:#000000;">First </span><span style="color:#000000;">1</span><span style="color:#000000;">
    } </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Группируем...</span><span style="color:#008000;">
</span><span style="color:#000000;">    group </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Выбирем из каждой группы столбцы с названием группы (именем кандидата) и</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> count (количество элементов в группе.</span><span style="color:#008000;">
</span><span style="color:#000000;">    select name, count </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Сортируем по количеству элементов, в обратном порядке.</span><span style="color:#008000;">
</span><span style="color:#000000;">    sort count </span><span style="color:#000000;">-</span><span style="color:#000000;">desc
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Вычисляем проигравшего ($Looser) взяв последний элемент массива $Results</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Looser</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Results</span><span style="color:#000000;">[</span><span style="color:#000000;">-</span><span style="color:#000000;">1</span><span style="color:#000000;">].Name
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Убираем из переменной $Votes все упоминания о проигравшем - в дальнейших</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> этапах выборов он уже не участвует.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Votes</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Votes</span><span style="color:#000000;"> </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">$Looser,</span><span style="color:#800000;">"</span><span style="color:#000000;"> </span><span style="color:#008080;">-replace</span><span style="color:#000000;"> </span><span style="color:#800000;">"</span><span style="color:#800000;">,$Looser$</span><span style="color:#800000;">"</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Проверяем набрал ли победитель больше 50% и если не набрал - проводим </span><span style="color:#008000;">
#</span><span style="color:#008000;"> очередной этап.</span><span style="color:#008000;">
</span><span style="color:#000000;">} </span><span style="color:#0000ff;">while</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Results</span><span style="color:#000000;">[</span><span style="color:#000000;">0</span><span style="color:#000000;">].count </span><span style="color:#008080;">-le</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Results</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">..(</span><span style="color:#800080;">$Results</span><span style="color:#000000;">.count</span><span style="color:#000000;">-</span><span style="color:#000000;">1</span><span style="color:#000000;">)] </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Measure</span><span style="color:#000000;">-</span><span style="color:#000000;">Object count </span><span style="color:#000000;">-</span><span style="color:#000000;">sum).sum)

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Присваиваем переменной $Winner имя победителя.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Winner</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Results</span><span style="color:#000000;">[</span><span style="color:#000000;">0</span><span style="color:#000000;">].name
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Вычисляем итоговый результат победителя.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Score</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Results</span><span style="color:#000000;">[</span><span style="color:#000000;">0</span><span style="color:#000000;">].Count </span><span style="color:#000000;">/</span><span style="color:#000000;"> ((</span><span style="color:#800080;">$Results</span><span style="color:#000000;">[</span><span style="color:#000000;">0</span><span style="color:#000000;">].Count </span><span style="color:#000000;">+</span><span style="color:#000000;"> </span><span style="color:#800080;">$Results</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">].Count) </span><span style="color:#000000;">/</span><span style="color:#000000;"> </span><span style="color:#000000;">100</span><span style="color:#000000;">)
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Пишем на экран.</span><span style="color:#008000;">
</span><span style="color:#000000;">Write</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">"</span><span style="color:#800000;">The winner is $Winner with $Score% of the vote.</span><span style="color:#800000;">"</span><span style="color:#000000;">
</span></div>
</pre>
</div>
<p>И другие варианты: <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/23/scripting-games-2008-advanced-windows-powershell-event-3.aspx">Mow</a> (красота&#8230; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ), <a href="http://msgoodies.blogspot.com/2008/02/2008-scripting-games-solution-3.html">Per Østergaard</a>,&#160; <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol03.mspx">Scripting Guys</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/expssol03.mspx">Don Jones</a>.</p>
<p>PS: А еще сегодня, в 19 по Москве, будет очень интересный вебкаст <a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032369389">Using Virtual Machine Manager and Windows PowerShell to Deploy HP Windows Server 2008 Academy Labs (Level 300)</a>.</p>
<p>PPS: Сорри за дезу, вебкаст завтра&#8230; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Advanced PowerShell - Event 2]]></title>
<link>http://xaegr.wordpress.com/2008/03/03/scripting-games-advanced-powershell-event-2/</link>
<pubDate>Mon, 03 Mar 2008 05:50:26 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/03/03/scripting-games-advanced-powershell-event-2/</guid>
<description><![CDATA[Очередной скрипт с Scripting Games. Задачка Skating on Thin Ice: &nbsp; # Читаем содержимое файла sk]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Очередной скрипт с <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/default.mspx">Scripting Games</a>. Задачка <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent2.mspx">Skating on Thin Ice</a>:</p>
<p><img src="http://windowspowershell.ru/public/out-gridview.png">&#160;</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Читаем содержимое файла skaters.txt</span><span style="color:#008000;">
</span><span style="color:#800080;">$Table</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Content </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">c:scriptsskaters.txt</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Для каждой строки...</span><span style="color:#008000;">
</span><span style="color:#0000FF;">foreach</span><span style="color:#000000;"> {
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> ... создаем массив $Arr из строчки разделив её по запятым</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Arr</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$_</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">split </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">,</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Имя скейтера (первый элемент массива) помещаем в переменную $Name</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Name</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Arr</span><span style="color:#000000;">[</span><span style="color:#000000;">0</span><span style="color:#000000;">]
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Очки (элементы массива начиная со второго) помещаем в переменную $Scores</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> предварительно отсортировав.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Scores</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Arr</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">..(</span><span style="color:#800080;">$Arr</span><span style="color:#000000;">.Count</span><span style="color:#000000;">-</span><span style="color:#000000;">1</span><span style="color:#000000;">)] </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Sort
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Теперь убираем самый низки и самый высокий результаты (просто оставив в</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> массиве $Scores элементы начиная со второго по предпоследний</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$Scores</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> </span><span style="color:#800080;">$Scores</span><span style="color:#000000;">[</span><span style="color:#000000;">1</span><span style="color:#000000;">..(</span><span style="color:#800080;">$Scores</span><span style="color:#000000;">.count</span><span style="color:#000000;">-</span><span style="color:#000000;">2</span><span style="color:#000000;">)]
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Вычисляем средний результат поделив сумму элементов на их количество.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$FinalScore</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> (</span><span style="color:#800080;">$Scores</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Measure</span><span style="color:#000000;">-</span><span style="color:#000000;">Object </span><span style="color:#000000;">-</span><span style="color:#000000;">sum).Sum </span><span style="color:#000000;">/</span><span style="color:#000000;"> </span><span style="color:#800080;">$Scores</span><span style="color:#000000;">.Count
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем новый объект</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$obj</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> New</span><span style="color:#000000;">-</span><span style="color:#000000;">Object </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">PSObject</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Добавляем к нему свойства Name и Score</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$obj</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Add</span><span style="color:#000000;">-</span><span style="color:#000000;">Member </span><span style="color:#000000;">-</span><span style="color:#000000;">MemberType </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">NoteProperty</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Name </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Name</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Value </span><span style="color:#800080;">$Name</span><span style="color:#000000;">
    </span><span style="color:#800080;">$obj</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Add</span><span style="color:#000000;">-</span><span style="color:#000000;">Member </span><span style="color:#000000;">-</span><span style="color:#000000;">MemberType </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">NoteProperty</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Name </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Score</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">-</span><span style="color:#000000;">Value </span><span style="color:#800080;">$FinalScore</span><span style="color:#000000;">
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Отправляем объект дальше по конвейеру</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#800080;">$obj</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Сортируем полученный массив объектов по свойству Score в обратном порядке</span><span style="color:#008000;">
</span><span style="color:#000000;">} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Sort</span><span style="color:#000000;">-</span><span style="color:#000000;">Object Score </span><span style="color:#000000;">-</span><span style="color:#000000;">Descending
</span><span style="color:#008000;">#</span><span style="color:#008000;"> В результате все объекты помещаются в переменную $Table (см. первую строчку)</span><span style="color:#008000;">
</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Создаем массив медалей</span><span style="color:#008000;">
</span><span style="color:#800080;">$Medals</span><span style="color:#000000;">=</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Gold medal</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">, </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Silver medal</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">, </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Bronze medal</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Объявляем глобальную переменную $i (глобальную потому что будем её изменять</span><span style="color:#008000;">
#</span><span style="color:#008000;"> внутри других скриптблоков. Не очень красиво, но в момент написания скрипта</span><span style="color:#008000;">
#</span><span style="color:#008000;"> придумалось именно так <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span><span style="color:#008000;">
</span><span style="color:#800080;">$global:i</span><span style="color:#000000;">=</span><span style="color:#000000;">0</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Берем первые 3 элемента массива...</span><span style="color:#008000;">
</span><span style="color:#800080;">$Table</span><span style="color:#000000;">[</span><span style="color:#000000;">0</span><span style="color:#000000;">..</span><span style="color:#000000;">2</span><span style="color:#000000;">]</span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Добавляем новое свойство Medal и оставляем уже имеющиеся Name и Score</span><span style="color:#008000;">
</span><span style="color:#000000;">select </span><span style="color:#000000;">@</span><span style="color:#000000;">{n</span><span style="color:#000000;">=</span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Medal</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">;e</span><span style="color:#000000;">=</span><span style="color:#000000;">{</span><span style="color:#800080;">$global:i</span><span style="color:#000000;">++</span><span style="color:#000000;">;</span><span style="color:#800080;">$medals</span><span style="color:#000000;">[</span><span style="color:#800080;">$i</span><span style="color:#000000;">-</span><span style="color:#000000;">1</span><span style="color:#000000;">]}}, Name, Score </span><span style="color:#000000;">&#124;</span><span style="color:#000000;">
</span><span style="color:#008000;">#</span><span style="color:#008000;"> Показываем результат...</span><span style="color:#008000;">
</span><span style="color:#000000;">Out</span><span style="color:#000000;">-</span><span style="color:#000000;">GridView </span></div>
</pre>
</div>
<p>Скрипт получился очень некрасивым, особенно вторая часть <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Всё от того что Out-GridView я решил приделать в последний момент <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Кстати, командлет Out-GridView и операторы -Split и -Join, которые встречаются во многих моих скриптах для Scripting Games, это прелести PowerShell 2.0 <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>PS: Постараюсь выкладывать минимум по одному скрипту с SG в рабочий день, или чаще если получится <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>UPD: Забыл дописать другие решения: <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/20/advanced-windows-powershell-event-2.aspx">Mow</a>, <a href="http://msgoodies.blogspot.com/2008/02/2008-scripting-games-solution-2.html">Per Østergaard</a>, <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol02.mspx">Scripting Guys</a> и <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/expssol02.mspx">Ben Pearce</a>. Очень рекомендую посмотреть <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/20/advanced-windows-powershell-event-2.aspx">решение Mow</a>&#8216;а <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games: Advanced PowerShell - Event 1]]></title>
<link>http://xaegr.wordpress.com/2008/02/29/scripting-games-advanced-powershell-event-1/</link>
<pubDate>Fri, 29 Feb 2008 06:42:28 +0000</pubDate>
<dc:creator>Xaegr</dc:creator>
<guid>http://xaegr.wordpress.com/2008/02/29/scripting-games-advanced-powershell-event-1/</guid>
<description><![CDATA[Итак начинаю публиковать свои решения задачек с Scripting Games. Поздновато, но лучше чем через меся]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Итак начинаю публиковать свои решения задачек с <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/default.mspx">Scripting Games</a>. Поздновато, но лучше чем через месяц <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Текст не точно соответствует отправленному &#8211; я буду добавлять комментарии, и возможно какие то косметические изменения. Например по возможности разносить длинные конвейеры на несколько строк (просто добавляя переносов), или вместо псевдонимов писать полные команды.</p>
<p>Итак, первая задачка <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a title="Event 1- Could I Get Your Phone Number-" href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent1.mspx">Event 1- Could I Get Your Phone Number?</a></p>
<p><!--more--></p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">SG1-PhoneNumber.ps1
<pre style="width:100%;">
<div><span style="color:#008000;">#</span><span style="color:#008000;"> Функция для вычисления номера соответствующего слову.</span><span style="color:#008000;">
</span><span style="color:#0000FF;">function</span><span style="color:#000000;"> WordToNumber ([string]</span><span style="color:#800080;">$Word</span><span style="color:#000000;">)
{
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Блок switch заключен в $() для того чтобы к его результатам (массиву</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> символов сразу применить оператор -join.</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#000000;">$</span><span style="color:#000000;">(
        </span><span style="color:#008000;">#</span><span style="color:#008000;"> Ключ -regex указывает что следует применять сравнение по регулярным</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#008000;">#</span><span style="color:#008000;"> выражениям. В () помещается слово ($Word) преобразованное в массив </span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#008000;">#</span><span style="color:#008000;"> символов ([char[]]). Switch отработает для каждого символа отдельно.</span><span style="color:#008000;">
</span><span style="color:#000000;">        </span><span style="color:#0000FF;">switch</span><span style="color:#000000;"> </span><span style="color:#008080;">-regex</span><span style="color:#000000;"> ([char[]]</span><span style="color:#800080;">$Word</span><span style="color:#000000;">)
        {
            </span><span style="color:#008000;">#</span><span style="color:#008000;"> При совпадении символа с одним из регулярных выражений </span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#008000;">#</span><span style="color:#008000;"> возвращается соответствующее число.</span><span style="color:#008000;">
</span><span style="color:#000000;">            </span><span style="color:#800000;">&#34;</span><span style="color:#800000;"> </span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#000000;">1</span><span style="color:#000000;">}
            </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[abc]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#000000;">2</span><span style="color:#000000;">}
            </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[def]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#000000;">3</span><span style="color:#000000;">}
            </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[ghi]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#000000;">4</span><span style="color:#000000;">}
            </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[jkl]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#000000;">5</span><span style="color:#000000;">}
            </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[mno]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#000000;">6</span><span style="color:#000000;">}
            </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[pqrs]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#000000;">7</span><span style="color:#000000;">}
            </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[tuv]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#000000;">8</span><span style="color:#000000;">}
            </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">[wxyz]</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#000000;">9</span><span style="color:#000000;">}
            </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">+</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> {</span><span style="color:#000000;">0</span><span style="color:#000000;">}
        }
    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Оператор -join (PowerShell v2.0) объединяет возвращенный массив символов в</span><span style="color:#008000;">
</span><span style="color:#000000;">    </span><span style="color:#008000;">#</span><span style="color:#008000;"> одну строку. В качестве второго аргумента указывается разделитель.</span><span style="color:#008000;">
</span><span style="color:#000000;">    ) </span><span style="color:#000000;">-</span><span style="color:#000000;">join </span><span style="color:#800000;">&#34;&#34;</span><span style="color:#000000;">
}

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Запрашиваем телефонный номер и помещаем его в переменную $Number</span><span style="color:#008000;">
</span><span style="color:#800080;">$Number</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> Read</span><span style="color:#000000;">-</span><span style="color:#000000;">Host </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">Please enter a phone number</span><span style="color:#800000;">&#34;</span><span style="color:#000000;">

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Получаем все строки файла wordlist.txt, отбираем только те длинна которых</span><span style="color:#008000;">
#</span><span style="color:#008000;"> равна 7, и результат помещаем в переменную $Words</span><span style="color:#008000;">
</span><span style="color:#800080;">$Words</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> Get</span><span style="color:#000000;">-</span><span style="color:#000000;">Content </span><span style="color:#800000;">&#34;</span><span style="color:#800000;">C:scriptswordlist.txt</span><span style="color:#800000;">&#34;</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> where {</span><span style="color:#800080;">$_</span><span style="color:#000000;">.length </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#000000;">7</span><span style="color:#000000;">}

</span><span style="color:#008000;">#</span><span style="color:#008000;"> Отбираем только те слова из списка, которые при преобразовании в номер с</span><span style="color:#008000;">
#</span><span style="color:#008000;"> помощью функции WordToNumber равны переменной $Number. В случае если таких </span><span style="color:#008000;">
#</span><span style="color:#008000;"> будет несколько Select-Object -First 1 оставит только одно первое совпадение.</span><span style="color:#008000;">
</span><span style="color:#800080;">$Words</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Where</span><span style="color:#000000;">-</span><span style="color:#000000;">Object {(WordToNumber </span><span style="color:#800080;">$_</span><span style="color:#000000;">) </span><span style="color:#008080;">-eq</span><span style="color:#000000;"> </span><span style="color:#800080;">$Number</span><span style="color:#000000;">} </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Select</span><span style="color:#000000;">-</span><span style="color:#000000;">Object </span><span style="color:#000000;">-</span><span style="color:#000000;">First </span><span style="color:#000000;">1</span><span style="color:#000000;">

</span></div>
</pre>
</div>
<p>Не самый лучший в плане производительности, но с данным списком слов за пару секунд справился <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Еще несколько интересных вариантов &#8211; <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/20/scripting-games-2008-advanced-windows-powershell-event-1.aspx">MoW</a>, <a href="http://msgoodies.blogspot.com/2008/02/2008-scripting-games-solution-1.html">Per Østergaard</a>, <a href="http://thepowershellguy.com/blogs/gaurhoth/archive/2008/02/20/games-2008-advanced-event-1-solution.aspx">Gaurhoth</a>. И пара &#8220;официальных&#8221; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  От <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/apssol01.mspx">Scripting Guys</a> и <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/solutions08/expssol01.mspx">Richard Siddaway</a>.</p>
<p>&#160;</p>
<p>PS: В продолжение <a href="http://xaegr.wordpress.com/2008/02/27/%d0%9f%d0%b5%d1%80%d0%b5%d0%bc%d0%b5%d1%88%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%8d%d0%bb%d0%b5%d0%bc%d0%b5%d0%bd%d1%82%d0%be%d0%b2-%d0%bc%d0%b0%d1%81%d1%81%d0%b8%d0%b2%d0%b0/">этого</a> поста, еще одно <a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/28/powershell-out-random-function.aspx#comments">решение</a> для тасования массива &#8211; от <a href="http://thepowershellguy.com/user/Profile.aspx?UserID=2321">Bruno Gomes</a>.</p>
<div class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">
<pre style="width:100%;">
<div><span style="color:#0000FF;">function</span><span style="color:#000000;"> Out</span><span style="color:#000000;">-</span><span style="color:#000000;">Random {
    </span><span style="color:#800080;">$r</span><span style="color:#000000;"> </span><span style="color:#000000;">=</span><span style="color:#000000;"> New</span><span style="color:#000000;">-</span><span style="color:#000000;">Object random
    </span><span style="color:#800080;">$input</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> sort {</span><span style="color:#800080;">$r</span><span style="color:#000000;">.next()}
}
</span><span style="color:#000000;">1</span><span style="color:#000000;">..</span><span style="color:#000000;">10</span><span style="color:#000000;"> </span><span style="color:#000000;">&#124;</span><span style="color:#000000;"> Out</span><span style="color:#000000;">-</span><span style="color:#000000;">Random</span></div>
</pre>
</div>
<p>IMHO это самый красивый вариант <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games Event 6  Select-Prime]]></title>
<link>http://getpowershell.wordpress.com/2008/02/26/scripting-games-event-6-select-prime/</link>
<pubDate>Wed, 27 Feb 2008 04:08:01 +0000</pubDate>
<dc:creator>Andy Schneider</dc:creator>
<guid>http://getpowershell.wordpress.com/2008/02/26/scripting-games-event-6-select-prime/</guid>
<description><![CDATA[Event six was a classic programming math problem. Find all the prime numbers in a given range. For t]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Event six was a classic programming math problem. Find all the prime numbers in a given range. For this particular problem, the range was between 1 and 200.</p>
<p>Here&#8217;s my answer</p>
<div style="border-right:gray 1px solid;border-top:gray 1px solid;font-size:8pt;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span> <span style="color:#0000ff;">filter</span> select-prime </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   2:</span> { </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   3:</span>     <span style="color:#0000ff;">if</span> ($_ <span style="color:#cc6633;">-eq</span> 1) {<span style="color:#0000ff;">return</span> $null}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   4:</span>     <span style="color:#0000ff;">for</span> ($i=2;$i <span style="color:#cc6633;">-le</span> ([int][Math]::Sqrt($_));$i++) </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   5:</span>         { </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   6:</span>         <span style="color:#0000ff;">if</span> ($_ % $i <span style="color:#cc6633;">-eq</span> 0 ) {<span style="color:#0000ff;">return</span>}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   7:</span>         }</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   8:</span>     $_</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   9:</span> } </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  10:</span> 1..200 &#124; select-prime</pre>
</div>
</div>
<p>It turns out that in order to find if a prime number we can use the <a href="http://en.wikipedia.org/wiki/Modulus_operator">modulus operator</a>. This math operator simply returns the remainder when one number is divided by another</p>
<p>If a number n % x&#160; = 0 where x is not 1 or n, then the number will not be prime.</p>
<div style="border-right:gray 1px solid;border-top:gray 1px solid;font-size:8pt;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span> PS U:&#62; 6 % 2</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   2:</span> 0</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   3:</span> PS U:&#62; 5 % 3</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   4:</span> 2</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   5:</span> PS U:&#62; 5 % 2.5</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   6:</span> 0</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   7:</span> PS U:&#62; 9 % 2</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   8:</span> 1</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   9:</span> PS U:&#62; 9 % 3</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  10:</span> 0</pre>
</div>
</div>
<p>So this will work if we just went from 2 to N. But it turns out that is way more work than necessary. <a href="http://en.wikipedia.org/wiki/Prime_number">We only need to go up to the Square Root of N</a> and we can call it prime. </p>
<p>I really thought I was being super cool and iterated up the square root of the number. Turns out the calls into .NET to calculate the square root were to costly to make my efficiency efficient.</p>
<div style="border-right:gray 1px solid;border-top:gray 1px solid;font-size:8pt;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span> PS C:usersandysDesktop&#62; cat C:usersandysDesktopprimes.ps1</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   2:</span> <span style="color:#0000ff;">filter</span> select-primeQuickly</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   3:</span> {</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   4:</span>         <span style="color:#0000ff;">if</span> ($_ <span style="color:#cc6633;">-eq</span> 1) {<span style="color:#0000ff;">return</span> $null}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   5:</span>         <span style="color:#0000ff;">for</span> ($i=2;$i <span style="color:#cc6633;">-le</span> ([int][Math]::Sqrt($_));$i++)</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   6:</span>                 {</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   7:</span>                 <span style="color:#0000ff;">if</span> ($_ % $i <span style="color:#cc6633;">-eq</span> 0 ) {<span style="color:#0000ff;">return</span>}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   8:</span>                 }</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   9:</span>         $_</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  10:</span> }</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  11:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  12:</span> <span style="color:#0000ff;">filter</span> select-primeSlowly</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  13:</span> {</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  14:</span>         <span style="color:#0000ff;">if</span> ($_ <span style="color:#cc6633;">-eq</span> 1) {<span style="color:#0000ff;">return</span> $null}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  15:</span>         <span style="color:#0000ff;">for</span> ($i=2;$i <span style="color:#cc6633;">-le</span> $_;$i++)</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  16:</span>                 {</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  17:</span>                 <span style="color:#0000ff;">if</span> ($_ % $i <span style="color:#cc6633;">-eq</span> 0 ) {<span style="color:#0000ff;">return</span>}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  18:</span>                 }</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  19:</span>         $_</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  20:</span> }</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  21:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  22:</span> <span style="color:#006080;">"Quickly"</span></pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  23:</span> <span style="color:#006080;">""</span></pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  24:</span> measure-command {1..200 &#124; select-primeQuickly}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  25:</span> <span style="color:#006080;">"Slowly"</span></pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  26:</span> <span style="color:#006080;">""</span></pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  27:</span> measure-command {1..200 &#124; select-primeSlowly}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  28:</span> PS C:usersandysDesktop&#62; C:usersandysDesktopprimes.ps1</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  29:</span> Quickly</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  30:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  31:</span> Days              : 0</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  32:</span> Hours             : 0</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  33:</span> Minutes           : 0</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  34:</span> Seconds           : 0</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  35:</span> Milliseconds      : 734</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  36:</span> Ticks             : 7346876</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  37:</span> TotalDays         : 8.5033287037037E-06</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  38:</span> TotalHours        : 0.000204079888888889</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  39:</span> TotalMinutes      : 0.0122447933333333</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  40:</span> TotalSeconds      : 0.7346876</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  41:</span> TotalMilliseconds : 734.6876</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  42:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  43:</span> Slowly</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  44:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  45:</span> Days              : 0</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  46:</span> Hours             : 0</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  47:</span> Minutes           : 0</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  48:</span> Seconds           : 0</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  49:</span> Milliseconds      : 346</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  50:</span> Ticks             : 3469459</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  51:</span> TotalDays         : 4.0155775462963E-06</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  52:</span> TotalHours        : 9.63738611111111E-05</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  53:</span> TotalMinutes      : 0.00578243166666667</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  54:</span> TotalSeconds      : 0.3469459</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  55:</span> TotalMilliseconds : 346.9459</pre>
</div>
</div>
<p>Looking at the results, what I thought was going to be quick was actually a lot slower! The version that calls into .NET ran in 736 milliseconds and the version that did not ran in 346 milliseconds.</p>
<p>Goes to show that when you are programming or scripting, what we think may be a gain in efficiency, may very well not be, as I learned in this exercise.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games 2008 Event 2]]></title>
<link>http://getpowershell.wordpress.com/2008/02/20/scripting-games-2008-event-2/</link>
<pubDate>Thu, 21 Feb 2008 03:10:01 +0000</pubDate>
<dc:creator>Andy Schneider</dc:creator>
<guid>http://getpowershell.wordpress.com/2008/02/20/scripting-games-2008-event-2/</guid>
<description><![CDATA[I thought event 2 was pretty cool.&nbsp; We have to take in a list of figure skaters and their score]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I thought <a href="http://www.microsoft.com/technet/scriptcenter/funzone/games/games08/aevent2.mspx">event 2</a> was pretty cool.&#160; We have to take in a list of figure skaters and their scores, drop the highest and lowest score, average them, and assign a gold, silver and bronze medal to the top three competitors.</p>
<p>This problem was extremely conducive to using the power of the pipeline in Powershell.</p>
<div style="border-right:gray 1px solid;border-top:gray 1px solid;font-size:8pt;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span> $competitors = Get-Content c:\scripts\skaters.txt </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   2:</span> [array]$totalScores = <span style="color:#006080;">""</span> &#124; Select-Object Name,Score,Medal</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   3:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   4:</span> <span style="color:#0000ff;">foreach</span> ($competitor <span style="color:#0000ff;">in</span> $competitors)</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   5:</span> {</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   6:</span>     $scores = <span style="color:#006080;">""</span> &#124; Select-Object Name,Score,Medal</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   7:</span>     $scores.Name,$scores.Score = $competitor.Split(<span style="color:#006080;">","</span>)</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   8:</span>     $stats = $scores.Score &#124; Measure-Object -Maximum -Minimum</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   9:</span>     $scores.Score = $scores.Score -replace $stats.Maximum</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  10:</span>     $scores.Score = $scores.Score -replace $stats.Minimum</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  11:</span>     $scores.Score = [math]::Round(($scores.Score &#124; Measure-Object -Average).Average,2)</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  12:</span>     $totalScores += $scores</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  13:</span> }</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  14:</span> $winners = $totalScores &#124; Sort-Object Score -Descending &#124; Select-Object -First 3 $winners[0].Medal,$winners[1].Medal,$winners[2].Medal = <span style="color:#006080;">"Gold"</span>,<span style="color:#006080;">"Silver"</span>,<span style="color:#006080;">"Bronze"</span></pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  15:</span> $winners &#124; Format-Table -AutoSize</pre>
</div>
</div>
<p>First we pull in the contents of the skaters.txt file. Next I use a little shortcut to create a custom PSObject using select-object. This creates a PSObject with three properties, a Name, a Score, and a Medal. This will become a collection of scores objects.</p>
<p>Using a foreach loop, we go through each competitor and create a new score object, assigning its values.Name to the name of the competitor and then the scores as an array in the .score property.</p>
<p>Please check out my <a href="http://getpowershell.wordpress.com/2008/02/05/multi-variable-assignment-in-powershell/">post on multi variable assignment</a> to see how this works.</p>
<p>I can pull the minimum and maximum using measure object and drop them. After that I use measure-object again to take the average and stuff it in the .score property.</p>
<p>I should mention here that /<a href="http://thepowershellguy.com/blogs/posh/archive/2008/02/20/advanced-windows-powershell-event-2.aspx">\/\o\/\/&#8217;s solution</a> was pretty darn slick. I loved how he sorted and then select 1..5, essentially dropping the top and bottom score before he took the average. </p>
<p>The final item is to add the current score object to the collection of score objects called $totalScores.</p>
<p>Now it becomes quite easy to get the winners. We just sort the $totalScores collection by Score, select the top 3, and assign their .medal value accordingly.</p>
<p>Multi variable assignment is so cool. Ever since I found out about it it seems to appear in everything I do.</p>
<p>&#160;</p>
<p>Have fun Powershelling</p>
<p>&#160;</p>
<p>Andy</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Scripting Games 2008 Event 1]]></title>
<link>http://getpowershell.wordpress.com/2008/02/20/scripting-games-2008-event-1/</link>
<pubDate>Wed, 20 Feb 2008 23:19:16 +0000</pubDate>
<dc:creator>Andy Schneider</dc:creator>
<guid>http://getpowershell.wordpress.com/2008/02/20/scripting-games-2008-event-1/</guid>
<description><![CDATA[Now that the answers have been posted for the first 2 events, I thought I would share my answer for ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Now that the answers have been posted for the first 2 events, I thought I would share my answer for the first event. </p>
<p>My first version worked but on some queries would take up to 20 plus minutes to crunch to through the 32,000 + words.</p>
<p>Here is what I finally ended up with:</p>
<div style="border-right:gray 1px solid;border-top:gray 1px solid;font-size:8pt;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;height:231px;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span> $wordlistlocation = <span style="color:#006080;">"c:\scripts\wordlist.txt"</span></pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   2:</span> $phonenumber = Read-Host <span style="color:#006080;">"Please Enter a phone number"</span></pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   3:</span> $numbers = [char[]]$phonenumber.ToString()</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   4:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   5:</span> <span style="color:#0000ff;">filter</span> Get-Letters {</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   6:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   7:</span>     <span style="color:#0000ff;">switch</span> ($_) {</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   8:</span>         2 {$letters = <span style="color:#006080;">"ABC"</span>}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   9:</span>         3 {$letters = <span style="color:#006080;">"DEF"</span>}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  10:</span>         4 {$letters = <span style="color:#006080;">"GHI"</span>}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  11:</span>         5 {$letters = <span style="color:#006080;">"JKL"</span>}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  12:</span>         6 {$letters = <span style="color:#006080;">"MNO"</span>}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  13:</span>         7 {$letters = <span style="color:#006080;">"PRS"</span>}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  14:</span>         8 {$letters = <span style="color:#006080;">"TUV"</span>}</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  15:</span>         9 {$letters = <span style="color:#006080;">"WXY"</span>} </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  16:</span>     } <span style="color:#008000;"># Switch</span></pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  17:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  18:</span>     <span style="color:#0000ff;">return</span> $letters</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  19:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  20:</span> } <span style="color:#008000;">#Get-Letters</span></pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  21:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  22:</span> $first,$second,$third,$fourth,$fifth,$sixth,$seventh = $numbers &#124; Get-Letters</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  23:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  24:</span> $string1 = $first[0]     + $first[1]     + $first[2]</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  25:</span> $string2 = $second[0]     + $second[1]     + $second[2]</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  26:</span> $string3 = $third[0]     + $third[1]     + $third[2]</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  27:</span> $string4 = $fourth[0]    + $fourth[1]    + $fourth[2]</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  28:</span> $string5 = $fifth[0]    + $fifth[1]        + $fifth[2]</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  29:</span> $string6 = $sixth[0]    + $sixth[1]        + $sixth[2]</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  30:</span> $string7 = $seventh[0]    + $seventh[1]    + $seventh[2]</pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  31:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  32:</span> $pattern = <span style="color:#006080;">"^["</span> + $string1 + <span style="color:#006080;">"]["</span> + $string2 + <span style="color:#006080;">"]["</span> + $string3 + <span style="color:#006080;">"]["</span> + $string4 +<span style="color:#006080;">"]["</span> + $string5 + <span style="color:#006080;">"]["</span> + $string6 + <span style="color:#006080;">"]["</span> + $string7 + <span style="color:#006080;">"]"</span></pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  33:</span>&#160; </pre>
<pre style="font-size:8pt;overflow:visible;width:100%;color:black;line-height:12pt;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  34:</span> Get-Content $wordlistlocation &#124; Select-String -Pattern $pattern &#124; Select -first 1</pre>
</div>
</div>
<p>First I get the content of the wordlist file and then read in a phone number. The cast to an array of char[] was necessary to put them into an array as individual elements. It was interesting that I could not cast to an array of ints, but time was short and I was under pressure, and it worked <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Next, I used switch to build a filter that returns the possible letters for any given number. If I pass in a 2,&#160; I get back a string of ABC.</p>
<p>Next I used multiple assignment to get all the possibilities for each number. </p>
<p>I used these to build a big ol&#8217; regex pattern. It&#8217;s long but relatively simple. Basically just creates 7 chars using the [] for &#8220;this OR that OR the other thing.&#8221;</p>
<p>For example, if the first two numbers were 2 and 3, it would generate [abc][def] as the pattern.</p>
<p>Once I built up that pattern, I simply used get-content of the word list and piped that to Select-String and gave Select-String the the regex pattern I created.</p>
<p>In my first attempt, I created a list of all possibilities and then did a -match on them and compared to the word list file.</p>
<p>Using regex and Select-String brought my execution time down from 23 minutes to about 7 seconds, give or take. </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Winter Scripting Games ]]></title>
<link>http://chrisfederico.wordpress.com/2008/02/15/winter-scripting-games/</link>
<pubDate>Fri, 15 Feb 2008 21:07:02 +0000</pubDate>
<dc:creator>Chris</dc:creator>
<guid>http://chrisfederico.wordpress.com/2008/02/15/winter-scripting-games/</guid>
<description><![CDATA[I&#8217;m sure allot of you are entering the scripting games today if you have time too that it .I h]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I&#8217;m sure allot of you are entering the scripting games today if you have time too that it .I have done the first beginners challenge in Powershell . It took me awhile . I will post my code after the deadline . I will try and do the advanced challenge this weekend .</p>
<p>I&#8217;m doing all Powershell contests but you can do vbscript and perl as well .</p>
<p>Have Fun thats what its all about !</p>
<p><a target="_blank" href="http://www.microsoft.com/technet/scriptcenter/default.mspx"> Go Here !</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Thank God its Friday !]]></title>
<link>http://chrisfederico.wordpress.com/2008/01/18/thank-god-its-friday/</link>
<pubDate>Fri, 18 Jan 2008 20:44:46 +0000</pubDate>
<dc:creator>Chris</dc:creator>
<guid>http://chrisfederico.wordpress.com/2008/01/18/thank-god-its-friday/</guid>
<description><![CDATA[Sorry I haven&#8217;t written in awhile . I am busy at work putting together a script for Server Mai]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Sorry I haven&#8217;t written in awhile . I am busy at work putting together a script for Server Maintenance Windows that we have . You know those times when hot fixes need to be implemented . I am writing it in vbscript . Less and Less I am liking vbscript. More and more I&#8217;m liking powershell as a scripting language . Also the scripting games are coming soon . This will be the first time I am going to enter . I want to enter the powershell games . I will write some more blogs on the script I&#8217;m making very soon .</p>
<p>Chris</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
