From cc7c7390c031d5a8eadfe88b7de5bf452da947a4 Mon Sep 17 00:00:00 2001 From: Baboushka Date: Wed, 7 Jan 2026 13:51:10 +0100 Subject: [PATCH 1/6] Scaffold set up: Baffling Birthdays --- config.json | 14 + .../baffling-birthdays/.docs/instructions.md | 23 ++ .../baffling-birthdays/.docs/introduction.md | 25 ++ .../baffling-birthdays/.meta/config.json | 22 ++ .../baffling-birthdays/.meta/tests.toml | 61 +++++ .../practice/baffling-birthdays/build.gradle | 25 ++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43453 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + exercises/practice/baffling-birthdays/gradlew | 249 ++++++++++++++++++ .../practice/baffling-birthdays/gradlew.bat | 92 +++++++ exercises/settings.gradle | 1 + 11 files changed, 519 insertions(+) create mode 100644 exercises/practice/baffling-birthdays/.docs/instructions.md create mode 100644 exercises/practice/baffling-birthdays/.docs/introduction.md create mode 100644 exercises/practice/baffling-birthdays/.meta/config.json create mode 100644 exercises/practice/baffling-birthdays/.meta/tests.toml create mode 100644 exercises/practice/baffling-birthdays/build.gradle create mode 100644 exercises/practice/baffling-birthdays/gradle/wrapper/gradle-wrapper.jar create mode 100644 exercises/practice/baffling-birthdays/gradle/wrapper/gradle-wrapper.properties create mode 100644 exercises/practice/baffling-birthdays/gradlew create mode 100644 exercises/practice/baffling-birthdays/gradlew.bat diff --git a/config.json b/config.json index 484d807d0..92dfd05b1 100644 --- a/config.json +++ b/config.json @@ -1211,6 +1211,20 @@ ], "difficulty": 6 }, + { + "slug": "baffling-birthdays", + "name": "Baffling Birthdays", + "uuid": "b534049a-5920-4906-9091-0fa6d81a3636", + "practices": [], + "prerequisites": [ + "for-loops", + "lists", + "sets", + "randomness", + "datetime" + ], + "difficulty": 6 + }, { "slug": "bank-account", "name": "Bank Account", diff --git a/exercises/practice/baffling-birthdays/.docs/instructions.md b/exercises/practice/baffling-birthdays/.docs/instructions.md new file mode 100644 index 000000000..a01ec8679 --- /dev/null +++ b/exercises/practice/baffling-birthdays/.docs/instructions.md @@ -0,0 +1,23 @@ +# Instructions + +Your task is to estimate the birthday paradox's probabilities. + +To do this, you need to: + +- Generate random birthdates. +- Check if a collection of randomly generated birthdates contains at least two with the same birthday. +- Estimate the probability that at least two people in a group share the same birthday for different group sizes. + +~~~~exercism/note +A birthdate includes the full date of birth (year, month, and day), whereas a birthday refers only to the month and day, which repeat each year. +Two birthdates with the same month and day correspond to the same birthday. +~~~~ + +~~~~exercism/caution +The birthday paradox assumes that: + +- There are 365 possible birthdays (no leap years). +- Each birthday is equally likely (uniform distribution). + +Your implementation must follow these assumptions. +~~~~ diff --git a/exercises/practice/baffling-birthdays/.docs/introduction.md b/exercises/practice/baffling-birthdays/.docs/introduction.md new file mode 100644 index 000000000..97dabd1e6 --- /dev/null +++ b/exercises/practice/baffling-birthdays/.docs/introduction.md @@ -0,0 +1,25 @@ +# Introduction + +Fresh out of college, you're throwing a huge party to celebrate with friends and family. +Over 70 people have shown up, including your mildly eccentric Uncle Ted. + +In one of his usual antics, he bets you £100 that at least two people in the room share the same birthday. +That sounds ridiculous — there are many more possible birthdays than there are guests, so you confidently accept. + +To your astonishment, after collecting the birthdays of just 32 guests, you've already found two guests that share the same birthday. +Accepting your loss, you hand Uncle Ted his £100, but something feels off. + +The next day, curiosity gets the better of you. +A quick web search leads you to the [birthday paradox][birthday-problem], which reveals that with just 23 people, the probability of a shared birthday exceeds 50%. + +Ah. So _that's_ why Uncle Ted was so confident. + +Determined to turn the tables, you start looking up other paradoxes; next time, _you'll_ be the one making the bets. + +~~~~exercism/note +The birthday paradox is a [veridical paradox][veridical-paradox]: even though it feels wrong, it is actually true. + +[veridical-paradox]: https://en.wikipedia.org/wiki/Paradox#Quine's_classification +~~~~ + +[birthday-problem]: https://en.wikipedia.org/wiki/Birthday_problem diff --git a/exercises/practice/baffling-birthdays/.meta/config.json b/exercises/practice/baffling-birthdays/.meta/config.json new file mode 100644 index 000000000..6e401cb62 --- /dev/null +++ b/exercises/practice/baffling-birthdays/.meta/config.json @@ -0,0 +1,22 @@ +{ + "authors": [ + "Baboushka" + ], + "files": { + "solution": [ + "src/main/java/BafflingBirthdays.java" + ], + "test": [ + "src/test/java/BafflingBirthdaysTest.java" + ], + "example": [ + ".meta/src/reference/java/BafflingBirthdays.java" + ], + "invalidator": [ + "build.gradle" + ] + }, + "blurb": "Estimate the birthday paradox's probabilities.", + "source": "Erik Schierboom", + "source_url": "https://github.com/exercism/problem-specifications/pull/2539" +} diff --git a/exercises/practice/baffling-birthdays/.meta/tests.toml b/exercises/practice/baffling-birthdays/.meta/tests.toml new file mode 100644 index 000000000..c76afb466 --- /dev/null +++ b/exercises/practice/baffling-birthdays/.meta/tests.toml @@ -0,0 +1,61 @@ +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. + +[716dcc2b-8fe4-4fc9-8c48-cbe70d8e6b67] +description = "shared birthday -> one birthdate" + +[f7b3eb26-bcfc-4c1e-a2de-af07afc33f45] +description = "shared birthday -> two birthdates with same year, month, and day" + +[7193409a-6e16-4bcb-b4cc-9ffe55f79b25] +description = "shared birthday -> two birthdates with same year and month, but different day" + +[d04db648-121b-4b72-93e8-d7d2dced4495] +description = "shared birthday -> two birthdates with same month and day, but different year" + +[3c8bd0f0-14c6-4d4c-975a-4c636bfdc233] +description = "shared birthday -> two birthdates with same year, but different month and day" + +[df5daba6-0879-4480-883c-e855c99cdaa3] +description = "shared birthday -> two birthdates with different year, month, and day" + +[0c17b220-cbb9-4bd7-872f-373044c7b406] +description = "shared birthday -> multiple birthdates without shared birthday" + +[966d6b0b-5c0a-4b8c-bc2d-64939ada49f8] +description = "shared birthday -> multiple birthdates with one shared birthday" + +[b7937d28-403b-4500-acce-4d9fe3a9620d] +description = "shared birthday -> multiple birthdates with more than one shared birthday" + +[70b38cea-d234-4697-b146-7d130cd4ee12] +description = "random birthdates -> generate requested number of birthdates" + +[d9d5b7d3-5fea-4752-b9c1-3fcd176d1b03] +description = "random birthdates -> years are not leap years" + +[d1074327-f68c-4c8a-b0ff-e3730d0f0521] +description = "random birthdates -> months are random" + +[7df706b3-c3f5-471d-9563-23a4d0577940] +description = "random birthdates -> days are random" + +[89a462a4-4265-4912-9506-fb027913f221] +description = "estimated probability of at least one shared birthday -> for one person" + +[ec31c787-0ebb-4548-970c-5dcb4eadfb5f] +description = "estimated probability of at least one shared birthday -> among ten people" + +[b548afac-a451-46a3-9bb0-cb1f60c48e2f] +description = "estimated probability of at least one shared birthday -> among twenty-three people" + +[e43e6b9d-d77b-4f6c-a960-0fc0129a0bc5] +description = "estimated probability of at least one shared birthday -> among seventy people" diff --git a/exercises/practice/baffling-birthdays/build.gradle b/exercises/practice/baffling-birthdays/build.gradle new file mode 100644 index 000000000..d28f35dee --- /dev/null +++ b/exercises/practice/baffling-birthdays/build.gradle @@ -0,0 +1,25 @@ +plugins { + id "java" +} + +repositories { + mavenCentral() +} + +dependencies { + testImplementation platform("org.junit:junit-bom:5.10.0") + testImplementation "org.junit.jupiter:junit-jupiter" + testImplementation "org.assertj:assertj-core:3.25.1" + + testRuntimeOnly "org.junit.platform:junit-platform-launcher" +} + +test { + useJUnitPlatform() + + testLogging { + exceptionFormat = "full" + showStandardStreams = true + events = ["passed", "failed", "skipped"] + } +} diff --git a/exercises/practice/baffling-birthdays/gradle/wrapper/gradle-wrapper.jar b/exercises/practice/baffling-birthdays/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e6441136f3d4ba8a0da8d277868979cfbc8ad796 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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
NnX)EH+Nua)3Y(c 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/exercises/practice/baffling-birthdays/gradlew.bat b/exercises/practice/baffling-birthdays/gradlew.bat new file mode 100644 index 000000000..93e3f59f1 --- /dev/null +++ b/exercises/practice/baffling-birthdays/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/exercises/settings.gradle b/exercises/settings.gradle index 1119f4b98..6bf710357 100644 --- a/exercises/settings.gradle +++ b/exercises/settings.gradle @@ -40,6 +40,7 @@ include 'practice:bank-account' // include 'practice:binary' // deprecated include 'practice:binary-search' include 'practice:binary-search-tree' +include 'practice:baffling-birthdays' include 'practice:bob' include 'practice:book-store' include 'practice:bottle-song' From b08767caf590a4953144f8c8e92fc71d4465d8a1 Mon Sep 17 00:00:00 2001 From: Baboushka Date: Wed, 7 Jan 2026 14:00:48 +0100 Subject: [PATCH 2/6] add stub file: Baffling Birthdays --- .../src/main/java/BafflingBirthdays.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 exercises/practice/baffling-birthdays/src/main/java/BafflingBirthdays.java diff --git a/exercises/practice/baffling-birthdays/src/main/java/BafflingBirthdays.java b/exercises/practice/baffling-birthdays/src/main/java/BafflingBirthdays.java new file mode 100644 index 000000000..273c6506c --- /dev/null +++ b/exercises/practice/baffling-birthdays/src/main/java/BafflingBirthdays.java @@ -0,0 +1,15 @@ +import java.util.List; + +class BafflingBirthdays { + boolean sharedBirthday(List birthdates) { + throw new UnsupportedOperationException("Delete this statement and write your own implementation."); + } + + List randomBirthdates(int groupSize) { + throw new UnsupportedOperationException("Delete this statement and write your own implementation."); + } + + double estimatedProbabilityOfSharedBirthday(int groupSize) { + throw new UnsupportedOperationException("Delete this statement and write your own implementation."); + } +} \ No newline at end of file From a15c9aa6cd36de43d24eacb3cab5bf70dc802a2a Mon Sep 17 00:00:00 2001 From: Baboushka Date: Wed, 7 Jan 2026 14:12:21 +0100 Subject: [PATCH 3/6] unit tests: Baffling Birthdays --- .../src/test/java/BafflingBirthdaysTest.java | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java diff --git a/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java b/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java new file mode 100644 index 000000000..259e9e97d --- /dev/null +++ b/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java @@ -0,0 +1,182 @@ +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.data.Offset.offset; + +import java.time.LocalDate; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class BafflingBirthdaysTest { + private BafflingBirthdays birthdays = new BafflingBirthdays(); + + private double averageEstimatedProbability(int groupSize, int runs) { + double sum = 0.0; + for (int i = 0; i < runs; i++) { + sum += birthdays.estimatedProbabilityOfSharedBirthday(groupSize); + } + return sum / runs; + } + + // case: shared birthday + @Test + @DisplayName("one birthdate") + public void oneBirthdateTest() { + assertThat(birthdays.sharedBirthday(List.of("2000-01-01"))).isFalse(); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same year, month, and day") + public void twoBirthdatesWithSameYearMonthAndDayTest() { + assertThat(birthdays.sharedBirthday(List.of("2000-01-01", "2000-01-01"))).isTrue(); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same year and month, but different day") + public void twoBirthdatesWithSameYearAndMonthButDifferentDayTest() { + assertThat(birthdays.sharedBirthday(List.of("2012-05-09", "2012-05-17"))).isFalse(); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same month and day, but different year") + public void twoBirthdatesWithSameMonthAndDayButDifferentYearTest() { + assertThat(birthdays.sharedBirthday(List.of("1999-10-23", "1988-10-23"))).isTrue(); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same year, but different month and day") + public void twoBirthdatesWithSameYearButDifferentMonthAndDayTest() { + assertThat(birthdays.sharedBirthday(List.of("2007-12-19", "2007-04-27"))).isFalse(); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with different year, month, and day") + public void twoBirthdatesWithDifferentYearMonthAndDayTest() { + assertThat(birthdays.sharedBirthday(List.of("1997-08-04", "1963-11-23"))).isFalse(); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("multiple birthdates without shared birthday") + public void multipleBirthdatesWithoutSharedBirthdayTest() { + assertThat(birthdays.sharedBirthday(List.of("1966-07-29", "1977-02-12", "2001-12-25", "1980-11-10"))).isFalse(); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("multiple birthdates with one shared birthday") + public void multipleBirthdatesWithOneSharedBirthdayTest() { + assertThat(birthdays.sharedBirthday(List.of("1966-07-29", "1977-02-12", "2001-07-29", "1980-11-10"))).isTrue(); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("multiple birthdates with more than one shared birthday") + public void multipleBirthdatesWithMoreThanOneSharedBirthdayTest() { + assertThat(birthdays.sharedBirthday(List.of( + "1966-07-29", + "1977-02-12", + "2001-12-25", + "1980-07-29", + "2019-02-12" + ))).isTrue(); + } + + // case: random birthdates + @Disabled("Remove to run test") + @Test + @DisplayName("generate requested number of birthdates") + public void generateRequestedNumberOfBirthdatesTest() { + int groupSize = 50; + assertThat(birthdays.randomBirthdates(groupSize).size()).isEqualTo(groupSize); + } + + // additional test + @Disabled("Remove to run test") + @Test + @DisplayName("random birthdates are valid iso dates") + public void randomBirthdatesAreValidISODatesTest() { + for (String birthdate: birthdays.randomBirthdates(100)) { + assertThatCode(() -> LocalDate.parse(birthdate)).doesNotThrowAnyException(); + } + } + + @Disabled("Remove to run test") + @Test + @DisplayName("years are not leap years") + public void yearsAreNotLeapYearsTest() { + for (String birthdate : birthdays.randomBirthdates(100)) { + LocalDate date = LocalDate.parse(birthdate); + assertThat(date.isLeapYear()).isFalse(); + assertThat(date.getMonthValue() == 2 && date.getDayOfMonth() == 29).isFalse(); + } + } + + @Disabled("Remove to run test") + @Test + @DisplayName("months are random") + public void monthsAreRandomTest() { + Set months = new HashSet<>(); + for (String birthdate : birthdays.randomBirthdates(500)) { + LocalDate date = LocalDate.parse(birthdate); + months.add(date.getMonthValue()); + if (months.size() >= 7) { + break; + } + } + assertThat(months).hasSizeGreaterThanOrEqualTo(7); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("days are random") + public void daysAreRandomTest() { + Set days = new HashSet<>(); + for (String birthdate : birthdays.randomBirthdates(500)) { + LocalDate date = LocalDate.parse(birthdate); + days.add(date.getDayOfMonth()); + if (days.size() >= 11) { + break; + } + } + assertThat(days).hasSizeGreaterThanOrEqualTo(11); + } + + // case: estimated probability of at least one shared birthday + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case for one person") + public void forOnePersonTest() { + assertThat(birthdays.estimatedProbabilityOfSharedBirthday(1)).isEqualTo(0.0); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case among ten people") + public void amongTenPeopleTest() { + assertThat(averageEstimatedProbability(10, 50)).isCloseTo(11.694818, offset(1.0)); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case among twenty-three people") + public void amongTwentyThreePeopleTest() { + assertThat(averageEstimatedProbability(23, 50)).isCloseTo(50.729723, offset(1.0)); + } + + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case among seventy people") + public void amongSeventyPeopleTest() { + assertThat(averageEstimatedProbability(70, 50)).isCloseTo(99.915958, offset(1.0)); + } +} From 2c77a1f8e9dde8c670304b855d1cad1a58c52d3c Mon Sep 17 00:00:00 2001 From: Baboushka Date: Wed, 7 Jan 2026 14:18:29 +0100 Subject: [PATCH 4/6] add reference solution: Baffling Birthdays --- .../src/reference/java/BafflingBirthdays.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 exercises/practice/baffling-birthdays/.meta/src/reference/java/BafflingBirthdays.java diff --git a/exercises/practice/baffling-birthdays/.meta/src/reference/java/BafflingBirthdays.java b/exercises/practice/baffling-birthdays/.meta/src/reference/java/BafflingBirthdays.java new file mode 100644 index 000000000..03cf1ae9a --- /dev/null +++ b/exercises/practice/baffling-birthdays/.meta/src/reference/java/BafflingBirthdays.java @@ -0,0 +1,50 @@ +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.concurrent.ThreadLocalRandom; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +class BafflingBirthdays { + private static final int nonLeapYear = 2001; + private static final int daysInYear = 365; + + boolean sharedBirthday(List birthdates) { + Set seen = new HashSet<>(); + for (String birthdate : birthdates) { + String monthDay = birthdate.substring(5); + if (!seen.add(monthDay)) { + return true; + } + } + return false; + } + + List randomBirthdates(int groupSize) { + if (groupSize <= 0) { + return List.of(); + } + List birthdates = new ArrayList<>(groupSize); + ThreadLocalRandom random = ThreadLocalRandom.current(); + for (int i = 0; i < groupSize; i++) { + int dayOfYear = random.nextInt(1, daysInYear + 1); + LocalDate date = LocalDate.ofYearDay(nonLeapYear, dayOfYear); + birthdates.add(date.toString()); + } + return birthdates; + } + + double estimatedProbabilityOfSharedBirthday(int groupSize) { + if (groupSize <= 1) { + return 0.0; + } + if (groupSize > daysInYear) { + return 100.0; + } + double probabilityNoSharedBirthday = 1.0; + for (int k = 0; k < groupSize; k++) { + probabilityNoSharedBirthday *= (daysInYear - k) / (double) daysInYear; + } + return (1 - probabilityNoSharedBirthday) * 100.0; + } +} From 70a53842f27eed5140fe1a42719ac2a6230e0047 Mon Sep 17 00:00:00 2001 From: Baboushka Date: Thu, 8 Jan 2026 14:19:09 +0100 Subject: [PATCH 5/6] fix baffling-birthdays feedback --- .../gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 45633 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- exercises/practice/baffling-birthdays/gradlew | 15 +- .../practice/baffling-birthdays/gradlew.bat | 25 +- .../src/test/java/BafflingBirthdaysTest.java | 286 ++++++++---------- 5 files changed, 153 insertions(+), 176 deletions(-) diff --git a/exercises/practice/baffling-birthdays/gradle/wrapper/gradle-wrapper.jar b/exercises/practice/baffling-birthdays/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..f8e1ee3125fe0768e9a76ee977ac089eb657005e 100644 GIT binary patch delta 37512 zcmXVXV`Cj`(`}o^Hk!t^ZQHhOJ3HJlcWkp!W81cEn+;Cy=RIGpA8^gAnKf(Hbk2kI z9)Q)_AOh$nCt-sbk->L-2(RO@R%V{kbjp;$lZ62_>n+xVL-8R`kClzfMn{>DotIQ* zEh@6^Ptq5MvGvxlvE+9+_o#h~<`U9b#O|>JB*xI_TPG+q07K4M=12^t!ge*RZvl+p2e$n%bz~ra1qC zDat@WTThQ`Cx83)t@Rsd7ULIa5m5*r55|O?0|rKn&w9I8M}d(NGh!rWVjP~sDYVz= z9;R&7p6Q+%kL`uL-3N+*BIpTYMieh(871AGe)se3>ip63%^iogW*KylunpHLn0iN) z%CdFHT;IxGFq0l-n?ihxj}RF^Iwcl<@avE`iT!3*HZ4Fer*b5ccW#>nGT0x`4UpH* zeSeykHVKDzLCHoHEo~5aSfesdJ^67-%zv8wm`FKD2CxP*naMCOPW7xrU_LR`9~_HX zFrlh+y;QTB#o(Zccs;s;T)_UtA6^_D<4B#8R6T?Fb?OHBD0AuRG`O>4 z`EHSonORRCd%ZRja*4^BH<(AwULatI)C6rGq?9P#C}&APo%HPyG(~gK@y=PHN~8Gk zzkmCyNMS_`;zL#gsI1GQDWU6yHNo43$-s%-1aazH%E%O}(j~nJD@sLT%MfB4AhLv= z_PCa$r=!Lse9aKtsKrRm47^-;yr6Z3`#@UDcyj$^_Ni%{UbFE3_;~su2onW=jf9w! zx=p#RyNQ-kLQ8oTo2a7NKFcb5h0~Pmu#%D2K_c6$Cq!@#*qE$z%fD)^0#?#qIL>2m z6_+35cBFHFMJtzU(oU&Vsn|bXH^_oe?X!<9sL)gFHHA5W#VYOwob*mgUA!zDDpNMb z243q>L&%k@bP^bG@G6Y5Yq9z>c-83zc^TqHqxP&V#cD8CRi{WaL=%h+suHV6#1zDp+CW}sYWe7(HnUCX?b_;JIOm>gD3Dh7m-t%Kii~KBdnp!Mh~iG$eiR_ zDonsR;YX_@GmZ^Hqzl?inlmzi8WtydthD_;k|C$`LlwK;$rF$wl-aBCOyQ#NsEGrf zM$|AQOhxfYvtgF#D7wbjC-L?xKysrjqK>XdTdg4g#z0|9bS1NK7gldbbm07u)X(Pm zmOYp-hfLw1z8Q;`1PdPc!c*DhJQ|DF$Y`AwykWTwtHP|m^h9!JbA_JN`d+<_`XeL8 z+_CV^tXUXE5^F1ZK12sN==;?{$Y$>MJ!$uSd6vIZ=>YCIHOOB=Ex$h^ok8( z`XM9yIaBtXynQzwMNP4c-r;rAE$-pxU;DVjX~t#p1SHcpi2GW1<~aVw_K$Ew&IY%J z_x+>S3g3-Fr%1i!8AI`5P$C+731nxW%_edQP$)*2|0K{h0>FcY6d4Up2>ye$=a{5r z4A{4C>p%Vn>o-a=kUSaz08I$lKLt#prWhUNMvqtM&7D=9AKh9ueqf;JJ4s|9gSk&L zAL7+hMyE|O_AAjRq=02mqU9dajRa0919%8|jK}EI#l-!@#MIR1=lwobfY|{yKOSBu zEr8K_gBy8{T^*s)9vz~ z!{2g>Gxo+my&B0Wa#5e<1RHUyY#!6;KeV_;>L|5aBwx_?dlG*2UOx3c8tK#CI?J?u zpJoG2wJ^s&YU7XWWOs-zF-{V`Ewa~Y1k3Olm^K&JbDKK?Vy>9taRYfTC+Ge7-n(z$ zU4mhk9HWTHwj?5Js7g=aa6(-Hn+ua8kC8UgxBV5k;>n~}JNCbtnT8n`q4IhS!=2W< z7{6sU`WcC_ev_Io5gPX6%?s2n)fi%&r8h1-T@LXcw8`lqMMxHR$W9Pv5np3G#iY^3sggkIcEx`zctQh>4bYcQ7 z0^0wQt_c)Kf(P0rBm))akOCUj>=f43(f#R7v7@~lteV|)9H|0H$?XhTk%u6EJ5bZ9 z%@c=8SJ`LD?CqtFxEszle8xSx00e33m}0sv){8#M+=ksNg!9uFR|6nl!Kyea%ou0; zWawkPl`J>#y4eS3=8ROtWSHLq%|rN0O7CCaX`MFvc>czeSfTDLwz@~)hw8D|66y9= zqqLFf#yt^tFmkbJ%~Tl6d^Dm(3(<4QX<%s}s4z}&+S6&ccrBuHZL&I#$C^2{w+ZK5 zIWD7Jog}U}>KeD_7yzu*wa-ye;ZsfQG;jmA2JNnz;uEL+i1LH;`)hEwPQ)PH$fo2H zR_=jzFL3b7L;I%$%)%{gaT-~gDl-w)^uCZ{fzkFjsNOi0+M#OjLayw$}}i{odq)*(6q(cC9zEZGtYchY6-`S(9pNAJep_2(q!ogb2^gUL2j5rt z6Yqu`Ec1xF5&+5yeyOP^j?Y2opa1Z>C14Xr=$7pM1dGR2->0RWX@T(d6@KEmwh3v0He+;&m0 zdz?nl>LwQUw!JpSE)W{hGDqs+r}4*+Ue7{+o#DUtubMY^l=~Z)bX(Rd9$)$e{hL1F z3w&N~b@(GHp5)AR{{ud7tog^%4WhTZBmG~fg>EM8u1BPjIU?3iT*&8m`uTa&BPDOF z)SPQ0^NK9bP=|4j^~SlK!-w1#dn|#D)qdp>?b$y#dwO2@;vO+qQVpGhvMt4;BybK) z(IM#4I0)Z$OKqYbX3nD;8uC+B;S+nI6O_^Ia>`g5+T?#>Qrn9B{rV4a{RX#e%0Iq+ z13~?-%;%7hfv|JQ0NLv22EP_@{2^1|X+feR2#J>LnYgs=hR|wYtQd^erh%-;Cqt@u z?nsPA?iMU8a6&f54r>*it29eX`UT}|c7=zDBQ;gIZ~5EnfV__tfu1F5zo`p)TSFD$ z?uo4XoaeiaWtY#p(Z2xjnIJKU8oe&xlE>AZaQs~4a?x5k05$;vFxZJEon3a5?YAna z6&d(x6JzKVG=A*4JSji@9-2J)Dfqg$+dRsyp*L;f!aPd<{OsJ^#)fZJhr5lwKdVUw zDd)cT0cA5Wn|V=4ZOj68IjGOwGU{Pz$RwsJAtVi+UjtDr5YRKW;&dBs1Pg(r{iHdc zRz)E@i_Q@PD6ywWUr>plWXoQ%lURZBQC?E55TFaRp!!jL1&hHCF?kM)m9SnUSkHSG zKvPF;8M#%Q^INbzNKOj^Ht0))l}6-h>;<+iJluj0h>zZ>WRPt$LxXsGVx|`>_zRooyqy0yfF02I#Chvgr5oy)3CR01_edkh;tWu4!yh zNWCQatYMg0D#01UbKyuBO|uQn@L4!*n7c69jbI*)>|!b*IvaV%N>D; zRW%PEU<9F~ju=Kul3$P@^fNk}zkJt!bRnb=_DTyuZ;IEJD#>JF( zq%%jd))bcSilCKn&)(;Q3t@PcTx9JEA{@U+j>zWzvkd_#(qHP-H?0T|7wXR@yQkvx zqM~qm}YAF4c| zS?hO=T;%V3jTdMMPfWLe(A?H9(NcAXBm=EEDT=T4`O{0M_o64}1A?HICS_`NIR{ec z0K(Se2*dSRBOZKM_6};N`?UljFTe6*VV;>bwX8}ka~}bwl#FIA`+*^jdriAa>%7if zIf}J5ZfWhzz;xuM$mzegr0y;kn9$T^^eN4y`Qz0;jc`s*Ssi2`5(?}9P$sGg0r5}b zTxpT2QLyehtu}`>8JBKi=f_~=MW~=700%2bt>{3u5DjzArgSpnwX#pWmJQda)P_6G zTBld9w;|^F%qqw^p*$d13bBZ7n3}%sEX@oeEJ`k>krZKiM@yjO79#R@7>fWd!?rn3 z<*3pvFU?YAmHF44~}(nbJ^!I9D$CgM45<$%`tRzSRCS0q-E55u20fb;j+ z8#k%SVHsHVn(%nNL7G3Js1foYu8Jxe#TC1Ba;4F8g{K{k+bU__AKOQ=?$H(@K#jxr zs$LHoM+l$$`E}5QzOI0xV*!Ur8)WI3a};MFl~GhXzKMWw3{G{e+p@90$C1rMy)(5$ z>2S^NFzVR3EwJ&J+J8*)hKO<)5CzQLl_lHinLd?>3|UNW&ss3pt2ppc5gJUhGn?zb z&_r1NDkF9GKo69ie+)nnG4Q-ltWLL1|DbF|u&xZ-?;iPYU6%V5>Ips>~DKwQ8~?rs6O zF5sq(0H%mg)_yLW5A-`$+|eXluc?%JeP69Jv`^E-cla6GqB8xw+7^l!k(0`!yxhR! z+nE?K*TIp-n&D?C-d|CG6d+^;fmKVyFxJf9QeumbR~BoAUOIn{{DW=itKPr58vPRB z(P-1ENplhePT4~dzp9Dm&_9td_SQxxJMXcx0-M6~H7&o_;S#~vt%8Sw<$Pv8$Y?8i z)rKB)Zd^VW_##?3vvYfr+u71Iq{H{eOfx;6bh*&I-6juO|H{DG6)*tPb@D;j}g zpf6$NN_(3(@kgs9&{%dPkaEz%sV;TS51~E{c6z@R$?=f9tIy##hv?cealPj&W|vBk z5mNs%xB0E#=M(QGpgnTv*T@+`SE$@_ZH?rW`CaRH+YQLFpYC0_7v8#Gx3hTXN5g}X znds6`V==&#t&1=2d^~GbF{eI966qmy)F;?dpIpU(bG+eUS(3A+dQxI#Zhd>2_9Oe| z_|Q9W>`VMGOr3cnE|TmaPnJp|CK3|^IMxm)^P6(eCN$0w@MLmfBwS59Iz}uvh`aIq ztIzK%FtHiV9{Jp;SenRKe_8Z-+%J75}w5}e@R zv8ktF<&fG$!X)k=-rb9oaU%P^^WVg!AY(B@D`W}sx#IK7InK&)xtccE27D{)H+-q> z{wlbYw{ddO7-?!MNXM%xNY7cX$HQOCVb!gn8@Yy)xDlKgrUxLw*V9aF=3PUsNr&+S zmRa(RJ9WQDJ~aOc?{MfF0x8P2fTwjx3`t>JDAIJ{@O{R%*?CWlfcXc#vWMZ1kAJJ5qVH zYlHA0t)Ld(q8v!-BgK(D+9@VkuRDgGne5?Xu8+a}Sdr#+=b(_Kp?+!+%4AvMwjSi?E5| zKa=ru`$IMJRYqyC8@PVWWbdgRhtLy>_ZV&M(eA8p4Vig-^*SN{CeW5rS)pw;Ya-(#LsuKT~!aR%SW>w0cp4@~(!lqOyL3^*a}mliYl-!f6VXY zXt}bsYa)lp7{Oe@GG94s%mX|^yRK7gHL_QCQ)m*;0`phj1zE;_fQ6633R)XX%D6cI`uf{vcxl_-7#orZ@ePvhb##bM z(YjWN`yFvdf=#1`d_bPXjbVaN8VJ} z$`E?5lH@VT(Krp+<;)ntK@c*&Nql}GtWd8C@EZfVy_-2(H-&2)H<}RqEn|++i@muA zwNiW$W2H^zc;)J)?a}4jleW2wixuDaj1L_j6}*$En^#UeBA}QvNEQ00xC3ifVqlOH zP+Y__3e%%}ELQVfJH;#>ocxwI8m7Z=#+sd{UPOro>WEsB1%5Mq^b8HFR~CCd4-J-n zPR+vdQEoLc8_OAVOef?~lS7VNCbB>voJV&yO-1yb@y?;-k?isfg*0TMzg2e+zA6x| zfns{*72y+2%o3}OAw5pAGPX;)p!4__Qr8SaKW`Pn!{at3K5DtJK8aE;FJ~5y*fA9l z^;pt2yWo*$sA-C+@eysl)reWo@akNkn18OK^b7fw9VARawk$Ft$R(bqE5F0=Uz+3a z9}F)2(-Nd1{x{j2lFI==43hK6ly(Z8zd1=U#)U_SAXLj^R2!9(RKX8>CRej?nGX&vZx<>kWS(%xaEWAa4V4fbDqs}ERL41bCJHy1TMp0**h?_ZFj&R9hVVb zFTj;<1!9#*k&`wPtNAC2OLmAyY!F7U*uOghcQ+0qZskjLfARuu{;Vi?9z_*Pl+N2X zZ!1+_@h>U3P(?7ZToI^*Q)9v^!C|1a3)-D9?6rqcgy{+Ng+BYCVF#a4PP&EXhKNF5 zstybN_9A71E{68DN_50{96hC3hJ5^Fbm99#5KqzhEtnv*pTXcs*cutUd+<|4Cy+V# zu2r$G%RiF2nm3lW@;>)dBmZFQQ8gj1=|@K$f$PLh+3K0V>W~0J)+~H^ z!5puU8IG^*)ADBYZ=If10MC+1LvE{9`y8~!cw8AX$kIw{5T7omw}}PkU=;k3ELXC~ zEy+^WW2|Rm!L_@{GAte?W$QD*;#uB-v$ZL48`=K%!LdAz`Hl6Vkb`qoKRa!zoIIk( z?jY*(F9j`#Hjca-sQ+Siu^aYS@cr92Kd}EVI*I@sP=(O>ek2#StbkQnR;o8If|(H! zBdz=-u-#L!i(zAXF$S7xHf`2S(EBkx0Z#rYznr z)(}96(Gkq9e)v*Qm2G3V`gM$ zyXiRZEhG{>2p0JJu=liOyQ_@H&Z&GxVF&;fkTjKC#Q*sDkkTxQ=x`7f9AB#%gWp_} zL2gKn`S3>~T{4oYt~mP-2o2RDCY~snG>rtDd|nam2XP#DxZ=A8MAWvNp~Y_PZqFGu zW>V-@_+Sn76${O*IqlcRNHSUrM?4Pf$geE{98Gr(Nr>i85PtWLJ0wku2)W~SX)A#6 zyfjo^(d3p6qf#@9^r}L$$2epO2fMR!g0Wr>tv7xX$?7D>>5J@IG?xdY!epP;9O+ zIl4cw`yXF|f&DcRUyc{&8(c4EsTv|P>;82eZFPSx^oh+A|FH)#Zov~C!U#O8 zZn$|WVL$P=dIWpYyl{4u45lA za_kO^9jq*YBpVPWOdQU)!~OXtQ%@aob3$Cdwn$Lrc$Vb2EkLO`i}68 zsvTs%q+%C|Q8H4#V@MaZ!#gjo0bXfkdtG576^$9S_$snf2^~J9Cu;milcW^h+)?4x zD=roEDH_AJ%k>y3Z62$xjAb{|vM&j0?jhfu%kdytwDD{nx2zpD68s?n66y_a%FcPh z83X)$xWQhTocII$8GwycNs`I=vI~uG<`fd=uwrngIIHhNBon-voyLc&tO*_R?#864 zRTGA81BAI{E{sU4!6>6^Vwz(WDFWO{^=Y5c^7gSyFe9D++lO_e?QNEW4Cy=o=wq-c z4jAYf3r()=no_ie|F#R3wmsp-gycu=&wpqyBwReAev%;VvAl?Yf+7TbzY&aawxe6s zO7-Vvx3WBEak11tKj-Flf1@?b*&W~A9Ur4;9E$PVO+QPtz9%*XzzlZ_*FaCX_qHq6AY)k5G@EN9LlS5i?4FT03fkP$~|p zt~PxCBA3Tx zMKNyvQc0>`2kyY#SNzHJ+0wBXg8<4;g3&v-Bh5;y#gdb`iF)Mc5*M2fA4+;FQ##!qBSb z2m0Vm^6no@SFqJh_DG3lrap-V|74Ri>%%`)x)qMmxZB#NI2*Py&shoz zUm^m8gDBnwwT+7dFZbkB)_Yg&CYBBvY0=-{y=jSrE)|al*inN~69`E^|Cf4E?ow|q z|BA;j`2U74APF`|9~mDMM*|6pWkdn!X`o49`wxM03}}*-v0|EKO2Y)k!!{7VV34T8 zl1eJ#&dwQmNUF29J9+d=ROx$qZ@P3WjBk0atHU+rtm!|O2o!V|7GGc8sX^x)WnD~l z+)uDv^Ii{s-cB<(e0wm7*j+7@0R2GPtJh7(0{$e3rg6EwYB5%?$e6;LWK{-Ws9=~j zhtRjsS=LQlCMjc%b?8;D-1c%+uNUy>(-l*9WX$o#etvFkZPkY~Lb5+iFS=&KyQi1R z&#PjSO(OTrMWbqAg_zB2nG&3wp5sWC8xwspf)63nr?JVPXt3!qj+CfLr_xrR5m%jP zbK9s>Zzv9jTLtMf)slkaAZ`Qp;drZD3X`U$x6mRjGQJ>DcWL+mVM}P>;k;f7P+iy=qHTHqxv>QoE1Bui1}i@zCJzY6#{g7 z%<<3W@%@f7W=A~^EC=j+V5{Z92Os?3X)EB7t|2rjw}ZGNbXb4<%m84fAxcEp1zTbU zT?iZscQ(KTKHtUFEq7;TNv@uoi-u^(Q5K`g9EPoa*SB|9e)1`{9k18N5@DZHUKDxg zd+MK7>3rgs-Q<-=)chnso0Pan3eW z_Mq2pjj&5+P=ugks#yTpq;U-N{pka)d`+D$JsN4Q0(oh`eztymjB$90W}ZWff%r;M zSib5Ot4J&AkohmEUtg>+eo28%{dB`!#axGYy14Wx%fm0EvJh^-filOiihkph_1MXj zRyE{jn?6NRJgK1%Inq%r__jp&#aUlG(%ttXCUex#G9ch($%&+mURrlrvshaU zd+H{UnAeF^*F0^?xt|d)y|UsWiq4~99gn%$%-&WL-NW)^{H`s9dAZU|UQ39ras*Z{ zj0RmS(^~mT(#^9bJvIlqS`qqKHtOAkQ%9oulzVn1CUS?G-;J!ZDeOf5&=*r2vk*S` z>t39G2(Gk4au?wGK^``Yvv#-6Zq*>w46c!CrZ%CZUk*N|!nQ0W0kgclmU4GqfyMr3 z9L{3s&kM8KIYMIOx=DtdawEkP=Fs{-jSC1?SQTN88r=?aOt=rESun9bn^Q)$DI}ORXJ260ss85k`7GIGvrLjfo`o23_%L01R*=45iwDqKbex_!X#NtuAz6W#9;Y=t?(aFpl zwv6nDBS8SGmaf6nznzyU%1^(Ia}N(uazUqepq=(g6@D{G2Oy@5Q+RR zFl{rJ!CKM3tO?hxmox7J;V87b`!z^BQ!OJPG;U^DbmJfjJ87^zfe&$#Z9^_J zBfMh!9N(XOFQ=DBFoU~=sbe9Hdxc#&UtviqvHt?>!uXoQ{EWx>)o5cqI{PlwHvC|^ zg61@rr)O|-_B<2C)qvZxxg^8Nn>3F0dYzR${v%Wj)bx~R|LWl! z^#7>1J~A4JkQ)V*!G;3R(ZE$h|3rk5#RjvRo10T7m6Hk74c8rTtOQfGlFDOmOv7Xl zaYltCXK^y`vrZkSPyOoq4D4#MA!;x$_q*#oB)FN)-3=b{BZrZbP00x3@_D)#Z=U{q znqmO>eUSuMp=0Op`ukFRnmJ00Ubyh#X2F>|_ewIFphs4etW*HsBPHtIATh%jqm?B`fqp()L5fY^~RM9 z<4f}7Jzf!m*#pew%gG9_O0CHCzKH{f{QwJviMJP#b=8y!-*UmNq7#Q39cH;hCE>;p zi{+q-$|pCVOQ9Wc+@^_ROzh_U9=b0x=?ji89Vb~<@+<(U8w=mnqY&*_=Qm|q2pls# zEDa7{-x&f!huW!JMI{0+%y*pBPzi>&kWCE8IBOS`Is_F$e47B@`jXsdW9((o5)??l zxd)61JZhbJaP>&}RTq|#s5i23Qg0Q{S^eV*LQLTZQwP}vxpwCE%#$@5sVtN3Uxvs9 zyX_Pv5_*8f)ctbjl>>F{78=7|TC$b?QO1bcVL}K*MY(1H>Rw?LMuYWQiWlB>B(Q6E z=cB-M#aC*2i&-_>=uZNv3=gIgtw{}bhPZ!7E0s0|veL!7fZI5k+PL%Cz+Yx{vBl42 zO!-WA){JZvW@`{)Uir%f_QI4h=I?+>v1g`yZD;BN|l8oSKSiFX+&z;5Zo1DMmP0H`6AB8>p|X zL^RRoTfrgXCMsPFsD9yfpBF%MVN*-E^}q}}t<`wMbUw8F1tU0an^^WVjrIq=I)S-o z%nV?mG|;-DXQY-5bq0Ya{*VhS9`BiuVq_Dtv)HqSW#7t|E7*Uo?x^Ln+!YC)Ow8 z4>Mi#JF-M5+=F~(dN?l0yG4>{@;(NpsT%+trc|1#XXq)j`P`^Uhf9bT^Gdin0(Ez2 z0bA4{*E10$eG7?%=9;(m>j#&S;mipaxCR8=385}39mab^KnM;hO~b=LjZSS1X5bf2R6qB9D@^x2&ddAqXoUZRF*gJ*If;PkxNwMBY-lb)>Bn%xo>`~CLciJ z`)~n1juAKrl^UXU6i{wB;{~cc>G%r#{wD9D)X$=jdRoFF4ui<_0;Y2w)*>yj_s_UQ z+U_5aw6*0Js(j^G!IF4aTF7uS%2LWmz&~iwC}@LT7CcpltcMmj(NTb__l1+4Z((-R zpcA6y5vua(8~z?w_dE}CqF)R9et<1Uh*#W_huHG@KRMHob_hNAU!hWl2HkS00~E)l z`vuYYOcom&tqI!P5<<(cgBzn>1d)4VAjE_mxyYMOPY!xzm67WR_6%C$gMtWlBqElB zcsNq;Gh8f=&i{U(2_n&eG3?)}-5hL<-UQB#@HzGewqF9Z5^3n*l8f~d#Rl4lgFI?ghnasOs47(&A<_k|s`xW#%l`T_=?(9sLhZKW<(XJgGy-pE zwx`g1@435t1)r?qXfO!0YU^`>O#Yu4tbp&Ac6!7NdRst zHZJqx=zO@Dl1xX%DGv$4p@gI;b*hPqSx_}?`MeYJ4S19W?04FjCr0keFgU>XxHqH+ zn=m9`VE)HcoUu0<5GGEQB}LNlFH6hmZd?4O1dQ#+v+^tv5sML_Mi8r@0cPW~CinAX{iW`tHL))MMgr5MC;U*E>Y z2Jzw8+ut{Nfmj$tJ$)XjTw;VmRcM@IqWp7V>N7FV&CKVs#wJaVoD4(wWc8)gz!vPm zp!}5486+}?;l4O!I@2+eZV{p{^5spQ#A9Aw`-8m@Rz>rbuYejCfg`JvZGff^A()+E zQhtS}!~xr~mvF~$Y38~WU3Qdq&g-wY@Jl@NygoxwYqrx>aoS65)9m3NGWHc#PK=ZP=x3q`2)4!2RYQJ_JbhLRZiEpdXGFqLIPNX~%)soe5VxLmE;X zam_*?)T!@ezP|rQp<3?|2vGldYg+#2W}_2O04Vj^&kG{^t&_Teh8pq}ulO64^eTyj z^Ti~~g3vI63Y@oW$*0)Q8yjsTRKxwD1$tU3z@cJ)y-*t3VmKKh)$?3;da-1Dyq>Rn zd^6!iesT5tFux6hmte zdNR4^YHNH*^jJz{q&y$=0f+eo1=T__qvW*92&i?GI{YU3=$}Z6$oGkH;^&da_CrhI zEsm>*Q<*72$!XvuUUsMvyQW4!tL87>Pj3QqBJjvbQ$u0zVpf<1G&G2W1U$Lk9%{U@ zmBff*#4Vik5>x$(iJy!32Qk+;o#_Kv=~RfYU{O%clt1Y9DLv=;^8hp4X(*a76h$t| zff9#Rb%JC<`ki%;I$I51+cAwW=pckAcLNUa4FMA4 zp&etm7c94R~PIPZ$w!WmvQX zl>e`}ozE%xto;l5@c)I}ScD(I=kU+x>?gxNg)OodLOO$w?tXAjH54j^3?Zp1B&k^- z$O?LV>6qHwvhuKtq$VY=l(gzH<1mE7e}{8 zZ&#Gu1bz#ih&U6z7@s=&sIdcdSu0RMR_#u#3;8s2R)WGq^kb_5IzK-kNBOE1OG8Up zF*$9`g!30XWL)UEc=zMHSPtBdMba;+adwuJRh&$iHq&FX)Sbf5!cWTd8|E%sK`Pea z!#*p2BWLxK6nYsJ2~gJjb8JPV-rH~5V5GSYQj_68UBl-a%D%R~r>vBuBh&ha#nmjg z@Y?cPgTfM7jhvLoRwi zdV}^KFy}7nW@7(E2_FoEB0vM`vV#UW6vHGI(*t5ursx-hmlmk%V8eDua|G%4FQDcr_ea*KL1y3DpkgaG~UNcfJkhBxE2rDzB>~yimOV zkZ-uARh)xGZlCM8=DnZjAef$*$Ljt>G{l#Ie|Ff^uKG0m?c$>1nNnw&W@j?Q_+dZo z1n@d|(QiH13Azz%`Daweuu5SjN;tiySTVmMBu6# zTssU`%LuOQ9;&cnXYQ(9LrA{{sJap5p&2ZST)MEHHy$ z1%qcNg@#(^`}L!!V(Wo}SM_w2Nvde(Fu?x7`%`XbJrKGdh$h~L78uDY;vW3$HF%h# zr=_)xY+hs>VAS(yrvnZTifIP7B#mMN3Pouf-iM=deX;L_nF~wcT|g9Ezc{@xNGK-g z5A>WRO>+&q6inm9Vs3#Honna8D63Dg#npo&mGFW`O!Ew7!+>!`sq^_JlHO1_0OzGj z%gJyFr!VQ%)eAt#&eI(9VtSGPaUsI!L zE>+nX^zGq37BM@AfGC*En)aX|z(heoel!TZsP+MWDa$n599srE)}Xw`*KHo1@0C#1 zcgXQ&a%piTDyw>>-XCaW>|npl9oU_m^`Tr<|Fc4qw8{d?Nq(5<*ODaR98agHL#R>s z0~1Hh-4Am1I`3@k0eQPZML5b&0K*Jz94k?e zX8Gf#$%Q~&j8jw0k8(R%UTIQ-WT_5ff&OnFJqoWAn@}&+4{(UQLNt|TRpsli>z|zD z9M?tm7kw*(uIerhuG(;8e5w%~2`cyn%41XqamPt|Su4He7Y{*q6k}XwQ1{DJJJZ;0 zceoW*b0!O)BMO_HVMJ2f27sKFWwY9)>i=!epCv^AI{&r7Pav31iWn?4wEhf+n~r5=xV9onnFk><{m>8;i*1;@QM-;s zGa=KRi0{p;1)FvO=@5n7zg4UjeF+`uTv0pAvF~x#b=Ipn;N$ZRp@)zhXUo=hqD22R zYC{)AUY%fRlC0B!V^etcPpd<#e8-MC#A}iQ(VP#)mf( z7Q>D4#@ZAUCnqB#qo`*3T9g6xDmzXGZ=6AXm7{YCNk~K1FD;GGhce7nm59m+RbCqP z$7Lf%NVh3EDV2?8+unFbGx~H8uT9iJ#=&4g{Al}ChDkf`IuFTa>bVJ-0K>0s=GJRz zh(~z5abG|(1>P=&jc*J*io@o;SRgSK$N?rU-_04<;Es-mYcPrf=cj{K>|q>Z11?+F z2^ugS#jijpv_x1a3dop|F%zH;tj@ZzXgRKGW!6#3STp5x5T*FK<;E6GCP^|<@1TT< zgPyLzvH}w~GgK4lR2#|s8M~+1bIK`lZA6Uj$_!wgn2;BkWYp!gO`vz>*aeqYPbg;5 zOCz%rqaIBRy(x7fCtU2$Q}ag8GOdD%1##g@ey- z+`3IPvw+CHAj5#vJ~;pj<RU5+NRiO@9C8>1?5u?XI}0mg;BIbtw7k8EmdTF5QdVpMdw%M;a!0 zK}flMa^{`@hpI&c^tkDoGtNZy$}Q4~;+L|-2z0{emz*a>!k(^wh^@XZ#~$=Uu(L!$ zydnxMJr!1&cj5PADcknyvV^ z>?~uNZVh&b@d-bq)G>4O?=A4q4l00%`)#@N_i(S-9VIc`wlyr zpFshQ8}oG7@*;9AZ3)s>`YeIc8u+hd%+Tx{6A=$U=f*PL-6Fm9D}OwA2leaMWd# z)YMmhgCZd!j<+~K@`-g%^Zu_#T`pIA$2mSzfGNJ_xK7uv;BV?Ij2m4R(Phi&~<&XOJluVqATzx6wv569RVmh7pq zuug`Z*C_R3gTYi9mcEFSjN{1HUjSrzP0mkgmyln<1w7s=I};-I=BTrp;?klE3;h_i219b3)%g4#(^I@_m5oGN#eRRP@C^72~b zUW0NI$}vynE=9@ToNz0SQ)X)hsQ!KLmodNkJPOnRZ@_hy0FpZh|r50Uj zI75XFOKjrEIB_(WHCu7&)`B=ON+FPkPT?tJGnH$TOc7Go+iVhKuoOU-l($lWz|`sf zam8um489seoM7RR^WDPg2Ef}L;naZE{Y-#3WG>YzMY5X)VF0Vd4CxXZ3vJfXUo+f+ z2=svw0-P)NyE;Pk@J6RBIret-K8%;F^5y-+Ej3NNfFKu3x(J8GdI_CAsC?rqUBF8neK?^!vcWmd z+9y&O&B{pagXWPZ<@&E4a#wJa9^N_|3*>vJf|oOM&TM1>OH){OipxS18@MZEqAAHy zYV-jzumb-FRQO+h@z3kP4W*n!RLZUH;=+p>=27I|MHmlE6UCBbW!{IBsybrtZ*?)M zs2=r)EkdMxTZi~H%YZ+84GEJxj-hE@W>(@JVL_hB&Dzh%j#h!|;Q2|zvMduMN8&ou z2PcF=@ZP?CDqT+OS+QaBx7`t5T^s{P?PbvFZ=_7-ZEq*QS@dZ*4w@0>EN|7`6fiNu zVVWa3>4F$;wf%-8ZEgK#yy^se3@_kFUECsvsSe4TU`i_dAHa`VK?u9g`12zZFO&!W zuytzKdFyamEfVz5Xi7c{b*ZchD`sHjkrBFv${@yD_83C7Q8*slCChipvuT?$dbX*u z%`Gl{+@3~HJhdjO;VERlA9^N;9x_~_C}jbc4aLg4xVI(Ws{1pg@^j>C=J80__^_~3 zrhELz78mW)$pNhan2FrXYdogET_vZ#bHv}BzUyx~ouEordh+P;v-G!A8=B4&Pj2J% z#O!61VF;58@oJMD)km30<@7nDZPBT2$i8l^_+Nxxqrf>}2poHsliFT0LRArNofpsj z#eQdQp}r!_d`X5l6T`+->xbUNA{fa2-mohIzig+|UJNKLv;Zw#&y=hkb#>{>d2450 zSx*-5XwJ(`GUDYF%oP=vbkN-7(i4f35ZQrT%Th`*EOCE8)RC7wj#W#Ab3x+C(#YDS zg_plTi@XRd$wCm2ET~*F?~7t+eK>7k^yvE*p!&`e=Iz)^lRHt4vsWitDBn`uC3|RN z`~?rXMg_=!!kdlF%B|IdLqj|(dnX=~Es8;5$SHZQ*=aI~DbX172K;ELas4|eS}|bB z;D2R}@jNe70sHTKOwD{(a@5rFg`q5Q+_D|&R`DCsj*&FuALroo0)5cV2Sm-3hYL5m z(L(|CTGRBLdinNIu$Hso#=IadUy#ILDd6hZ zOFQv*i9zo&6)}*@_OgWBLk{D?USO)=8Nrt&VEC49Eb6l>W)>4e!CPa#jY;DnHmdT~ zji>SZcCUw+HLsd|!a-2vpD#a1IoaqTahKJV0HYF)hs1PqWzs`jYvH?y zcqD}g5-k7j|6pHv^{!lFP#mJSu-684+NnqY;!PzFwiSXk1oW^|Yw$2C9|=YTB^eg8 zLI5pmI^*K7s7QmoOX8(UW28P0Ay=OI-b&Y7DW|^eKkdv#oz zdbn`o7c3=?e4uH7s3{m6D0`o?HJl8}2~tF3{{NA5PSKe#%@&R)wllG9+qP}n&YNUn z+qUgYY}>YNpZWfCRcqDitG?>mwfED4H0Et^)~Cedw+#DZCNF|jCMwF)SDaz2u%Y=4 z*IgX>no5J$F(R3fZ4MjTW8y>~60`%-k2rtqkqIXi>lE@^a@k@i!l*4WNwj_NQYqd+ zbI8%3UfRk`cA=RxFxzMn0Gsv3zpXRj^Sa)E*klZp8yYQtV~E4&S&sofqB@@Wg#n!F z!NU_Cr$nGybvOdPi)IxDO|z>i!>+bOFaPF+1*qvG{aw-@RIs)!D)*FJ#dr?29;x@% zKLM*UIUOJ6*bFU7@OHq$^=h!IU3R;zjS)lN zor^r^Ffj@u8L+U4UJr%L-U|Npf`4n4Q}QNpg>*$}W259a@c8m=)5~&>QPGa%EXB{i zm790>_n44a(qviQqxGn41@?|mTbk$4ukguKd1F{l;7#xoPq%x*6%tPKYl7NLi@N?j z(izcaDrk+=8ayW63P5%Ap3y6l75&>o?uFU?_2{a33d$Y%dV2+#Q1d)19{Fl=x{xi@ zP2B|eoeLMQk3g1K-90OUl#Ae7e+>MaV&9>X|It(sFeL8MK=#-S#yH?7wjhNhkEkvw zWFI^l&n~N01 zU&N@}69qnH>;E7E)&_r(P?6tvT9gRek)Qzv>Gy;CRHk{m^H1}5hulwOG6p9k?o3P2 z{#;R@zcNW&1w7m`B9~D7fK*B|bf5u4&EtTLiy8n_;cZIu{FF;Nz@9ppmT1fPlgjY~ zzs@KKz}`|R=X(Uu^vIsLwXCg$W=MVVd&ocML~K`675cw}uqA2AY^7)vGEnkQ2AW^? zhJ2au%S{tJs^8fE6C@aIA-GndfPjvX|1%ANf}tj^qM;>Dcw!{ts8IkE5qVQVw*2xm z6cs*o(4_j^jIV@6jRKW+^C1?rP;xUSu3b7^dYs%_L;j1&!x#sOp#c2($2oLa#P0f1 zz0Id5(>a-6{64Ym`Xuum^K(B9)O#s=X)2M}zHbmGOC z$l&2kZ8U@%#2n8@-T}h`UX0Zj@y4%AOq*3=g^IN+_)axe-}?wkGsXmXQU`pUs2p|z zMVq~bE;3ZddQt4w2v)KKCH3EGe-J6$22?bg4!lU}u&G8|lA3s#^r^8#izc@wuZD`A zg>u&oIiw1CO2Cg1jx;iIV1GOR?8a4*#A*f?#-j1wfaP z%bEbp9b+PE#K5)-_nW=4crb?**7V@$KXP6P9XYa8u?@YKW+~dkoJkRB1D*jwZcS*}Gat5cuS?{JYoQ1cgVhSwh$Un~YT?w5?VX z2{d#7DogD@-P{vh?N}{Pz#*=%1OX<<0w!2sQxITe0m$f~qHXD$B*e_l2Q&g58qLMc z&2F9=)XR2mlGfEN=wx#$^*HN%71dkTzFVm)=G9x5B}G5Z*D?u`WD+0IX3gWA~jN&HZIw6 zqS+*i5*b@(vfxx8Qcfq^%Yy(=Or)e)Ubhj8xe0Dcn{vtiV{|l<1u9uWC{vDx zRE4pSp(c`NFf258x`zl@puf3fNH(VP6uPTqOdLvSce=C13R^?0`)K7Y@Z4h*uvV({ zsRS}_>=HYMG4jT8X>H(XiA1_;Nu&-?Wi!->C4;Lq?x|=EAF|nx_Ku{DQwsx(r#k%3 z_z+Z;1xl$Z0;+A~3e>9eG&=_*+y}xY(tjI3ek*HIi0GBf-5S`E>gF#%YYiRZ_SDW> z)g`sq#Qt7}5g3H7Tbb`r(h?SQP#&C8>7crSb825o$XT{!=5&B2o_sMW@!f{8sW`~ zbq1}uG1IoQ5GiGK1&&!?S=0|9LEq2vX_31yc!Z5ai--dt-yk3eF0p-1jB=xl&fQi3`B#MjUG0B9eegK=pO8UHebj?gSv3K(^F= zPjA3gYx25N?5rflEtE91_sNwRo0_^1?97P(Jq)sk|o9rTM5shDxF*q zs$`}=Z}@*_i9fzq%KJ+i+=)v zln5QlHIob5ZR?B}JCXfIaUb=v<>s?xy2tk!T4uJ37p`2SP#b1BYMcpfR?gTuLM@*v z!3PSw8W*J2_cj43mNQqCkAfvr$rz4WINo0xVUFWdcMpcyd?NT`<|>w*$4%)h>!MB{ z6p83)`j*s`McCDO$D3S>50395l)h2#X%+gaR3CFGZ1Z_P<)7`~sH*QQ_xK&@Y7ZV- zWME()=BEKl9l3ZSno^@j{rAZa>(Rd@`n-Yagr96+M zeX?l2{}%GemhwlNoqrqJEn2>*vQcK`2_CeS3xX+n*A#Pl(!KI}`9 ze>l6Pb_4)y6ZOsnQ2BPeVK>{726tk6F9V00jb))!BK(v0E6D7dvKgNBd2o`&D>T*ip&LZb z2ooSPzr}>p8z&4@L^b?d$%<5~T1S7^Fm(3Tmj(h(lH5L~L?kqHtDv+kcB$V_Ek!O_ z+9`X&L7BCMAnLN}#eve>W!W=9fdbWcsn}zr&4yuK?^ZM+}Ja=?yA#$wb{x_hl7b5yZHjY*l^$sN82Ntu4F$7v%-ppno zU3vtC4Gf$!6NB;h0g3UU!ygr0Sl<+P7jU%X-|30ep5@cdScM~pIYsG#C$KMnj3av} z+VE`qLx2mme9-pz7<)bhZJw zbS%`K+5Wv8^#&?uBEqw#gC@P~xUp%R)`m@K#*OFVnhzt)^)9G%*R9&I*wO6ge+9ud z1AnW8nwES*QN!I9mh4D8uIKqz39Iw%HFe>58o<17$C=`eJ(fiYny48slyq$6>xQ!3 zR9VBa;;wHkH$BXzT+zzn*$G*XME?a?wmH@yMLS2^WO+vN<{k4CV$^s_QUXcsjBkk8 z1PQoZrenAE4-;6E#dvvy!iBAwYF&RS62rAJ(pJ%A?U7;fday&lZvT60i7*n^&`Q_{ zVh+WfzG{7Z_r`qB3HBIF{=3K5{Lq&>zw7}Ypecj+2O%}}RE}LPMVIHbPh7zA8zPR8 z0bdMc5R8~eN2M{zas&~HlRKI0$drUwlkg_gKQ-A*QqebRO71ybF}w5CD+_AmCaRzV z{jiWxoK+%CX1)#ud4xj`#N`puIf8)I2r*JqEOeZAD7zk0HF-`@ZrC3%DTTL&7M+<8%>Sw$M#(e1@)}f7h=+WuYlsVG5i1{m#yj$`_8}neXFOtaz$ryEu zW|!1`UfZQRd?y0Eh?q)i;yG%IMh?$8deHu$6{c|$f_TZwhkG8FYz5%bxTWa%s_TZ- zt1~nzl~%ZzG-r7&CzgIJ?~utX^A7J`SCvG(hdg)}+=G1ZxxOip>o(mxmBF4Xm#z!=);YP*@TPR*F{ z)!)X~Udv-A%82D<#T)Q?@ClU*)2c&>C!!2(0Nl+9qYzQ zK3^h(miABA zCNTmpnZ4UJ9#Uo1h$K%m=qY5b8zb0%EC{L5{@6(E5OPsl?IvZddgS%UzNk$ zv(Kzk?xvvlIuW%LxMwwlp9BD@)kCc=$+v8I&#>TU_6XoX`PX6>O7ddFMoJQUepH{) z_HDCG(S`)cq=r;Rao@MX+lwdgNI+0;-8i5ZD2J!y4&T*J57kB2VgtgsqsnQq*@5wW z_FMn87UYSP!;x!^IxND41u19s*Zj^KK37jKCg1W8|EI=L>fGokcW6jjGLt@W&4W=F z@fv991RQ{Iea!6{1mWy6LJ0g}w8k#2Sy&adC_!bC#aqN}7208_yv=1OzwN=-7jKh` zjNTd*E)J=!MSSjzu&q)Fn)c8S_nsn=;qx|f{2w_9-F79Z{1h@GNTAEKIG#2N?=CX> z_YC7ujRIP2O;UK1GO{oeQUfti3VMi9e;7=4ktm>ejsN&wmr~uVcPA*6*`~<7pJS)vu&%v(#8fP#{y8p$ zz`9`{8BFs51Mo`+(l!G%4X>G0qf+cvP!M@s6T|T)H?7_8HI+)P(_saZ49`v2)f`y> zzXVLzWWDkfiX~@>7$6%$46ybbzY`w#HTaHT^5*i#UE$*wItvO3dYZmKJ zKGtas2#^C}Ef^QJ(7`%NAOpS*Afw3AS-6L?EvjXKn^q_Vv!#-sz}eA*6)GBlC7Cif ztZ)TEwA4-FvRMK2?Euj} zj2p~)sjs;te&e6E0?JMprwNH8#pl3Mq$k6WtB?eS%8#oJNej}+rpx`8=z(%743V^g z9AySk)syiWfXREKbn5KOC<%=@`R|}UD`U_Ejub8i39^H^ptD#={!2mA#QT$kbUhDbF9Kr-}BO{yr_TURq9q4=I=YHZ$gPa!46 zBh{?@IqBVI2}t*ifzVIL_i&3_!gVjDf`;{ZA?19wq2lv}?Q`XPYi}#P7{L35Iz12k zLC+$w5{&TM;);C0Gel;kPz4R1`>(F8oP86mw4?nJmei3tvj#7j+RL%JSN%O#J@Rum zu>UrDPCh%_>;}YHi^D9ZL~AH$=^3x4mp=d2mOMUY5kl~v8vmI!`4>K!TodRH-|Nt` zMw!yrtQpd6d1hYtc|lfbP(bPH0pHR`7-C`x+&qRqwZhCZT=vL2M&o0$@*!vj^byaQ zGJ@%uPf89{$9u^2$hZ5UU-W8j2ca~-1})G8@Ou@U*0mE}ioLwq89B%qW}F{c{3pm5 zC&;<-7O??0UV;9$Y$MR8HPq#G;k@9xZCmd5iw%&4Kde>Uda3Ez8$g*wcNY1^bGrn> zsp$_XNQH<{*VqYm5k`M^g77xR$62iAyLHMp-Sf2YDb3dfYVr|y^IF?2D?T3`m~PFI zR{ODXW7VejUet_g4JQJO@?O&d`%)b%E)jT_ca#lNESXLtbxp>N^e*LO~ z>G-Rwf$(c9A(T416*9Muf0>J4iaB^=ZzBHa$pAueLHwA&9ukmxxAf&RrTNjU_m^)l z^CiXc0jPDi%2|a@2!^QL|G-(;4?5}Y8F-ts?;5pz9|R34BcSfJit0f3>#w^%f)GUg zt}|NIZN3Aw$)g#ftmoNnLqqOHqfL%e7S3UfLz`FJNytZgXKrkkS*2;5J&;Ge383$d?cG?m%_v8*U&UYv3M}pLxm-ieB|L@o(>j z8C|;zozD$C!UQVgnzH@L;l2^{^(NcFp zg<{Y&8uED8zu_+DxEA65&0+MHr0=v<+2a`vK-+B3Au=oxwEZ^zzF7)+2X}bbt&Mep zzb#V@EC|4BiHtWhp0tmDc+wBj`mTWWBNBx7!xQ@w*|<3_cmnie_7B3SH{8Q*Smo%b z@Ki28d%bxMyMp^NnzDtf`u2PLFJjcw~iRVe|-~#U!?+Cy*YqV>!ONei!?H^@fu1k`Sy*+bl%OhlS zKergH-~)lCgqlV%RQo0t2E@$xwAu=&%HeR9!u38U0w;*fLlh3 z73>)`nXRlTPNTRo)WYc+$0YQWxM&^!{)Q{rPWg;4`I_7-U9D23*{Gq2>h1D_PXe zX39t3Gt{#w)^1DIo`3&9)w8SeHuP!7%Vi2YK_B+Ri_oJa6*8*p|4dG=WSOW>^NA^D z*{IJr=D@b7G5$5>?6Tk^9tc3^*p~4dsdh;}*ihN?2uJ6_Z5l0~H#$M>*gPvHotCO_ zQCmi*MGCa>K1PGhV31FKu_AbdK0XaC=_qLtT?#19<^NSF41X}(%pPQZqD zrde%@-2`S~5?n`(Wovyhk^uu3#FCQ17KPy-uhh*JcanC}_O%cMmBBrjqdn^|gj+@x zm0r4Pm5{IvFfmC_Y7 zyT0qvFsps}j@b}htMc8ugl|=AH=vyFnCw?p&=IE{RhG*E+scAl|34Q9`$x45$Flth z-Hb_M`nyDJ^60AU6R7WA5i6n_OYHwtYfos)1?z|t@5XR245lwN4{$~9rIR8X?yI8r zwvGWgbBf3d>kN4-J(QRY?(-cpAxf~0O&cyVdk5r}ej)a)mHE_`eW*@=srfoKX59kq zRe6*-DRQJbCWUfZ*VejWGf9<-{>0lx%Le0&KyW{!7wZLQcuHDkgz17M_fd1xU0O4( zAr6D5Luj%_mV>d{KC(Fhy{%a&-*FplU~Yv1DT^cdLAColG^;4hmCZy%DO)K@C_=GK zt?9$C8(s#nNz(eoqv--*y%1WOn~brD8(~9A(zCn&!ksBHb>Vdk9<2(aV<9W)pjuUe zJ!-|9sj6(-g+{+MMw%Yl2)=?^F=m|rq%5JrPdhr6V9my zVg$kIrt~MqN@JaoF{Fu3!zw6X2%7ob<_1I>Bt3Tda=#ByP%N0`j{>R@2odaQ zOw-9T*5244M`TwD#{y9&Gl*ldVo7=xj(s>bMiXUbxGW?eiJ;^d>@W}?B%VVXMihyr zK{+p1a5r^*M5acamXlcuy>Eh42WyQQlgko#P-L+pDnd9WO+FA+RJi$=yk4IQ=E$`? zevPHFG6tDSuzUnaomNT{HD0luXbZ10*EjI|60Dlhc5mqqELZOD<@_6`Mq_547C(`m z=nJ=CHfycPIJGwfzDgDx(rrD01Hyq}uflQXipS)D*F1%ib3u0I|3FH}?bz4GH0NqM z+?WW#Ht+0~@zU{JxBkzs72C0{mVj;3e=Oy)N3?yXHz5fyS$Ot*{IfKYRGvd)NGGOJ zq}wmW2qg@vo$dnK5N9A-mQ9n4c{nkP(p&6-GJt6g{A@AQ;)7`{gBMayYiP=Z%1CGV zM5J0bN8MU!?^G)5mJY|EQqol6`lL;*-s)zWD5yh+ZYy5kfeWKLC}8zhy!jmh;`Ccj zJ)-q$=p79Zlg&~cSu9Z{OH3^IY*F16$z>9_8sF+h-i%GXZ)-=?=Thp11uF9<#m%{^ zyVi#iB|3+ap|pG&*1B5_{1?lf*fNlsC`T@Hq0VJuFyqecukc}4Vya1hPJla_aJgo! zbSdpW|4=9BDy`_C{m=o5k!G2J6Y0*M7wD~zG=T#E8p|y(#KN7;aIY!EG_JXjw_*0U zFCubs*ti1lLHQ~aJ-<8+$ewK3^VMT z&2lurWjg3DqW;y;RRWa0NkuZ5F`|BoS_7_o9k9oBM@`G~v(eXQMG^yse&G*?97mUW zjk|jZat)e2^&}N^C3(APZRz56aHnWyEpvWjIXgEfE)%&-@@(kTZlCYySRY}^QoVn? zAWUdfqx;Zhz-RV{SohDN^qs_Z%s&7TXCXZxH~dRvo(<+1UM=&zd_(Sz3H*+BlU}D= z)*iK)i+W?jy7cN*Y-7IqhC52jv6h!Lj#i~)|GCd-g9cMY$Y{4SF-Z2MC=|p4aYvbA z=dY!(M|3zo1xpN4%57RhB`;itksmEPDh8Tx}CdKbuV5=NNr4jw*UkcW^?ZA&uWHf-WAol!LHBYOKPq+ek)rNXYH}e5oWu@Sylji<13FLEqPTiH29C zd`+pZRVIGBf-4WCB7}#tyomPL9$*{Vii`aqQ1XhVU}G2qApr%2yn-x{H! zaH-#4E005KrpStvJ^H21gpCf+6)5OhRgow>5`AG~lF`H?AH~m?hkkM9BWWf%u0met z`FO4yyg(+IMypJA=P{hLnU|8#YIR79#l4WTZ^p&FyLMMUQIR1fR`&cL&6XkB$$Aii zpl6x_E?jN!hl1zvUK-`s$0rpUr(`vBS#rdHN3k+0z6yDxzeDmQ&d4}GaQONBQrC^< zLbAT>U`mn;%d^d_i0AgaJS>dVc;>pv{k&c~yM!Fm)vNxO#TiZ`<&5MyX-gK8g1Hni zZ;6KVrH8KNMdbx4yVUM0U+eUkLM~S~O|}Q_M)Ws{IzTDRVT%ak#NmvfMn92ni;w~EG@}E+6mZ&Liitn| z71Y7J;t7lB`qrGd7GqDh8S5J-+}^^Bwj*VwJa&gSGAxQ3Av*e_ff}vCax}Zc8)h3_8p+~8yWgh1>gnQIzRcB-s!cUp?k5*{Za5-oiVKT(7~L;1lCvq6{iHt z`)=cUeLO<@PGXcJC^UmbmBq-yErf$3)O)D&1&xyrkx?Abv>1m49R!mPc|w_*s=x&A zG71SV(mEb4Jcq<10T+7vbsidedy0rRu~&-397-;1HnZB-ehux7QU_O*{_QS+0^*0SFIv~p(zf7LEa-_lHg ztdMFcjAsHsIXuA(ysm6{kd7Rxc4t+r4y^7u+B$o-iKVm1xW<$TH0|r@AVr6adl!6T zqg_%}Dl&JDYg0Q}$=Qm^uf%atl^!$OI$6!(nG7Oj?}vmT?JM~{4e&m$6%zi5!BmWt zWG_mY&E_ZV6J!aZvRVvBYP{6LoRcW#H*uNUO6CMKNA>wsIMbUwv%za zV*l_kGSe{lAdUo&N7zx_lq;6XjYgFWn{qa{XzS;3^aW?{af>geE4IT4TW$H?XUEz` zTP>LXs1#1qfu(+EgyX#GwPC*OCT9Hw-|lnN+9eQI3D_AXgv0M2z~&nZkjRT-0Qngu z6y60)*h~c3v;o7J*Tq65$r0D-Wf$z7SrvvzvgYLsE1yF@;lb^c)-2q5Jwd_QD-K}$ zDf3qB6`nIb!RGlD7O!t}Lp$K0fK>_WnBnV?*<@(Dl&eTmv% zrwrFYR?IIIQ)FX}4gk$KPc>R)QIWTdo=(#%RAif42^(H($Rt0VOdPZNEjD%@&~FIO zvdJAlNOeuvBOI*SHl;vY+bd7yc#H|x3at{?n_|}#Wt)_27dG*LL%-Li=yuBVd@U=l@f; z>eA_nL$E+V4VeEMbtXK;0OHnNwwuv`tug;d0A7931ke$A1Z`0Z3zjU-gz3w{tH17O zbx`|)5q5>c%`1qAemPCQJ!JC}dj5F$f+~yz_A1x9&v`i5n>dI&E^N8}Nzr!wLn4)& zk}hRLFO~8CFaZ0O;-^41aQ7AzP4`yP=HiOX5IquQc{rZ)CoMpA%RrUo=VU9FR-?hj z{KkIDzQT}**brf*E>p^kQCEF?*V=8yqAUIg0hm;(ZeAWKkrMGNw=IcenLb8}U zWO`H!i;2&yBUU#}CHqN+xh(}6)%2+8!9F(&>9Bo(|= z+GwR_z@D%lsY)B={S2(*5UP4|)*cPVZ<%|pnJpsd-vXXr@9*FXIKGoAA8FnY5Eh08 zimzb*O_(k_%}iGR@_8r!LjVgJA;mjNw2Q5W{VS6hP1&|U|V;+v5T@R z+$t=#9$B`n3wZvS?rJa{39*}?=g0a|S1_T>D3NIhl-#c`L|SVwE1*Pcs`@F!p*+Qytfw3P+-~ zKEs^~p7W5S9)zPjxSwFR-}V9bh}@|75SLn`A**7f?S?AK!Dqei&||qTOyjM=pv?+? zv&~L*wTm==JeYF-B>@Qy2S_hA((0KWJrAT~iY(ME6s1jE>Ku;L%Fn~-e1Ax(Hf@CV z1gGtk<*soxZT_@a+1}fDY^sjakK?zFi8&V)tW12klpi0u3IxG&=E-Gkj>?NXG2Yyx z`}0KfCBmiM5Ottbo8zL@TD7I6msqN!+POBm;l)^M+9}q%n#{T|0&v)?$%e5Db@)jZ z+peoce~fQIn0*0d&9ZmQHH&@HNXfyOHuC-u6wGOP{$r>mG$B-^(3N-fgV2R$1v}?d zfuNj*{%cH}x*s)<08kCB9CrSCLDZ(4*tu-K*`_#q`WM3mw}Y25+cHhpCrw&%1%53m z>+ZEwxbvw>~6E|IAbITe^Pt*MN-y2wG?0Vvg2JWPkSg;Qkr?wGD~ z!xXhJLnrTd33kp0qboD@|1N1c+~ioF#^_0?+5ZwaPFRbecBv*9s&l))>R*(uc3l+q z4Ycdh^Aex(FSmeAT}3_*QM3M&!RRVImD!TP_RwN>s7lKZ%qC7Q+{(3-O%6@)7-f}t z9u_}S_6|jB3os{NlwI&a$p&7B`iV*#%7RGLn{y+Sf}e3tg=z11;oU+ka689n+7k~- z76J{_TIWM8VH$P|rI7Rn^Q1k1*Ci_Fm-#pqV_PH;@)Z5$xpqP3`kn?XXg=P%PUV<2n<)350bBGrjD1kgwGMYMlu| zif=O<=yev3_ijqN1;PTgSfoM2t3!q5GQ4JM)KcOPca&oGK%YQZ-zGBc8_Q>xWe&40 z|0F$V34l{<4RK3s*2A>g?dwfwECf<_g3`pvDXseNpVkdw6#~>k(NJ%+hRQb}p2imZ zUj%o-X)n#V*QOFVdEtoB3%FqwN`!@Lv$}ms0RG6X$ZNCc>+*=i)-`@LmXT(|>Est7 zIWB80uQb1`%5e@~R41l;Ar2_bDt4Kd1^K$TTtJmxq zAj!q#Om9nz=O4fRHD}h3-`?lANmTnmL z&Io}~`dRu0x?EIL{ncQYOP(Qa`NG##Gu4$N+lPvG=|`+%-yrL$E7C`0L$9brTkbC= z8~|c=DqN=D^4LO8U=o7E6Rfsbi^+w~%D`hKO@1)h5Ydm|a94cFRHjwTBnIJm7(|)L za`UnF1LdRo!~J0sl&cJPP31sGj=C*v=&E=D7W-xW^s-NGIzD3r=Mvt6&FATP$oiD9 zF*cEDS<*%xdITBUIto?4Yv7DigXHEE86f+bt08^7E5u48?3$>QZZQbfUa^@-#rXge zB5|aBV=2BMT^PGAk~DH5kF;}0u6s3Red0HT8H!b9u%>!U1`93<=fZ+#)A}lz$+hLw zOOY){k(rh&20V6(VWn}4ZXL3&UBu;~%^BM`Gp!SbISo0EDosyKmiq(jJEs7dK09 z*B9E?POdmtwbqYVM1JmME`(!OxRpV^q#a8zJ9$cG!6lRlXSGMPXR6Kz8_PJyHF(_c z9V8nnpPeUiQ*nI95EZOCyR~Hc5YVbgi|*#KWrLb!b|p>d71NkgaAI2%8%WgHQI-9s zBu6jRD%}3?2=dUwA*}}&Dby3GFko%os=4TH_Vl}mhzSt8kx9QGJu2+^6?8>68GUs& z{toRMyrwTI+97a}t>7$_&+k7RcFIeUWcW@cesBHAYLW&1;TZGwB^s?S3&>cAaxnYk z%21caiN^{sh3a?|AJacu1*AG2~dzLmCZfu67JN_mUsa@D9=u9eh_EJ?)*LLz-P^D+?tl8tU zpKo1l-U(4Z=2plD0BsH{0^AI50s9rtv5&alZxlB|bI_6$P7$LaXOS*3Nbg_kR2{8k zao^zd0ep=?3`b<5*D9cowOMmWf_gFEKwq5%0ePSDn1+4g*+Mr?Kc+DuXFZ%CKatzQ zPnaTXdn{;q(5QcGH^m5}Rv7b~ay5c1n|eJ+F5J9q@?Xa;+*Shm0Df5fk%XrB4OZK3 z+e;Jc>nAK`{q(3FdSI(xy#=+6{(STV=l=D$tmPa8=!IDC{;g$1DIi<06QH6^qNz<& zb7pK<=uZWNBq`y;oZ#+#%UvbA5oBpPRftV~67)oDiv@P65uPMZIL|jbzs9Kunu&fg zuyBu2D=T7oUtC0Y0RiWYQ=oswuoF2VCCggGbbcdO4v{vtlA;BuA0VSL)`WYWw1+No zoBvE=ldwjn#A%Q(6O-=_EmdlYb(99p`=ef=7N?VSSfvLC5xNW(8-Z@X+Rs1$vFVN% z*mE144dp0Gz(!IS1Rh};^fx+k;v(KziFF8+5p@uZ&tD0;0Ekbwp4&-(+ZTd+pKy|j z*!%-V85Op{mIQn{HhS3bkH=~X6`+0@){EM}368fg zhh#wO$71)O0CZ2qce%YE5~5(WReZ~sA$kzh*l06|hj00S^E9MHOQEbfNY9_C4Dl^H z7PdJq<73TQUHn!Q4m04v=J3ldZyy>-2cLxx`$Jf-|GOVzU?06hg9dH(I7k#a9haK@ zBkYHkxL?u&PYj6^z31%d6C5y+fwO+$eoCxGX{~mY{?i1#=UhAZJlB@x!J)?Fq{WZcuPqTL)eOb zbm7v2h0bXwtOZ6?+s)Q9_RK^uo6OQC>nzla%U@{=426Mg2MpnNsx zm?seh3b=rkdi}K`g}+ga_RNf6kjZlYo}*-^K|hXFAr7UqONG!4f;yvIueO%~%st5+kEHz^RpkomNnC%G|{C3@gf&lfPtMbn~YvgwBmET)l26 zww?~1cA-Pqblo9C$h_RzAfYBa`K)2Fcj7R&3h+tb71NLhN`V@=dypYa-euHqZ)QXAPIHCm5}|VATvP-JY>n;Fj7 zoU-TSH<}WZy-h^byXj-GKtIM^!^E|W?GwKc++Enr!Xf=atZe_*V>sDQf%w{u{UGr+ zQ#Q?lyx|Y%D!(X#SIc{b&)o@r>9j}UO@mj(rgI9O6lvX?A?9DYechINnOrWgJ3!j| zV}2qZ!Ttp<&B@$i4im2*G}VxjsTYWaH&c0?x{^4up1jK_4$i$R?Aw7bTo2wI7o8Us z_^+>H&+;Kpjl6KWz%eLDyLe-6zg8LU%LCN=E_rIy4%z%bp1kp#(;U(x=zRdggW`uxK^`2F3u~LD8=}x0?zoKuZS@K zv>ib|uy#Xlf&L&1YZVaAm_4lF8?PBvYooe*><}N87BglYWIYwW}4#)|L zykTjayS_}$OPOFkW&JsB7_1YX|!-nEo*)FCaX22LrNp zMalb>A&*3_gr7$mK=$WyMt)AI{P6|K zzRMlHiBDF#a`ye&)FxHSvhKuLL!ufp zwMaF>woWxdeQL#dU8L(I1DMz2gr7&^#LF*a;D`^Y+jWeR;Y>LdK3OeI<>cILw}gEwNk#LDF2t0Xg3UQwTS3GA6%@8ztctcdP7Q9LH|~-8 z$z8DvDX0gr>w##@`{lf3?ZVCGz}LgL?3m)`K-Ns2;gv!3JEXo44)DV!$}jRt(2M;I z%8z^f!u=|km3-!#%Ib$2&H4a6^EmJMTg*QQzkQ$&-f7Ymy3A`2jqk+cW?&wPWcw_v z#AF#aELn7x6HhabMhJ10qCZ9>Jc%5>z0_@Yk(A@9N<$Bwx)Qp2dth5E9!XG4xiF06 zFVP+fRL`MyrW8d~6+py4A3V-4QIS+j*&mBx@JAW9H`#(dGDd99vx$Zdpk+fHNquy~ zN*|G<+(f9?F?9!$KV9!G2n{SobTnW_gK_c5h9%!L1YLJr z@0uJjF1IRTR;ke-hrJ%iM{Zz?qO((*K=(86=W?fYkB`%C+QV z>Jp(zWr>xkMZfs(;FeKmk*A55!tc0$y&V!Uz<V_S~%_}(}=bHn;4MlFa_G{N!J~QL2 zP6$by_RDQ{Y4mz8KTheTg+KRTtsj;G@102P=VWO=g!g$-p6%gA?r|r8|9xZdp*Apv zj06O*{X&#ULV}12I%pgH4GK8Q<&2CZWF$|-%La!#F5EU4 z&yiofn8Xc+grl_X^B_jQ&*wV{#RCw|3kJv?X@d z(2tCzdy3?Up?%#5xPO1{+SzQ71j*J^FVs57PM{Ih=_D=+BLyWzKHi^SEj277hMsQ_ zGK82+MS=?RG}-hqT!5F@LHsp@`BLrm)d%xhVwOdskYI?qxf8D0*kpYof8sS1frh|p zFh2(++JvYDYzX}$iu4NFgog!OF~Dv&>QHyg#Eo7Zwqm_Izg?j!VM+@Las`u!g)sWV zR0bB1Y3tmb+6k#ph0{Q9p(~Yf=DAGxwv{yWE&g9KD|E_Xnq>%VydVWrpEfg}RCGzVF=_OY>jZn8( z_?5%$oXCQ5R3R3P0d^rXUbfVmN#Frh?5uKbhvnS@Xsmx?1~c~~DEuW(9wKqn%_xP7 z@vL9mO6E858*pl>yn`wPQ&kHsz#uA3ROf=B7(UUGnb`JtII^D``9rQeS3IG%>4 z_CNZ)*8ebtdWZ=BgKG&y697ON5r@g2Ynvl{K}bv0I&`aet5m^|c%UMLZWbWFC^I$;~VPfO!w3d(t962&h|TI{E1rXOKu$$4*(2!xFk__@T4280akQJU*Mvh!E|{%$1Aw2(e*l1-}__4JGMWZ}RP5tN~R+XN%bdy1paF0i(h=rz1fU~t65fyT#0 z2XDWHpLm@29xn;e0j&UeK56Tp&6DllILlI5^Y8F~Z*S@Ni|8=h^#*myvuVToapQ#o zoNQ-5A41loHS3QHOt(b+4dRkF?4}$jkJ8e9({NFzreQ5^KkN4eXVZ(W(*3{d8*c|_ z6aN!Ft^N}}f$0+KY|-Hroa`M;om?zUoy9C|OcUo~umJzh%vKma#UtQq~ZmBZG_j%ab*|onNYMXJ8 z^lxLamNlF1_W5w??gIRL9MuAm)%D#T?hO=Ay4QoOEC*{w$qqLu(O@l9RaE0_F3>Wo zHb(#g4`Ud>+`%cSH)So+@~b=jmZD`-+V&z$Ch1BmHs#KMhX)5=UtiH0T$w(;Np~0| zcGW!2k#U1Hmt_fmZ_y;W2y@U45qX+j-fNJlqT;mo+an3yLNezjmAB^ric%KcwiXC4n# z_s8)YBYTD{VJ1t~v1fe@k)4RFS+kVJ8nQ$(DIsfI*=5O^C2Lu;?`7!iEe)D?GKlk-M-|xBK`?`0|Irq%xg9@ArA(@EvCl=BC9By{E$~0YT4M+uq?>;+x9HPg>=TMHnf{Uwtb6i!bT^! zkQ_bj&(KJ`KsNK}cCHBs8JvDJ$Q1&e=g7_+H|T08%Oz~-ef_RRx3n&T8A0pY0rjMk z5~pt}R9qSpH(I0a8{Mj$sp6|PVtdsRX`{h4-qwz=74BY3Tx9rKN4qzDU*P^O#4FPy z*2k$=U)|EW%?v_*GbW_QU9g+^LIjJ@`#Wgj*caePsb+){L7*mi`yr_Z6<;(-s%Y}M z))$D6`Zpp)2q83_W$F;?T^T7fE90wf^HBa{YXWg%@thj(uFoxMCG#Sw;p_mTHOl6n zf!3XpvUP|=82SE8|6sT22WQ&3l{EDWiLS8j=gx)!j4#Ws{>XhK9Mne>-dh3HICMh? zH98vTlPtLNxoIZ^B=Z|$vbJg_jmVowIm(5!q2OF3DhMh|Aqa2lRcD%vQ=-gyCGQ>a;VyCk^Q~;` z!6V|QKY#Y!zETp7qP#b>)^ko}-Rs>|beoNkaHDXluRk9}q=-7p$c1%s@vln>MOG`W zzcI9ryn-C!G1{JkYu_eyw<>R_62~iqCLb6sqT=?1J#2NzDhJ<1J$8po4cw2`?1)#utqAXBr?c5He>r)f zb-VOSkqA!U+V;evIX_wkeQey4 zJbG~*g$=Xgv@=G;W-;dF8aae$2q=%}8q~G8Ojsgbb2VE&Lnr20KcmBZ^cjkY?ba6` z4bunp3{0-^7Q#jyxj8I zG@&DCUe_Nm)fHJ*Vav-78@k_HcIUoewTRLp z7eUC`xo)2tKoJ{YBtonugmwA#Mxq2QUSZzX1KVCg1#RCmg)F?sAS2l~n5Zq}W~s)v zi9T)nqv0iSuI$_LEgg#y+t!%k#td)q>Ck%{is5YKX!HH3HgaLx1J&tJmUXcYl)g@^ z(^bEAo3KRK*fiDMM=0aQlHU=Oe|a{PeEt>NI{cdQb&w=w{i0N2djZ6W-`mB-eG{(2 z{yq^J{?)EYYKN;*lDDl%D}G&^ZJTaaJ3xvf84aOcXp)n^=T=QR;Ou)=_qv%4Cu2C7L@}xYvXp8pR629^O}}#Wv}4IDLQAt zsh7rR3((V=#OAgCJQxF}7_ z7(H;wtXpYVxqnoRKYDnBNcko1UYPclZMH*COd@b5cA?FsjM`Kio598(lcGF~jm5qB zbvs%&+}MhwBn%6GEG?N`t5z{$Oci*8(28$%^W}Vw+t8~Y1n>FsOjHr1k9>m??1r@<4(b=%B^EQEIJT8~8xk%>;%z*MWNsb4M^UEMw zbuIwmP}MS={z%429mTFkq{yvxZHlY;iG^woir3!S(#=n{IXNVD(LEwRZ-JBzRM9gT zDb#a?)XMBVoC%KfdbVIq$>6`cH zH<7bGsq!mz<7;+&+MTdZYP*1>c$r>RQTSc~-A_Yj!P2l?sR+cLXKgP$Gdh_#w~l;E z!6Ql|&z#ZZic~Z*=sBkvV(Y314!O-o+`W^_L&JTj1XO&@`h%s+Dsi zDrv#C!j=dpSz0{;zF!Ls8i7?@Z%aC$j)gRP)*dG{JRPX3T9ic>4Fz@Hs~DOs{#xauRT{sO9%t1@I{@aN*{s=qf4SiI ztr&`)hR#b*K&RQRP3PRQA7a zHde$0#r^FpxVkp=J#l!|&=lQNHu$-;Ix4PkFUi(ub#O7`;Hu9#%)Tpykg(F>!$l_+ ziA@pj;JuKshRA(aS|Jhsf|b8yP0~@+vEAOJZ}olDaGT3}jebk{kL2bL*Kl&wUcF6j zjbbsHG>C=s-J5cfn`lAKNe{kJdk~o}QuxEV+mBT+X$Nbi)yXvwwMLEhsMmC=dbArb z72zYBdC<78-?Glw+~y}MgUDCDcu}ulYK=s0QeVW8{((s+Lgu_-dG!{TTi4csf=>C3 z;(faD8z!G@ccz%nc4CXg`Kryd#~=4h7V!Ldum8Bqp3404U#>yPHfwaZn=|c=Mcp-| z@5@c9%6(|}ezS)9Ejrb#jV7?DXH01nVh;!vXLIcL@VVE=dm(3gDnKVOfsH~srG8pc zj?3lwwvuFB)k3zG$!5VKNIs^#mFr%&Ir~FsKB#i)Bdc1FaYkHP(1(R*^0%&HuehlA zAbWZIgImq^>M4pzVjHfNp(|9!UYDTkVd>XU*R%H8``oC>g{-m4{OAhT?x5Yv7sGS1 z4@nr38k{6d_8nUm$_CmJbr?t&Z5}#(b$E>|Psj|?=#SN5Q70^^yU480j8u$_s?0C1 zZ`xN*s@VYL^-1F_@bAm&*quBlrLpyaI0E^ z(B&mgXMg257xtl%i=h!STk+vuPRX_MGo5^ylA-0_zz7F163-N+NXvtO;-4Z~ePemI zT^JI3r!7->v{9 zA7a{zGDJN6M%Bf{O7qG$`&3+RKG(XFMf7UYcnQ99gF0z?@KX~{01(9k_IQuN@PG?xobY3#NL;mgaP_#1 zM+NeqbV)NE0sptBpBx?)FL**_3veG-=hW%yzqR!jIU?C`CV*7OI00v#DD3o+1OPmE!I@tjL(lUNWKc=~V9q*v9{mrf CtuMp? delta 35365 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 }= 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 diff --git a/exercises/practice/baffling-birthdays/gradle/wrapper/gradle-wrapper.properties b/exercises/practice/baffling-birthdays/gradle/wrapper/gradle-wrapper.properties index b82aa23a4..4d97ea344 100644 --- a/exercises/practice/baffling-birthdays/gradle/wrapper/gradle-wrapper.properties +++ b/exercises/practice/baffling-birthdays/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip -networkTimeout=10000 +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/exercises/practice/baffling-birthdays/gradlew b/exercises/practice/baffling-birthdays/gradlew index 1aa94a426..adff685a0 100644 --- a/exercises/practice/baffling-birthdays/gradlew +++ b/exercises/practice/baffling-birthdays/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -112,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -170,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -203,15 +203,14 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/exercises/practice/baffling-birthdays/gradlew.bat b/exercises/practice/baffling-birthdays/gradlew.bat index 93e3f59f1..c4bdd3ab8 100644 --- a/exercises/practice/baffling-birthdays/gradlew.bat +++ b/exercises/practice/baffling-birthdays/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,22 +59,21 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell diff --git a/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java b/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java index 259e9e97d..426766e36 100644 --- a/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java +++ b/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java @@ -1,182 +1,160 @@ -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; + import org.junit.jupiter.api.Disabled; + import org.junit.jupiter.api.DisplayName; + import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatCode; -import static org.assertj.core.data.Offset.offset; + import static org.assertj.core.api.Assertions.assertThat; + import static org.assertj.core.data.Offset.offset; -import java.time.LocalDate; -import java.util.HashSet; -import java.util.List; -import java.util.Set; + import java.time.LocalDate; + import java.util.HashSet; + import java.util.List; + import java.util.Set; -public class BafflingBirthdaysTest { - private BafflingBirthdays birthdays = new BafflingBirthdays(); + public class BafflingBirthdaysTest { + private BafflingBirthdays birthdays = new BafflingBirthdays(); - private double averageEstimatedProbability(int groupSize, int runs) { - double sum = 0.0; - for (int i = 0; i < runs; i++) { - sum += birthdays.estimatedProbabilityOfSharedBirthday(groupSize); + @Test + @DisplayName("one birthdate") + public void oneBirthdateTest() { + assertThat(birthdays.sharedBirthday(List.of("2000-01-01"))).isFalse(); } - return sum / runs; - } - - // case: shared birthday - @Test - @DisplayName("one birthdate") - public void oneBirthdateTest() { - assertThat(birthdays.sharedBirthday(List.of("2000-01-01"))).isFalse(); - } - - @Disabled("Remove to run test") - @Test - @DisplayName("two birthdates with same year, month, and day") - public void twoBirthdatesWithSameYearMonthAndDayTest() { - assertThat(birthdays.sharedBirthday(List.of("2000-01-01", "2000-01-01"))).isTrue(); - } - @Disabled("Remove to run test") - @Test - @DisplayName("two birthdates with same year and month, but different day") - public void twoBirthdatesWithSameYearAndMonthButDifferentDayTest() { - assertThat(birthdays.sharedBirthday(List.of("2012-05-09", "2012-05-17"))).isFalse(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same year, month, and day") + public void twoBirthdatesWithSameYearMonthAndDayTest() { + assertThat(birthdays.sharedBirthday(List.of("2000-01-01", "2000-01-01"))).isTrue(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("two birthdates with same month and day, but different year") - public void twoBirthdatesWithSameMonthAndDayButDifferentYearTest() { - assertThat(birthdays.sharedBirthday(List.of("1999-10-23", "1988-10-23"))).isTrue(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same year and month, but different day") + public void twoBirthdatesWithSameYearAndMonthButDifferentDayTest() { + assertThat(birthdays.sharedBirthday(List.of("2012-05-09", "2012-05-17"))).isFalse(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("two birthdates with same year, but different month and day") - public void twoBirthdatesWithSameYearButDifferentMonthAndDayTest() { - assertThat(birthdays.sharedBirthday(List.of("2007-12-19", "2007-04-27"))).isFalse(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same month and day, but different year") + public void twoBirthdatesWithSameMonthAndDayButDifferentYearTest() { + assertThat(birthdays.sharedBirthday(List.of("1999-10-23", "1988-10-23"))).isTrue(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("two birthdates with different year, month, and day") - public void twoBirthdatesWithDifferentYearMonthAndDayTest() { - assertThat(birthdays.sharedBirthday(List.of("1997-08-04", "1963-11-23"))).isFalse(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same year, but different month and day") + public void twoBirthdatesWithSameYearButDifferentMonthAndDayTest() { + assertThat(birthdays.sharedBirthday(List.of("2007-12-19", "2007-04-27"))).isFalse(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("multiple birthdates without shared birthday") - public void multipleBirthdatesWithoutSharedBirthdayTest() { - assertThat(birthdays.sharedBirthday(List.of("1966-07-29", "1977-02-12", "2001-12-25", "1980-11-10"))).isFalse(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with different year, month, and day") + public void twoBirthdatesWithDifferentYearMonthAndDayTest() { + assertThat(birthdays.sharedBirthday(List.of("1997-08-04", "1963-11-23"))).isFalse(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("multiple birthdates with one shared birthday") - public void multipleBirthdatesWithOneSharedBirthdayTest() { - assertThat(birthdays.sharedBirthday(List.of("1966-07-29", "1977-02-12", "2001-07-29", "1980-11-10"))).isTrue(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("multiple birthdates without shared birthday") + public void multipleBirthdatesWithoutSharedBirthdayTest() { + assertThat(birthdays.sharedBirthday(List.of("1966-07-29", "1977-02-12", "2001-12-25", "1980-11-10"))).isFalse(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("multiple birthdates with more than one shared birthday") - public void multipleBirthdatesWithMoreThanOneSharedBirthdayTest() { - assertThat(birthdays.sharedBirthday(List.of( - "1966-07-29", - "1977-02-12", - "2001-12-25", - "1980-07-29", - "2019-02-12" - ))).isTrue(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("multiple birthdates with one shared birthday") + public void multipleBirthdatesWithOneSharedBirthdayTest() { + assertThat(birthdays.sharedBirthday(List.of("1966-07-29", "1977-02-12", "2001-07-29", "1980-11-10"))).isTrue(); + } - // case: random birthdates - @Disabled("Remove to run test") - @Test - @DisplayName("generate requested number of birthdates") - public void generateRequestedNumberOfBirthdatesTest() { - int groupSize = 50; - assertThat(birthdays.randomBirthdates(groupSize).size()).isEqualTo(groupSize); - } + @Disabled("Remove to run test") + @Test + @DisplayName("multiple birthdates with more than one shared birthday") + public void multipleBirthdatesWithMoreThanOneSharedBirthdayTest() { + assertThat(birthdays.sharedBirthday(List.of( + "1966-07-29", + "1977-02-12", + "2001-12-25", + "1980-07-29", + "2019-02-12" + ))).isTrue(); + } - // additional test - @Disabled("Remove to run test") - @Test - @DisplayName("random birthdates are valid iso dates") - public void randomBirthdatesAreValidISODatesTest() { - for (String birthdate: birthdays.randomBirthdates(100)) { - assertThatCode(() -> LocalDate.parse(birthdate)).doesNotThrowAnyException(); + @Disabled("Remove to run test") + @Test + @DisplayName("generate requested number of birthdates") + public void generateRequestedNumberOfBirthdatesTest() { + int groupSize = 50; + assertThat(birthdays.randomBirthdates(groupSize).size()).isEqualTo(groupSize); } - } - @Disabled("Remove to run test") - @Test - @DisplayName("years are not leap years") - public void yearsAreNotLeapYearsTest() { - for (String birthdate : birthdays.randomBirthdates(100)) { - LocalDate date = LocalDate.parse(birthdate); - assertThat(date.isLeapYear()).isFalse(); - assertThat(date.getMonthValue() == 2 && date.getDayOfMonth() == 29).isFalse(); + @Disabled("Remove to run test") + @Test + @DisplayName("years are not leap years") + public void yearsAreNotLeapYearsTest() { + for (String birthdate : birthdays.randomBirthdates(100)) { + LocalDate date = LocalDate.parse(birthdate); + assertThat(date.isLeapYear()).isFalse(); + assertThat(date.getMonthValue() == 2 && date.getDayOfMonth() == 29).isFalse(); + } } - } - @Disabled("Remove to run test") - @Test - @DisplayName("months are random") - public void monthsAreRandomTest() { - Set months = new HashSet<>(); - for (String birthdate : birthdays.randomBirthdates(500)) { - LocalDate date = LocalDate.parse(birthdate); - months.add(date.getMonthValue()); - if (months.size() >= 7) { - break; + @Disabled("Remove to run test") + @Test + @DisplayName("months are random") + public void monthsAreRandomTest() { + Set months = new HashSet<>(); + for (String birthdate : birthdays.randomBirthdates(500)) { + LocalDate date = LocalDate.parse(birthdate); + months.add(date.getMonthValue()); + if (months.size() >= 7) { + break; + } } + assertThat(months).hasSizeGreaterThanOrEqualTo(7); } - assertThat(months).hasSizeGreaterThanOrEqualTo(7); - } - @Disabled("Remove to run test") - @Test - @DisplayName("days are random") - public void daysAreRandomTest() { - Set days = new HashSet<>(); - for (String birthdate : birthdays.randomBirthdates(500)) { - LocalDate date = LocalDate.parse(birthdate); - days.add(date.getDayOfMonth()); - if (days.size() >= 11) { - break; + @Disabled("Remove to run test") + @Test + @DisplayName("days are random") + public void daysAreRandomTest() { + Set days = new HashSet<>(); + for (String birthdate : birthdays.randomBirthdates(500)) { + LocalDate date = LocalDate.parse(birthdate); + days.add(date.getDayOfMonth()); + if (days.size() >= 11) { + break; + } } + assertThat(days).hasSizeGreaterThanOrEqualTo(11); } - assertThat(days).hasSizeGreaterThanOrEqualTo(11); - } - // case: estimated probability of at least one shared birthday - @Disabled("Remove to run test") - @Test - @DisplayName("estimated probability of at least one shared birthday case for one person") - public void forOnePersonTest() { - assertThat(birthdays.estimatedProbabilityOfSharedBirthday(1)).isEqualTo(0.0); - } + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case for one person") + public void estimatedProbabilityOfAtLeastOneSharedBirthdayForOnePersonTest() { + assertThat(birthdays.estimatedProbabilityOfSharedBirthday(1)).isEqualTo(0.0); + } - @Disabled("Remove to run test") - @Test - @DisplayName("estimated probability of at least one shared birthday case among ten people") - public void amongTenPeopleTest() { - assertThat(averageEstimatedProbability(10, 50)).isCloseTo(11.694818, offset(1.0)); - } + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case among ten people") + public void estimatedProbabilityOfAtLeastOneSharedBirthdayAmongTenPeopleTest() { + assertThat(birthdays.estimatedProbabilityOfSharedBirthday(10)).isCloseTo(11.694818, offset(1.0)); + } - @Disabled("Remove to run test") - @Test - @DisplayName("estimated probability of at least one shared birthday case among twenty-three people") - public void amongTwentyThreePeopleTest() { - assertThat(averageEstimatedProbability(23, 50)).isCloseTo(50.729723, offset(1.0)); - } + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case among twenty-three people") + public void estimatedProbabilityOfAtLeastOneSharedBirthdayAmongTwentyThreePeopleTest() { + assertThat(birthdays.estimatedProbabilityOfSharedBirthday(23)).isCloseTo(50.729723, offset(1.0)); + } - @Disabled("Remove to run test") - @Test - @DisplayName("estimated probability of at least one shared birthday case among seventy people") - public void amongSeventyPeopleTest() { - assertThat(averageEstimatedProbability(70, 50)).isCloseTo(99.915958, offset(1.0)); + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case among seventy people") + public void estimatedProbabilityOfAtLeastOneSharedBirthdayAmongSeventyPeopleTest() { + assertThat(birthdays.estimatedProbabilityOfSharedBirthday(70)).isCloseTo(99.915958, offset(1.0)); + } } -} From f20ed3c1e9e8edd95bf0f6d0e1816fe962db5854 Mon Sep 17 00:00:00 2001 From: Baboushka Date: Thu, 8 Jan 2026 14:24:42 +0100 Subject: [PATCH 6/6] fix indentation --- .../src/test/java/BafflingBirthdaysTest.java | 268 +++++++++--------- 1 file changed, 134 insertions(+), 134 deletions(-) diff --git a/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java b/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java index 426766e36..9c9497a92 100644 --- a/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java +++ b/exercises/practice/baffling-birthdays/src/test/java/BafflingBirthdaysTest.java @@ -1,160 +1,160 @@ - import org.junit.jupiter.api.Disabled; - import org.junit.jupiter.api.DisplayName; - import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; - import static org.assertj.core.api.Assertions.assertThat; - import static org.assertj.core.data.Offset.offset; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; - import java.time.LocalDate; - import java.util.HashSet; - import java.util.List; - import java.util.Set; +import java.time.LocalDate; +import java.util.HashSet; +import java.util.List; +import java.util.Set; - public class BafflingBirthdaysTest { - private BafflingBirthdays birthdays = new BafflingBirthdays(); +public class BafflingBirthdaysTest { + private BafflingBirthdays birthdays = new BafflingBirthdays(); - @Test - @DisplayName("one birthdate") - public void oneBirthdateTest() { - assertThat(birthdays.sharedBirthday(List.of("2000-01-01"))).isFalse(); - } + @Test + @DisplayName("one birthdate") + public void oneBirthdateTest() { + assertThat(birthdays.sharedBirthday(List.of("2000-01-01"))).isFalse(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("two birthdates with same year, month, and day") - public void twoBirthdatesWithSameYearMonthAndDayTest() { - assertThat(birthdays.sharedBirthday(List.of("2000-01-01", "2000-01-01"))).isTrue(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same year, month, and day") + public void twoBirthdatesWithSameYearMonthAndDayTest() { + assertThat(birthdays.sharedBirthday(List.of("2000-01-01", "2000-01-01"))).isTrue(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("two birthdates with same year and month, but different day") - public void twoBirthdatesWithSameYearAndMonthButDifferentDayTest() { - assertThat(birthdays.sharedBirthday(List.of("2012-05-09", "2012-05-17"))).isFalse(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same year and month, but different day") + public void twoBirthdatesWithSameYearAndMonthButDifferentDayTest() { + assertThat(birthdays.sharedBirthday(List.of("2012-05-09", "2012-05-17"))).isFalse(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("two birthdates with same month and day, but different year") - public void twoBirthdatesWithSameMonthAndDayButDifferentYearTest() { - assertThat(birthdays.sharedBirthday(List.of("1999-10-23", "1988-10-23"))).isTrue(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same month and day, but different year") + public void twoBirthdatesWithSameMonthAndDayButDifferentYearTest() { + assertThat(birthdays.sharedBirthday(List.of("1999-10-23", "1988-10-23"))).isTrue(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("two birthdates with same year, but different month and day") - public void twoBirthdatesWithSameYearButDifferentMonthAndDayTest() { - assertThat(birthdays.sharedBirthday(List.of("2007-12-19", "2007-04-27"))).isFalse(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with same year, but different month and day") + public void twoBirthdatesWithSameYearButDifferentMonthAndDayTest() { + assertThat(birthdays.sharedBirthday(List.of("2007-12-19", "2007-04-27"))).isFalse(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("two birthdates with different year, month, and day") - public void twoBirthdatesWithDifferentYearMonthAndDayTest() { - assertThat(birthdays.sharedBirthday(List.of("1997-08-04", "1963-11-23"))).isFalse(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("two birthdates with different year, month, and day") + public void twoBirthdatesWithDifferentYearMonthAndDayTest() { + assertThat(birthdays.sharedBirthday(List.of("1997-08-04", "1963-11-23"))).isFalse(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("multiple birthdates without shared birthday") - public void multipleBirthdatesWithoutSharedBirthdayTest() { - assertThat(birthdays.sharedBirthday(List.of("1966-07-29", "1977-02-12", "2001-12-25", "1980-11-10"))).isFalse(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("multiple birthdates without shared birthday") + public void multipleBirthdatesWithoutSharedBirthdayTest() { + assertThat(birthdays.sharedBirthday(List.of("1966-07-29", "1977-02-12", "2001-12-25", "1980-11-10"))).isFalse(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("multiple birthdates with one shared birthday") - public void multipleBirthdatesWithOneSharedBirthdayTest() { - assertThat(birthdays.sharedBirthday(List.of("1966-07-29", "1977-02-12", "2001-07-29", "1980-11-10"))).isTrue(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("multiple birthdates with one shared birthday") + public void multipleBirthdatesWithOneSharedBirthdayTest() { + assertThat(birthdays.sharedBirthday(List.of("1966-07-29", "1977-02-12", "2001-07-29", "1980-11-10"))).isTrue(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("multiple birthdates with more than one shared birthday") - public void multipleBirthdatesWithMoreThanOneSharedBirthdayTest() { - assertThat(birthdays.sharedBirthday(List.of( - "1966-07-29", - "1977-02-12", - "2001-12-25", - "1980-07-29", - "2019-02-12" - ))).isTrue(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("multiple birthdates with more than one shared birthday") + public void multipleBirthdatesWithMoreThanOneSharedBirthdayTest() { + assertThat(birthdays.sharedBirthday(List.of( + "1966-07-29", + "1977-02-12", + "2001-12-25", + "1980-07-29", + "2019-02-12" + ))).isTrue(); + } - @Disabled("Remove to run test") - @Test - @DisplayName("generate requested number of birthdates") - public void generateRequestedNumberOfBirthdatesTest() { - int groupSize = 50; - assertThat(birthdays.randomBirthdates(groupSize).size()).isEqualTo(groupSize); - } + @Disabled("Remove to run test") + @Test + @DisplayName("generate requested number of birthdates") + public void generateRequestedNumberOfBirthdatesTest() { + int groupSize = 50; + assertThat(birthdays.randomBirthdates(groupSize).size()).isEqualTo(groupSize); + } - @Disabled("Remove to run test") - @Test - @DisplayName("years are not leap years") - public void yearsAreNotLeapYearsTest() { - for (String birthdate : birthdays.randomBirthdates(100)) { - LocalDate date = LocalDate.parse(birthdate); - assertThat(date.isLeapYear()).isFalse(); - assertThat(date.getMonthValue() == 2 && date.getDayOfMonth() == 29).isFalse(); - } + @Disabled("Remove to run test") + @Test + @DisplayName("years are not leap years") + public void yearsAreNotLeapYearsTest() { + for (String birthdate : birthdays.randomBirthdates(100)) { + LocalDate date = LocalDate.parse(birthdate); + assertThat(date.isLeapYear()).isFalse(); + assertThat(date.getMonthValue() == 2 && date.getDayOfMonth() == 29).isFalse(); } + } - @Disabled("Remove to run test") - @Test - @DisplayName("months are random") - public void monthsAreRandomTest() { - Set months = new HashSet<>(); - for (String birthdate : birthdays.randomBirthdates(500)) { - LocalDate date = LocalDate.parse(birthdate); - months.add(date.getMonthValue()); - if (months.size() >= 7) { - break; - } + @Disabled("Remove to run test") + @Test + @DisplayName("months are random") + public void monthsAreRandomTest() { + Set months = new HashSet<>(); + for (String birthdate : birthdays.randomBirthdates(500)) { + LocalDate date = LocalDate.parse(birthdate); + months.add(date.getMonthValue()); + if (months.size() >= 7) { + break; } - assertThat(months).hasSizeGreaterThanOrEqualTo(7); } + assertThat(months).hasSizeGreaterThanOrEqualTo(7); + } - @Disabled("Remove to run test") - @Test - @DisplayName("days are random") - public void daysAreRandomTest() { - Set days = new HashSet<>(); - for (String birthdate : birthdays.randomBirthdates(500)) { - LocalDate date = LocalDate.parse(birthdate); - days.add(date.getDayOfMonth()); - if (days.size() >= 11) { - break; - } + @Disabled("Remove to run test") + @Test + @DisplayName("days are random") + public void daysAreRandomTest() { + Set days = new HashSet<>(); + for (String birthdate : birthdays.randomBirthdates(500)) { + LocalDate date = LocalDate.parse(birthdate); + days.add(date.getDayOfMonth()); + if (days.size() >= 11) { + break; } - assertThat(days).hasSizeGreaterThanOrEqualTo(11); } + assertThat(days).hasSizeGreaterThanOrEqualTo(11); + } - @Disabled("Remove to run test") - @Test - @DisplayName("estimated probability of at least one shared birthday case for one person") - public void estimatedProbabilityOfAtLeastOneSharedBirthdayForOnePersonTest() { - assertThat(birthdays.estimatedProbabilityOfSharedBirthday(1)).isEqualTo(0.0); - } + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case for one person") + public void estimatedProbabilityOfAtLeastOneSharedBirthdayForOnePersonTest() { + assertThat(birthdays.estimatedProbabilityOfSharedBirthday(1)).isEqualTo(0.0); + } - @Disabled("Remove to run test") - @Test - @DisplayName("estimated probability of at least one shared birthday case among ten people") - public void estimatedProbabilityOfAtLeastOneSharedBirthdayAmongTenPeopleTest() { - assertThat(birthdays.estimatedProbabilityOfSharedBirthday(10)).isCloseTo(11.694818, offset(1.0)); - } + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case among ten people") + public void estimatedProbabilityOfAtLeastOneSharedBirthdayAmongTenPeopleTest() { + assertThat(birthdays.estimatedProbabilityOfSharedBirthday(10)).isCloseTo(11.694818, offset(1.0)); + } - @Disabled("Remove to run test") - @Test - @DisplayName("estimated probability of at least one shared birthday case among twenty-three people") - public void estimatedProbabilityOfAtLeastOneSharedBirthdayAmongTwentyThreePeopleTest() { - assertThat(birthdays.estimatedProbabilityOfSharedBirthday(23)).isCloseTo(50.729723, offset(1.0)); - } + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case among twenty-three people") + public void estimatedProbabilityOfAtLeastOneSharedBirthdayAmongTwentyThreePeopleTest() { + assertThat(birthdays.estimatedProbabilityOfSharedBirthday(23)).isCloseTo(50.729723, offset(1.0)); + } - @Disabled("Remove to run test") - @Test - @DisplayName("estimated probability of at least one shared birthday case among seventy people") - public void estimatedProbabilityOfAtLeastOneSharedBirthdayAmongSeventyPeopleTest() { - assertThat(birthdays.estimatedProbabilityOfSharedBirthday(70)).isCloseTo(99.915958, offset(1.0)); - } + @Disabled("Remove to run test") + @Test + @DisplayName("estimated probability of at least one shared birthday case among seventy people") + public void estimatedProbabilityOfAtLeastOneSharedBirthdayAmongSeventyPeopleTest() { + assertThat(birthdays.estimatedProbabilityOfSharedBirthday(70)).isCloseTo(99.915958, offset(1.0)); } +}