-
Notifications
You must be signed in to change notification settings - Fork 0
/
Day4Part2.ps1
45 lines (34 loc) · 1.12 KB
/
Day4Part2.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function SumCards {
param (
$Cards
)
$CardsTotal = 0
foreach ($Card in $Cards) {
$CardTotal = 0
if ($SavedCards.ContainsKey($Card.GameNum)) {
$CardTotal = $SavedCards[$Card.GameNum]
} else {
$Hits = @($Card.MyNumbers | ?{$_ -in $Card.WinNumbers})
if ($Hits.Length -gt 0) {
$CardTotal += $Hits.Length
$CardTotal += SumCards $AllCards[$Card.GameNum..($Card.GameNum+$Hits.Length-1)]
}
$SavedCards[$Card.GameNum] = $CardTotal
}
$CardsTotal += $CardTotal
}
$CardsTotal
}
$AllCards = Get-Clipboard | %{
$Game, $Winning, $Mine = $_.Trim().split(':\|')
$Retval = "" | select GameNum, WinNumbers, MyNumbers
[Int]$Retval.GameNum = $Game.Split(" ", [StringSplitOptions]::RemoveEmptyEntries)[1]
$Retval.WinNumbers = $Winning.Split(" ", [StringSplitOptions]::RemoveEmptyEntries)
$Retval.MyNumbers = $Mine.Split(" ", [StringSplitOptions]::RemoveEmptyEntries)
$Retval
}
$SavedCards = @{}
$Sum = $AllCards.Length
$Sum += SumCards $AllCards
$Sum