Skip to content

feat: add baffling-birthdays exercise - #323

Closed
metif12 wants to merge 1 commit into
exercism:mainfrom
metif12:add/baffling-birthdays
Closed

metif12 wants to merge 1 commit into
exercism:mainfrom
metif12:add/baffling-birthdays

Conversation

@metif12

@metif12 metif12 commented Sep 28, 2026

Copy link
Copy Markdown
Contributor

What

Adds the Baffling Birthdays practice exercise (difficulty 6), split out of #307.

  • baffling-birthdays.v -- stub
  • .meta/example.v -- example solution
  • run_test.v -- 17 tests, built from the canonical data in problem-specifications
  • .meta/config.json, .meta/tests.toml, .docs/
  • config.json -- registers the exercise

Adjustments for the test runner's V version

month_and_day_of in the example loops for day > 0 instead of for {, and
returns (0, 0) after the loop. V 0.4.8 does not treat a bare for {} as an
exhaustive loop and reports a missing return instead. The loop still always
returns from inside for every day of a non-leap year, so the behaviour is
unchanged and neither V version warns about the extra return.

This exercise asserts a probability: the tests average 25 runs against a
1.5 percentage-point tolerance. If a probabilistic test is not wanted on the
track, this is the one to leave out.

One self-contained commit that touches nothing outside the exercise, so it can be merged on its own.

Verification

  • bin/verify-exercises-in-docker (the current vlang-test-runner image, V 0.4.8): pass, 17/17 tests.
  • V 0.5.2, the version vlang/setup-v installs for bin/test in CI: pass.
  • configlet lint passes; v fmt -l and v vet are clean on the new files.

For the merge commit

Not needed: a brand new exercise does not change the outcome of any existing exercise's tests.

Adds the baffling-birthdays practice exercise (difficulty 6), split out
of exercism#307. The example estimates the probability of a shared birthday with
a Monte Carlo simulation, as the canonical data asks for an estimate
rather than an exact count.

`month_and_day_of` in the example now loops `for day > 0` instead of
`for {`, and returns `(0, 0)` after the loop. V 0.4.8 -- the version the
current test runner image pins -- does not treat a bare `for {}` as an
exhaustive loop and reports a missing return instead. The loop still
always returns from inside for every day of a non-leap year, so the
behaviour is unchanged and neither V version warns about the extra
return.

The tests average 25 runs against a 1.5 percentage-point tolerance, so
this is the one exercise in the track with a probabilistic assertion.
If that is not wanted in CI, this is the exercise to drop.

Registers the exercise in config.json. Verified with
bin/verify-exercises-in-docker (the current test runner image) and with
V 0.5.2 for bin/test. configlet lint passes, and v fmt -l / v vet are
clean on the new files.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant