diff --git a/config.json b/config.json index d9b3ee0..fd87063 100644 --- a/config.json +++ b/config.json @@ -80,6 +80,14 @@ "prerequisites": [], "difficulty": 1 }, + { + "uuid": "70a529d2-5943-4b70-aaa6-eee5d9ee601a", + "slug": "roman-numerals", + "name": "Roman Numerals", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "uuid": "69b04b2c-164c-491d-9731-506c0983325e", "slug": "isogram", diff --git a/exercises/practice/roman-numerals/.docs/instructions.md b/exercises/practice/roman-numerals/.docs/instructions.md new file mode 100644 index 0000000..bb7e909 --- /dev/null +++ b/exercises/practice/roman-numerals/.docs/instructions.md @@ -0,0 +1,41 @@ +# Instructions + +Write a function to convert from normal numbers to Roman Numerals. + +The Romans were a clever bunch. +They conquered most of Europe and ruled it for hundreds of years. +They invented concrete and straight roads and even bikinis. +One thing they never discovered though was the number zero. +This made writing and dating extensive histories of their exploits slightly more challenging, but the system of numbers they came up with is still in use today. +For example the BBC uses Roman numerals to date their programs. + +The Romans wrote numbers using letters - I, V, X, L, C, D, M. +(notice these letters have lots of straight lines and are hence easy to hack into stone tablets). + +```text + 1 => I +10 => X + 7 => VII +``` + +The maximum number supported by this notation is 3,999. +(The Romans themselves didn't tend to go any higher) + +Wikipedia says: Modern Roman numerals ... are written by expressing each digit separately starting with the left most digit and skipping any digit with a value of zero. + +To see this in practice, consider the example of 1990. + +In Roman numerals 1990 is MCMXC: + +1000=M +900=CM +90=XC + +2008 is written as MMVIII: + +2000=MM +8=VIII + +Learn more about [Roman numberals on Wikipedia][roman-numerals]. + +[roman-numerals]: https://wiki.imperivm-romanvm.com/wiki/Roman_Numerals diff --git a/exercises/practice/roman-numerals/.meta/config.json b/exercises/practice/roman-numerals/.meta/config.json new file mode 100644 index 0000000..a434c45 --- /dev/null +++ b/exercises/practice/roman-numerals/.meta/config.json @@ -0,0 +1,20 @@ +{ + "authors": [], + "contributors": [ + "kytrinyx" + ], + "files": { + "solution": [ + "src/roman-numerals.chpl" + ], + "test": [ + "test/tests.chpl" + ], + "example": [ + ".meta/reference.chpl" + ] + }, + "blurb": "Write a function to convert from normal numbers to Roman Numerals.", + "source": "The Roman Numeral Kata", + "source_url": "https://codingdojo.org/kata/RomanNumerals/" +} diff --git a/exercises/practice/roman-numerals/.meta/reference.chpl b/exercises/practice/roman-numerals/.meta/reference.chpl new file mode 100644 index 0000000..d80c8cb --- /dev/null +++ b/exercises/practice/roman-numerals/.meta/reference.chpl @@ -0,0 +1,3 @@ +module RomanNumerals { + // implement reference solution +} diff --git a/exercises/practice/roman-numerals/.meta/tests.toml b/exercises/practice/roman-numerals/.meta/tests.toml new file mode 100644 index 0000000..57c6c4b --- /dev/null +++ b/exercises/practice/roman-numerals/.meta/tests.toml @@ -0,0 +1,88 @@ +# 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. + +[19828a3a-fbf7-4661-8ddd-cbaeee0e2178] +description = "1 is I" + +[f088f064-2d35-4476-9a41-f576da3f7b03] +description = "2 is II" + +[b374a79c-3bea-43e6-8db8-1286f79c7106] +description = "3 is III" + +[05a0a1d4-a140-4db1-82e8-fcc21fdb49bb] +description = "4 is IV" + +[57c0f9ad-5024-46ab-975d-de18c430b290] +description = "5 is V" + +[20a2b47f-e57f-4797-a541-0b3825d7f249] +description = "6 is VI" + +[ff3fb08c-4917-4aab-9f4e-d663491d083d] +description = "9 is IX" + +[6d1d82d5-bf3e-48af-9139-87d7165ed509] +description = "16 is XVI" + +[2bda64ca-7d28-4c56-b08d-16ce65716cf6] +description = "27 is XXVII" + +[a1f812ef-84da-4e02-b4f0-89c907d0962c] +description = "48 is XLVIII" + +[607ead62-23d6-4c11-a396-ef821e2e5f75] +description = "49 is XLIX" + +[d5b283d4-455d-4e68-aacf-add6c4b51915] +description = "59 is LIX" + +[4465ffd5-34dc-44f3-ada5-56f5007b6dad] +description = "66 is LXVI" + +[46b46e5b-24da-4180-bfe2-2ef30b39d0d0] +description = "93 is XCIII" + +[30494be1-9afb-4f84-9d71-db9df18b55e3] +description = "141 is CXLI" + +[267f0207-3c55-459a-b81d-67cec7a46ed9] +description = "163 is CLXIII" + +[902ad132-0b4d-40e3-8597-ba5ed611dd8d] +description = "166 is CLXVI" + +[cdb06885-4485-4d71-8bfb-c9d0f496b404] +description = "402 is CDII" + +[6b71841d-13b2-46b4-ba97-dec28133ea80] +description = "575 is DLXXV" + +[dacb84b9-ea1c-4a61-acbb-ce6b36674906] +description = "666 is DCLXVI" + +[432de891-7fd6-4748-a7f6-156082eeca2f] +description = "911 is CMXI" + +[e6de6d24-f668-41c0-88d7-889c0254d173] +description = "1024 is MXXIV" + +[efbe1d6a-9f98-4eb5-82bc-72753e3ac328] +description = "1666 is MDCLXVI" + +[bb550038-d4eb-4be2-a9ce-f21961ac3bc6] +description = "3000 is MMM" + +[3bc4b41c-c2e6-49d9-9142-420691504336] +description = "3001 is MMMI" + +[4e18e96b-5fbb-43df-a91b-9cb511fe0856] +description = "3999 is MMMCMXCIX" diff --git a/exercises/practice/roman-numerals/Mason.toml b/exercises/practice/roman-numerals/Mason.toml new file mode 100644 index 0000000..8e36ceb --- /dev/null +++ b/exercises/practice/roman-numerals/Mason.toml @@ -0,0 +1,5 @@ +[brick] +name="roman-numerals" +version="0.1.0" +chplVersion="1.28.0" +type="application" diff --git a/exercises/practice/roman-numerals/src/roman-numerals.chpl b/exercises/practice/roman-numerals/src/roman-numerals.chpl new file mode 100644 index 0000000..9989a75 --- /dev/null +++ b/exercises/practice/roman-numerals/src/roman-numerals.chpl @@ -0,0 +1,3 @@ +module RomanNumerals { + // write your solution here +} diff --git a/exercises/practice/roman-numerals/test/tests.chpl b/exercises/practice/roman-numerals/test/tests.chpl new file mode 100644 index 0000000..ffa6a56 --- /dev/null +++ b/exercises/practice/roman-numerals/test/tests.chpl @@ -0,0 +1,83 @@ +use UnitTest; +use RomanNumerals; + +proc test1IsI(test : borrowed Test) throws { + test.assertEqual(convert(1), "I"); +} +proc test2IsIi(test : borrowed Test) throws { + test.assertEqual(convert(2), "II"); +} +proc test3IsIii(test : borrowed Test) throws { + test.assertEqual(convert(3), "III"); +} +proc test4IsIv(test : borrowed Test) throws { + test.assertEqual(convert(4), "IV"); +} +proc test5IsV(test : borrowed Test) throws { + test.assertEqual(convert(5), "V"); +} +proc test6IsVi(test : borrowed Test) throws { + test.assertEqual(convert(6), "VI"); +} +proc test9IsIx(test : borrowed Test) throws { + test.assertEqual(convert(9), "IX"); +} +proc test16IsXvi(test : borrowed Test) throws { + test.assertEqual(convert(16), "XVI"); +} +proc test27IsXxvii(test : borrowed Test) throws { + test.assertEqual(convert(27), "XXVII"); +} +proc test48IsXlviii(test : borrowed Test) throws { + test.assertEqual(convert(48), "XLVIII"); +} +proc test49IsXlix(test : borrowed Test) throws { + test.assertEqual(convert(49), "XLIX"); +} +proc test59IsLix(test : borrowed Test) throws { + test.assertEqual(convert(59), "LIX"); +} +proc test66IsLxvi(test : borrowed Test) throws { + test.assertEqual(convert(66), "LXVI"); +} +proc test93IsXciii(test : borrowed Test) throws { + test.assertEqual(convert(93), "XCIII"); +} +proc test141IsCxli(test : borrowed Test) throws { + test.assertEqual(convert(141), "CXLI"); +} +proc test163IsClxiii(test : borrowed Test) throws { + test.assertEqual(convert(163), "CLXIII"); +} +proc test166IsClxvi(test : borrowed Test) throws { + test.assertEqual(convert(166), "CLXVI"); +} +proc test402IsCdii(test : borrowed Test) throws { + test.assertEqual(convert(402), "CDII"); +} +proc test575IsDlxxv(test : borrowed Test) throws { + test.assertEqual(convert(575), "DLXXV"); +} +proc test666IsDclxvi(test : borrowed Test) throws { + test.assertEqual(convert(666), "DCLXVI"); +} +proc test911IsCmxi(test : borrowed Test) throws { + test.assertEqual(convert(911), "CMXI"); +} +proc test1024IsMxxiv(test : borrowed Test) throws { + test.assertEqual(convert(1024), "MXXIV"); +} +proc test1666IsMdclxvi(test : borrowed Test) throws { + test.assertEqual(convert(1666), "MDCLXVI"); +} +proc test3000IsMmm(test : borrowed Test) throws { + test.assertEqual(convert(3000), "MMM"); +} +proc test3001IsMmmi(test : borrowed Test) throws { + test.assertEqual(convert(3001), "MMMI"); +} +proc test3999IsMmmcmxcix(test : borrowed Test) throws { + test.assertEqual(convert(3999), "MMMCMXCIX"); +} + +UnitTest.main();