From 99d6dc5a57a28a00ead76400ec7769cd59e0cc58 Mon Sep 17 00:00:00 2001 From: Andras Nagy Date: Thu, 15 Jun 2023 22:04:24 -0700 Subject: [PATCH] initial commit --- config.json | 8 +++ .../practice/space-age/.docs/instructions.md | 25 +++++++++ .../practice/space-age/.meta/config.json | 19 +++++++ .../practice/space-age/.meta/example.rkt | 30 +++++++++++ exercises/practice/space-age/.meta/tests.toml | 38 ++++++++++++++ .../practice/space-age/space-age-test.rkt | 52 +++++++++++++++++++ exercises/practice/space-age/space-age.rkt | 10 ++++ 7 files changed, 182 insertions(+) create mode 100644 exercises/practice/space-age/.docs/instructions.md create mode 100644 exercises/practice/space-age/.meta/config.json create mode 100644 exercises/practice/space-age/.meta/example.rkt create mode 100644 exercises/practice/space-age/.meta/tests.toml create mode 100644 exercises/practice/space-age/space-age-test.rkt create mode 100644 exercises/practice/space-age/space-age.rkt diff --git a/config.json b/config.json index 22926402..3ace068e 100644 --- a/config.json +++ b/config.json @@ -472,6 +472,14 @@ "strings" ] }, + { + "slug": "space-age", + "name": "Space Age", + "uuid": "d2bd28fb-489a-43bf-929c-2a6c6a60ef17", + "practices": [], + "prerequisites": [], + "difficulty": 1 + }, { "slug": "darts", "name": "Darts", diff --git a/exercises/practice/space-age/.docs/instructions.md b/exercises/practice/space-age/.docs/instructions.md new file mode 100644 index 00000000..fe938cc0 --- /dev/null +++ b/exercises/practice/space-age/.docs/instructions.md @@ -0,0 +1,25 @@ +# Instructions + +Given an age in seconds, calculate how old someone would be on: + +- Mercury: orbital period 0.2408467 Earth years +- Venus: orbital period 0.61519726 Earth years +- Earth: orbital period 1.0 Earth years, 365.25 Earth days, or 31557600 seconds +- Mars: orbital period 1.8808158 Earth years +- Jupiter: orbital period 11.862615 Earth years +- Saturn: orbital period 29.447498 Earth years +- Uranus: orbital period 84.016846 Earth years +- Neptune: orbital period 164.79132 Earth years + +So if you were told someone were 1,000,000,000 seconds old, you should +be able to say that they're 31.69 Earth-years old. + +If you're wondering why Pluto didn't make the cut, go watch [this YouTube video][pluto-video]. + +Note: The actual length of one complete orbit of the Earth around the sun is closer to 365.256 days (1 sidereal year). +The Gregorian calendar has, on average, 365.2425 days. +While not entirely accurate, 365.25 is the value used in this exercise. +See [Year on Wikipedia][year] for more ways to measure a year. + +[pluto-video]: https://www.youtube.com/watch?v=Z_2gbGXzFbs +[year]: https://en.wikipedia.org/wiki/Year#Summary diff --git a/exercises/practice/space-age/.meta/config.json b/exercises/practice/space-age/.meta/config.json new file mode 100644 index 00000000..a15e6441 --- /dev/null +++ b/exercises/practice/space-age/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "BNAndras" + ], + "files": { + "solution": [ + "space-age.rkt" + ], + "test": [ + "space-age-test.rkt" + ], + "example": [ + ".meta/example.rkt" + ] + }, + "blurb": "Given an age in seconds, calculate how old someone is in terms of a given planet's solar years.", + "source": "Partially inspired by Chapter 1 in Chris Pine's online Learn to Program tutorial.", + "source_url": "https://pine.fm/LearnToProgram/?Chapter=01" +} diff --git a/exercises/practice/space-age/.meta/example.rkt b/exercises/practice/space-age/.meta/example.rkt new file mode 100644 index 00000000..f79ad281 --- /dev/null +++ b/exercises/practice/space-age/.meta/example.rkt @@ -0,0 +1,30 @@ +#lang racket + +(provide on-mercury + on-venus + on-earth + on-mars + on-jupiter + on-saturn + on-uranus + on-neptune) + +(define-values (earth-seconds) 31557600) + +(define (get-local-age seconds ratio) (/ seconds (* earth-seconds ratio))) + +(define (on-mercury seconds) (get-local-age seconds 0.2408467)) + +(define (on-venus seconds) (get-local-age seconds 0.61519726)) + +(define (on-earth seconds) (get-local-age seconds 1)) + +(define (on-mars seconds) (get-local-age seconds 1.8808158)) + +(define (on-jupiter seconds) (get-local-age seconds 11.862615)) + +(define (on-saturn seconds) (get-local-age seconds 29.447498)) + +(define (on-uranus seconds) (get-local-age seconds 84.016846)) + +(define (on-neptune seconds) (get-local-age seconds 164.79132)) diff --git a/exercises/practice/space-age/.meta/tests.toml b/exercises/practice/space-age/.meta/tests.toml new file mode 100644 index 00000000..a62017e4 --- /dev/null +++ b/exercises/practice/space-age/.meta/tests.toml @@ -0,0 +1,38 @@ +# 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. + +[84f609af-5a91-4d68-90a3-9e32d8a5cd34] +description = "age on Earth" + +[ca20c4e9-6054-458c-9312-79679ffab40b] +description = "age on Mercury" + +[502c6529-fd1b-41d3-8fab-65e03082b024] +description = "age on Venus" + +[9ceadf5e-a0d5-4388-9d40-2c459227ceb8] +description = "age on Mars" + +[42927dc3-fe5e-4f76-a5b5-f737fc19bcde] +description = "age on Jupiter" + +[8469b332-7837-4ada-b27c-00ee043ebcad] +description = "age on Saturn" + +[999354c1-76f8-4bb5-a672-f317b6436743] +description = "age on Uranus" + +[80096d30-a0d4-4449-903e-a381178355d8] +description = "age on Neptune" + +[57b96e2a-1178-40b7-b34d-f3c9c34e4bf4] +description = "invalid planet causes error" +include = false diff --git a/exercises/practice/space-age/space-age-test.rkt b/exercises/practice/space-age/space-age-test.rkt new file mode 100644 index 00000000..6d782bf7 --- /dev/null +++ b/exercises/practice/space-age/space-age-test.rkt @@ -0,0 +1,52 @@ +#lang racket + +(require "space-age.rkt") + +(module+ test + (require rackunit rackunit/text-ui) + + (define suite + (test-suite + "space-age tests" + + (test-= "age on Earth" + (on-earth 1000000000) + 31.69 + 0.01) + + (test-= "age on Mercury" + (on-mercury 2134835688) + 280.88 + 0.01) + + (test-= "age on Venus" + (on-venus 189839836) + 9.78 + 0.01) + + (test-= "age on Mars" + (on-mars 2129871239) + 35.88 + 0.01) + + (test-= "age on Jupiter" + (on-jupiter 901876382) + 2.41 + 0.01) + + (test-= "age on Saturn" + (on-saturn 2000000000) + 2.15 + 0.01) + + (test-= "age on Uranus" + (on-uranus 1210123456) + 0.46 + 0.01) + + (test-= "age on Neptune" + (on-neptune 1821023456) + 0.35 + 0.01))) + + (run-tests suite)) diff --git a/exercises/practice/space-age/space-age.rkt b/exercises/practice/space-age/space-age.rkt new file mode 100644 index 00000000..e8633a1a --- /dev/null +++ b/exercises/practice/space-age/space-age.rkt @@ -0,0 +1,10 @@ +#lang racket + +(provide on-mercury + on-venus + on-earth + on-mars + on-jupiter + on-saturn + on-uranus + on-neptune)