diff --git a/config.json b/config.json index b00a6114ba..1e14743716 100644 --- a/config.json +++ b/config.json @@ -41,9 +41,7 @@ "concepts": [ "basics" ], - "prerequisites": [ - - ] + "prerequisites": [] }, { "slug": "amusement-park", @@ -219,12 +217,8 @@ "slug": "hello-world", "name": "Hello World", "uuid": "4fe19484-4414-471b-a106-73c776c61388", - "practices": [ - - ], - "prerequisites": [ - - ], + "practices": [], + "prerequisites": [], "difficulty": 1 }, { @@ -282,6 +276,14 @@ ], "difficulty": 2 }, + { + "slug": "reverse-string", + "name": "Reverse String", + "uuid": "3cd81b0b-8172-44ed-9e7a-140713a918db", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "matrix", "name": "Matrix", @@ -318,9 +320,7 @@ "slug": "word-count", "name": "Word Count", "uuid": "e9d29769-8d4d-4159-8d6f-762db5339707", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings", "numbers" @@ -377,9 +377,7 @@ "slug": "scrabble-score", "name": "Scrabble Score", "uuid": "d934ebce-9ac3-4a41-bcb8-d70480170438", - "practices": [ - - ], + "practices": [], "prerequisites": [ "numbers", "strings" @@ -442,9 +440,7 @@ "slug": "gigasecond", "name": "Gigasecond", "uuid": "0fb594a1-193b-4ccf-8de2-eb6a81708b29", - "practices": [ - - ], + "practices": [], "prerequisites": [ "numbers" ], @@ -589,9 +585,7 @@ "slug": "armstrong-numbers", "name": "Armstrong Numbers", "uuid": "77c5c7e6-265a-4f1a-9bc4-851f8f825420", - "practices": [ - - ], + "practices": [], "prerequisites": [ "numbers", "booleans" @@ -614,9 +608,7 @@ "slug": "phone-number", "name": "Phone Number", "uuid": "b68665d5-14ef-4351-ac4a-c28a80c27b3d", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings" ], @@ -626,9 +618,7 @@ "slug": "grains", "name": "Grains", "uuid": "22519f53-4516-43bc-915e-07d58e48f617", - "practices": [ - - ], + "practices": [], "prerequisites": [ "conditionals", "loops", @@ -696,9 +686,7 @@ "slug": "pythagorean-triplet", "name": "Pythagorean Triplet", "uuid": "43aad536-0e24-464c-9554-cbc2699d0543", - "practices": [ - - ], + "practices": [], "prerequisites": [ "numbers" ], @@ -765,14 +753,10 @@ "slug": "accumulate", "name": "Accumulate", "uuid": "2c71fc3a-2c93-402b-b091-697b795ce3ba", - "status": "deprecated", - "practices": [ - - ], - "prerequisites": [ - - ], - "difficulty": 1 + "practices": [], + "prerequisites": [], + "difficulty": 1, + "status": "deprecated" }, { "slug": "bob", @@ -791,22 +775,16 @@ "slug": "strain", "name": "Strain", "uuid": "ac0966a9-822b-45be-91d9-36f6706ea76f", - "status": "deprecated", - "practices": [ - - ], - "prerequisites": [ - - ], - "difficulty": 2 + "practices": [], + "prerequisites": [], + "difficulty": 2, + "status": "deprecated" }, { "slug": "nth-prime", "name": "Nth Prime", "uuid": "16baef71-6234-4928-a2d4-a19eb8e110b8", - "practices": [ - - ], + "practices": [], "prerequisites": [ "numbers", "exceptions" @@ -830,9 +808,7 @@ "slug": "alphametics", "name": "Alphametics", "uuid": "2323a2a5-c181-4c1e-9c5f-f6b92b2de511", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings" ], @@ -869,9 +845,7 @@ "slug": "matching-brackets", "name": "Matching Brackets", "uuid": "26f6e297-7980-4472-8ce7-157b62b0ff40", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings", "booleans" @@ -906,9 +880,7 @@ "slug": "allergies", "name": "Allergies", "uuid": "7a67a62f-9331-4776-a5b5-aaba7ad1e1e6", - "practices": [ - - ], + "practices": [], "prerequisites": [ "arrays", "booleans" @@ -919,9 +891,7 @@ "slug": "rail-fence-cipher", "name": "Rail Fence Cipher", "uuid": "64196fe5-2270-4113-a614-fbfbb6d00f2b", - "practices": [ - - ], + "practices": [], "prerequisites": [ "numbers", "strings" @@ -1021,9 +991,7 @@ "slug": "secret-handshake", "name": "Secret Handshake", "uuid": "c1ebad1b-d5aa-465a-b5ef-9e717ab5db9e", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings", "arrays" @@ -1047,9 +1015,7 @@ "slug": "crypto-square", "name": "Crypto Square", "uuid": "86f8e33d-31b7-43e3-8ea3-2e391133704a", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings" ], @@ -1071,9 +1037,7 @@ "slug": "robot-name", "name": "Robot Name", "uuid": "76a0fd0a-cc65-4be3-acc8-7348bb67ad5a", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings" ], @@ -1098,9 +1062,7 @@ "slug": "dominoes", "name": "Dominoes", "uuid": "705f3eb6-55a9-476c-b3f2-e9f3cb0bbe37", - "practices": [ - - ], + "practices": [], "prerequisites": [ "numbers", "booleans" @@ -1111,9 +1073,7 @@ "slug": "pig-latin", "name": "Pig Latin", "uuid": "efc0e498-891a-4e91-a6aa-fae635573a83", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings" ], @@ -1178,9 +1138,7 @@ "slug": "grade-school", "name": "Grade School", "uuid": "4460742c-2beb-48d7-94e6-72ff13c68c71", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings", "numbers" @@ -1233,9 +1191,7 @@ "slug": "kindergarten-garden", "name": "Kindergarten Garden", "uuid": "04bde625-e363-4d8b-880f-db7bf86286eb", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings" ], @@ -1245,9 +1201,7 @@ "slug": "largest-series-product", "name": "Largest Series Product", "uuid": "7cb55328-1b11-4544-94c0-945444d9a6a4", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings", "loops", @@ -1272,9 +1226,7 @@ "slug": "custom-set", "name": "Custom Set", "uuid": "4f74b3cd-f995-4b8c-9b57-23f073261d0e", - "practices": [ - - ], + "practices": [], "prerequisites": [ "arrays", "numbers", @@ -1299,9 +1251,7 @@ "slug": "linked-list", "name": "Linked List", "uuid": "92c9aafc-791d-4aaf-a136-9bee14f6ff95", - "practices": [ - - ], + "practices": [], "prerequisites": [ "numbers" ], @@ -1311,9 +1261,7 @@ "slug": "poker", "name": "Poker", "uuid": "9a59ba44-34f5-410b-a1e6-9a5c47c52d9e", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings", "conditionals" @@ -1337,9 +1285,7 @@ "slug": "complex-numbers", "name": "Complex Numbers", "uuid": "d75bd7c0-52c5-44f2-a046-f63cb332425f", - "practices": [ - - ], + "practices": [], "prerequisites": [ "numbers" ], @@ -1349,12 +1295,8 @@ "slug": "meetup", "name": "Meetup", "uuid": "8120e133-9561-4f82-8081-10c19f7f6ba3", - "practices": [ - - ], - "prerequisites": [ - - ], + "practices": [], + "prerequisites": [], "difficulty": 3 }, { @@ -1417,9 +1359,7 @@ "slug": "zipper", "name": "Zipper", "uuid": "239b8e79-2983-4ce0-9dda-9bb999e79d11", - "practices": [ - - ], + "practices": [], "prerequisites": [ "numbers" ], @@ -1458,9 +1398,7 @@ "slug": "pascals-triangle", "name": "Pascal's Triangle", "uuid": "4ff8b056-f27d-4bdf-b7af-214448db4260", - "practices": [ - - ], + "practices": [], "prerequisites": [ "loops", "numbers" @@ -1471,9 +1409,7 @@ "slug": "queen-attack", "name": "Queen Attack", "uuid": "2ce9b158-e730-4c86-8639-bd08af9f80f4", - "practices": [ - - ], + "practices": [], "prerequisites": [ "booleans", "conditionals", @@ -1501,9 +1437,7 @@ "slug": "connect", "name": "Connect", "uuid": "538a6768-bae5-437c-9cdf-765d73a79643", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings", "arrays", @@ -1515,12 +1449,8 @@ "slug": "binary", "name": "Binary", "uuid": "43bc27ed-d2fa-4173-8665-4459b71c9a3a", - "practices": [ - - ], - "prerequisites": [ - - ], + "practices": [], + "prerequisites": [], "difficulty": 1, "status": "deprecated" }, @@ -1528,12 +1458,8 @@ "slug": "hexadecimal", "name": "Hexadecimal", "uuid": "6984cc14-91f8-47a7-b7e2-4b210a5dbc5c", - "practices": [ - - ], - "prerequisites": [ - - ], + "practices": [], + "prerequisites": [], "difficulty": 1, "status": "deprecated" }, @@ -1541,12 +1467,8 @@ "slug": "octal", "name": "Octal", "uuid": "cae4e000-3aac-41f7-b727-f9cce12d058d", - "practices": [ - - ], - "prerequisites": [ - - ], + "practices": [], + "prerequisites": [], "difficulty": 1, "status": "deprecated" }, @@ -1554,12 +1476,8 @@ "slug": "point-mutations", "name": "Point Mutations", "uuid": "89bd3d71-000f-4cd9-9a84-ad1b22ddbd33", - "practices": [ - - ], - "prerequisites": [ - - ], + "practices": [], + "prerequisites": [], "difficulty": 1, "status": "deprecated" }, @@ -1567,12 +1485,8 @@ "slug": "trinary", "name": "Trinary", "uuid": "f6735416-4be6-4eb8-b6b9-cb61671ce25e", - "practices": [ - - ], - "prerequisites": [ - - ], + "practices": [], + "prerequisites": [], "difficulty": 1, "status": "deprecated" }, @@ -1580,12 +1494,8 @@ "slug": "microwave", "name": "Microwave", "uuid": "34e715a6-4d22-4b74-a26a-409283ac419c", - "practices": [ - - ], - "prerequisites": [ - - ], + "practices": [], + "prerequisites": [], "difficulty": 2 }, { @@ -1606,9 +1516,7 @@ "slug": "gilded-rose", "name": "Gilded Rose", "uuid": "19f65173-5c79-4a6a-b9e1-352ec438a3c4", - "practices": [ - - ], + "practices": [], "prerequisites": [ "strings", "conditionals", @@ -1727,44 +1635,44 @@ ], "key_features": [ { - "icon": "fun", "title": "Developer happiness", - "content": "Ruby puts developer-happiness first. It has an elegant syntax that is natural to read and write." + "content": "Ruby puts developer-happiness first. It has an elegant syntax that is natural to read and write.", + "icon": "fun" }, { - "icon": "extensible", "title": "Metaprogramming magic", - "content": "Ruby code can write and invoke Ruby code." + "content": "Ruby code can write and invoke Ruby code.", + "icon": "extensible" }, { - "icon": "garbage-collected", "title": "Garbage Collection", - "content": "Garbage collection done via mark and sweep, stays out of your way." + "content": "Garbage collection done via mark and sweep, stays out of your way.", + "icon": "garbage-collected" }, { - "icon": "powerful", "title": "Large standard library", - "content": "Ruby's standard library provides a wealth of classes utilities for common tasks." + "content": "Ruby's standard library provides a wealth of classes utilities for common tasks.", + "icon": "powerful" }, { - "icon": "tooling", "title": "Flexible package manager", - "content": "Packages (gems) can be centrally managed, but can also include custom or private gem stores." + "content": "Packages (gems) can be centrally managed, but can also include custom or private gem stores.", + "icon": "tooling" }, { - "icon": "dynamically-typed", "title": "Strong, dynamic typing", - "content": "Ruby is strong and dynamically typed and supports 'Duck Typing'. Everything in Ruby is an object" + "content": "Ruby is strong and dynamically typed and supports 'Duck Typing'. Everything in Ruby is an object", + "icon": "dynamically-typed" } ], "tags": [ + "execution_mode/interpreted", "paradigm/functional", "paradigm/object_oriented", "platform/linux", - "platform/windows", "platform/mac", + "platform/windows", "runtime/language_specific", - "execution_mode/interpreted", "typing/dynamic", "typing/strong", "used_for/backends", diff --git a/exercises/practice/reverse-string/.docs/instructions.md b/exercises/practice/reverse-string/.docs/instructions.md new file mode 100644 index 0000000000..0ff4198e46 --- /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 0000000000..02233e0755 --- /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/config.json b/exercises/practice/reverse-string/.meta/config.json new file mode 100644 index 0000000000..d9e55dfb92 --- /dev/null +++ b/exercises/practice/reverse-string/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "iHiD", "erikSchierboom" + ], + "files": { + "solution": [ + "reverser.rb" + ], + "test": [ + "reverse_string_test.rb" + ], + "example": [ + ".meta/example.rb" + ] + }, + "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/example.rb b/exercises/practice/reverse-string/.meta/example.rb new file mode 100644 index 0000000000..e18e8e277b --- /dev/null +++ b/exercises/practice/reverse-string/.meta/example.rb @@ -0,0 +1,5 @@ +module Reverser + def self.reverse(input) + input.reverse + end +end diff --git a/exercises/practice/reverse-string/.meta/tests.toml b/exercises/practice/reverse-string/.meta/tests.toml new file mode 100644 index 0000000000..0b04c4cd7c --- /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/reverse_string_test.rb b/exercises/practice/reverse-string/reverse_string_test.rb new file mode 100644 index 0000000000..adeb3675a3 --- /dev/null +++ b/exercises/practice/reverse-string/reverse_string_test.rb @@ -0,0 +1,34 @@ +require 'minitest/autorun' +require_relative 'reverser' + +class ReverserTest < Minitest::Test + def test_an_empty_string + # skip + assert_equal "", Reverser.reverse("") + end + + def test_a_word + skip + assert_equal "tobor", Reverser.reverse("robot") + end + + def test_a_capitalized_word + skip + assert_equal "nemaR", Reverser.reverse("Ramen") + end + + def test_a_sentence_with_punctuation + skip + assert_equal "!yrgnuh m'I", Reverser.reverse("I'm hungry!") + end + + def test_a_palindrome + skip + assert_equal "racecar", Reverser.reverse("racecar") + end + + def test_an_even_sized_word + skip + assert_equal "reward", Reverser.reverse("drawer") + end +end diff --git a/exercises/practice/reverse-string/reverser.rb b/exercises/practice/reverse-string/reverser.rb new file mode 100644 index 0000000000..d3644f9287 --- /dev/null +++ b/exercises/practice/reverse-string/reverser.rb @@ -0,0 +1,7 @@ +=begin +Write your code for the 'Reverse String' exercise in this file. Make the tests in +`reverse_string_test.rb` pass. + +To get started with TDD, see the `README.md` file in your +`ruby/reverse-string` directory. +=end