Last active
July 18, 2017 06:19
-
-
Save futureperfect/bc349be2b5efe46258051aad5d108de6 to your computer and use it in GitHub Desktop.
Reverse a string, but preserve position of any "special" character
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
source "https://rubygems.org" | |
gem "minitest" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def reverse input, special | |
a = input.split "" | |
i, j = 0, input.length - 1 | |
while i < j do | |
if a[i] == special | |
i += 1 | |
next | |
end | |
if a[j] == special | |
j -= 1 | |
next | |
end | |
tmp = a[i] | |
a[i] = a[j] | |
a[j] = tmp | |
i += 1 | |
j -= 1 | |
end | |
a.join("") | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'minitest/autorun' | |
require "./reverse.rb" | |
class ReverseTest < Minitest::Test | |
def test_reverse_hello | |
reverse = reverse("Hello", "!") | |
assert_equal reverse, "olleH" | |
end | |
def test_reverse_again | |
reverse = reverse("Stuff and nonsense", "!") | |
assert_equal reverse, "esnesnon dna ffutS" | |
end | |
def test_reverse_special | |
reverse = reverse("Hello!", "!") | |
assert_equal reverse, "olleH!" | |
end | |
def test_reverse_stars | |
reverse = reverse "He**o", "*" | |
assert_equal reverse, "oe**H" | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment