Skip to content

Instantly share code, notes, and snippets.

@DavidKuehn
Created March 2, 2016 07:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DavidKuehn/d922a23f81fada9b411b to your computer and use it in GitHub Desktop.
Save DavidKuehn/d922a23f81fada9b411b to your computer and use it in GitHub Desktop.
PowerShell Challenge – Beating Hadoop with Posh
<#
http://foxdeploy.com/2016/03/01/powershell-challenge-beating-hadoop-with-posh/
9m 25s 643ms on my machine, Core i5-2500K @ 3.30Ghz
Only uses a single core so there is much room to improve.
Update $Path to point to the folder containing the folders of .pgn files.
Change "select -First 10" to "select -First 1" for quick test runs.
#>
$Path = 'V:\ChessData Project\ChessData-master\ChessData-master'
Set-Location -Path $Path
Measure-Command -Expression {
[int]$W = 0
[int]$B = 0
[int]$D = 0
Get-ChildItem -Directory | sort Name | select -First 10 | % {
Get-ChildItem -Path $_.FullName -File -Filter *.pgn | % {
Write-Verbose "$($_.FullName) $($($_.length)/1MB)" -Verbose
$CurrentFile = New-Object System.IO.StreamReader($_.FullName)
while (($CurrentLine = $CurrentFile.ReadLine()) -ne $null) {
if ($CurrentLine -match 'result'){
$M = (($CurrentLine -split '-')[0]).ToString()[-1]
if($M -eq '2'){$D++}elseif($M -eq '1'){$B++}elseif($M -eq '0'){$W++}
}
}
$CurrentFile.Close()
}
}
$Result = [pscustomobject]@{
White = $W
Black = $B
Draw = $D
}
}
$Result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment