From 849ec965b365a26a343a905ab47f13ee7612a414 Mon Sep 17 00:00:00 2001 From: rzuckerm Date: Sat, 31 May 2025 13:36:06 -0500 Subject: [PATCH 1/3] Fix bug in example and tests for Baffling Birthdays --- .../baffling-birthdays/.meta/BafflingBirthdays.example.ps1 | 4 ++-- .../practice/baffling-birthdays/BafflingBirthdays.tests.ps1 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 b/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 index 648bdba..bb74598 100644 --- a/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 +++ b/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 @@ -16,13 +16,13 @@ Function Invoke-BafflingBirthdays { Param( [int]$People ) - $runs = 1000 + $runs = 5000 $count = 0 for ($i = 0; $i -lt $runs; $i++) { $birthdays = Get-RandomBirthdates -People $People $count += Test-SharedBirthday -Birthdates $birthdays } - $count / 100.00 + $count * 100.00 / $runs } Function Get-RandomBirthdate([int]$Year) { diff --git a/exercises/practice/baffling-birthdays/BafflingBirthdays.tests.ps1 b/exercises/practice/baffling-birthdays/BafflingBirthdays.tests.ps1 index 676578b..626aa28 100644 --- a/exercises/practice/baffling-birthdays/BafflingBirthdays.tests.ps1 +++ b/exercises/practice/baffling-birthdays/BafflingBirthdays.tests.ps1 @@ -139,9 +139,9 @@ Describe "BafflingBirthdays test cases" { Context "estimated probability" { BeforeAll { - $tolerance = 1 + $tolerance = 2 function Test-Probability($Probability, $Expected, $Tolerance) { - ($Probability -ge $Expected - $Tolerance) -or ($Probability -le $Expected + $Tolerance) + ($Probability -ge $Expected - $Tolerance) -and ($Probability -le $Expected + $Tolerance) } } From 4fd7ccc8a880a5d8841c63eb109b7eeebd8762e6 Mon Sep 17 00:00:00 2001 From: rzuckerm Date: Sat, 31 May 2025 14:35:58 -0500 Subject: [PATCH 2/3] Speed up example by generating random number from 0 to 365 and adding it to Jan 1 of the year --- .../.meta/BafflingBirthdays.example.ps1 | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 b/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 index bb74598..ca236d1 100644 --- a/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 +++ b/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 @@ -19,18 +19,11 @@ Function Invoke-BafflingBirthdays { $runs = 5000 $count = 0 for ($i = 0; $i -lt $runs; $i++) { - $birthdays = Get-RandomBirthdates -People $People - $count += Test-SharedBirthday -Birthdates $birthdays + $count += Test-SharedBirthday -Birthdates (Get-RandomBirthdates -People $People) } $count * 100.00 / $runs } -Function Get-RandomBirthdate([int]$Year) { - $month = Get-Random -Minimum 1 -Maximum (12 + 1) - $day = Get-Random -Minimum 1 -Maximum (([DateTime]::DaysInMonth($Year, $month)) + 1) - [datetime]::New($Year, $month, $day) -} - Function Get-RandomBirthdates { <# .SYNOPSIS @@ -47,9 +40,8 @@ Function Get-RandomBirthdates { $year = Get-Random -Minimum 1900 -Maximum ((Get-Date).Year + 1) } until (-not [DateTime]::IsLeapYear($year)) - for ($i = 0; $i -lt $People; $i++) { - Get-RandomBirthdate $year - } + Get-Random -Minimum 0 -Maximum 365 -Count $People | + ForEach-Object { [DateTime]::new($year, 1, 1).AddDays($_) } } Function Test-SharedBirthday { @@ -64,7 +56,7 @@ Function Test-SharedBirthday { Param( [DateTime[]]$Birthdates ) - for ($i = 0; $i -lt $Birthdates.Count; $i++) { + for ($i = 0; $i -lt $Birthdates.Count - 1; $i++) { for ($j = $i+1; $j -lt $Birthdates.Count; $j++) { if ($Birthdates[$i].DayOfYear -eq $Birthdates[$j].DayOfYear) { return $true From d314af0526fa48685940bad791be7df46546cbf8 Mon Sep 17 00:00:00 2001 From: glaxxie <86179463+glaxxie@users.noreply.github.com> Date: Sat, 31 May 2025 14:58:54 -0500 Subject: [PATCH 3/3] Update docstring --- .../baffling-birthdays/.meta/BafflingBirthdays.example.ps1 | 3 +++ exercises/practice/baffling-birthdays/BafflingBirthdays.ps1 | 3 +++ 2 files changed, 6 insertions(+) diff --git a/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 b/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 index ca236d1..3a9baa4 100644 --- a/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 +++ b/exercises/practice/baffling-birthdays/.meta/BafflingBirthdays.example.ps1 @@ -11,6 +11,9 @@ Function Invoke-BafflingBirthdays { .PARAMETER People Number of people in the group. + + .NOTES + Consider doing 5000 runs of the test for optimal result for 2% tolerance. #> [CmdletBinding()] Param( diff --git a/exercises/practice/baffling-birthdays/BafflingBirthdays.ps1 b/exercises/practice/baffling-birthdays/BafflingBirthdays.ps1 index ae69293..cb69aca 100644 --- a/exercises/practice/baffling-birthdays/BafflingBirthdays.ps1 +++ b/exercises/practice/baffling-birthdays/BafflingBirthdays.ps1 @@ -11,6 +11,9 @@ Function Invoke-BafflingBirthdays { .PARAMETER People Number of people in the group. + + .NOTES + Consider doing 5000 runs of the test for optimal result for 2% tolerance. #> [CmdletBinding()] Param(