diff --git a/config.json b/config.json index 9e98d93f..30157d35 100644 --- a/config.json +++ b/config.json @@ -147,6 +147,14 @@ "transforming" ] }, + { + "slug": "reverse-string", + "name": "Reverse String", + "uuid": "a20d18f8-45ed-4712-ad75-e38f4b0e048b", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "robot-simulator", "name": "Robot Simulator", diff --git a/exercises/practice/reverse-string/.docs/instructions.md b/exercises/practice/reverse-string/.docs/instructions.md new file mode 100644 index 00000000..0ff4198e --- /dev/null +++ b/exercises/practice/reverse-string/.docs/instructions.md @@ -0,0 +1,9 @@ +# Instructions + +Your task is to reverse a given string. + +Some examples: + +- Turn `"stressed"` into `"desserts"`. +- Turn `"strops"` into `"sports"`. +- Turn `"racecar"` into `"racecar"`. diff --git a/exercises/practice/reverse-string/.docs/introduction.md b/exercises/practice/reverse-string/.docs/introduction.md new file mode 100644 index 00000000..02233e07 --- /dev/null +++ b/exercises/practice/reverse-string/.docs/introduction.md @@ -0,0 +1,5 @@ +# Introduction + +Reversing strings (reading them from right to left, rather than from left to right) is a surprisingly common task in programming. + +For example, in bioinformatics, reversing the sequence of DNA or RNA strings is often important for various analyses, such as finding complementary strands or identifying palindromic sequences that have biological significance. diff --git a/exercises/practice/reverse-string/.meta/Example.scala b/exercises/practice/reverse-string/.meta/Example.scala new file mode 100644 index 00000000..0bd51360 --- /dev/null +++ b/exercises/practice/reverse-string/.meta/Example.scala @@ -0,0 +1,3 @@ +object ReverseString { + def reverse(str: String): String = str.foldRight("") ( (a, b) => b + a) +} diff --git a/exercises/practice/reverse-string/.meta/config.json b/exercises/practice/reverse-string/.meta/config.json new file mode 100644 index 00000000..230cdd4a --- /dev/null +++ b/exercises/practice/reverse-string/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "BNAndras" + ], + "files": { + "solution": [ + "src/main/scala/ReverseString.scala" + ], + "test": [ + "src/test/scala/ReverseStringTest.scala" + ], + "example": [ + ".meta/Example.scala" + ] + }, + "blurb": "Reverse a given string.", + "source": "Introductory challenge to reverse an input string", + "source_url": "https://medium.freecodecamp.org/how-to-reverse-a-string-in-javascript-in-3-different-ways-75e4763c68cb" +} diff --git a/exercises/practice/reverse-string/.meta/tests.toml b/exercises/practice/reverse-string/.meta/tests.toml new file mode 100644 index 00000000..0b04c4cd --- /dev/null +++ b/exercises/practice/reverse-string/.meta/tests.toml @@ -0,0 +1,28 @@ +# 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. + +[c3b7d806-dced-49ee-8543-933fd1719b1c] +description = "an empty string" + +[01ebf55b-bebb-414e-9dec-06f7bb0bee3c] +description = "a word" + +[0f7c07e4-efd1-4aaa-a07a-90b49ce0b746] +description = "a capitalized word" + +[71854b9c-f200-4469-9f5c-1e8e5eff5614] +description = "a sentence with punctuation" + +[1f8ed2f3-56f3-459b-8f3e-6d8d654a1f6c] +description = "a palindrome" + +[b9e7dec1-c6df-40bd-9fa3-cd7ded010c4c] +description = "an even-sized word" diff --git a/exercises/practice/reverse-string/build.sbt b/exercises/practice/reverse-string/build.sbt new file mode 100644 index 00000000..6b92ed9c --- /dev/null +++ b/exercises/practice/reverse-string/build.sbt @@ -0,0 +1,3 @@ +scalaVersion := "2.13.6" + +libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.10" % "test" diff --git a/exercises/practice/reverse-string/src/main/scala/ReverseString.scala b/exercises/practice/reverse-string/src/main/scala/ReverseString.scala new file mode 100644 index 00000000..ab35263e --- /dev/null +++ b/exercises/practice/reverse-string/src/main/scala/ReverseString.scala @@ -0,0 +1,3 @@ +object ReverseString { + def reverse(str: String): String = ??? +} diff --git a/exercises/practice/reverse-string/src/test/scala/ReverseStringTest.scala b/exercises/practice/reverse-string/src/test/scala/ReverseStringTest.scala new file mode 100644 index 00000000..b42b17ca --- /dev/null +++ b/exercises/practice/reverse-string/src/test/scala/ReverseStringTest.scala @@ -0,0 +1,35 @@ +import org.scalatest.funsuite.AnyFunSuite +import org.scalatest.matchers.should.Matchers + + +class ReverseStringTest extends AnyFunSuite with Matchers { + + test("an empty string") { + ReverseString.reverse("") should be ("") + } + + test("a word") { + pending + ReverseString.reverse("robot") should be ("tobor") + } + + test("a capitalized word") { + pending + ReverseString.reverse("Ramen") should be ("nemaR") + } + + test("a sentence with punctuation") { + pending + ReverseString.reverse("I'm hungry!") should be ("!yrgnuh m'I") + } + + test("a palindrome") { + pending + ReverseString.reverse("racecar") should be ("racecar") + } + + test("an even-sized word") { + pending + ReverseString.reverse("drawer") should be ("reward") + } +}