Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
54 changes: 50 additions & 4 deletions lib/reverse_sentence.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,52 @@
# A method to reverse the words in a sentence, in place.
# Time complexity: ?
# Space complexity: ?
# A method to reverse the words in a sentence, in place.
# Time complexity: O(n^3)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is actually O(n) as a solution.

# Space complexity: O(1)
def reverse_sentence(my_sentence)
raise NotImplementedError
if my_sentence == nil
return nil
end
my_sentence = string_reverse(my_sentence)
my_sentence = word_reverse(my_sentence)
return my_sentence
end

def string_reverse(string)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 O(n)

i = 0
j = string.length - 1
temp_i = ""
temp_j = ""
while i < j do
temp_i = string[i]
temp_j = string[j]
string[i] = temp_j
string[j] = temp_i
i+=1
j-=1
end
return string
end

def word_reverse(string)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 O(n)

i = 0
j = 0
length = string.length
while i < length
while string[j] != " " && j < length do
j += 1
end
j -= 1
word_start = i
word_end = j
while word_start < word_end do
temp_i = string[word_start]
temp_j = string[word_end]
string[word_start] = temp_j
string[word_end] = temp_i
word_start+=1
word_end-=1
end
Comment on lines +40 to +47

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This does the same logic as reverse_sentence, so why not make the method flexible enough to be used in both places.

i = j+2
j = i
end
return string
end
25 changes: 22 additions & 3 deletions lib/sort_by_length.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,26 @@
# A method which will return an array of the words in the string
# sorted by the length of the word.
# Time complexity: ?
# Space complexity: ?
# Time complexity: O(n^2)
# Space complexity: On

def sort_by_length(my_sentence)
raise NotImplementedError, "Method not implemented"
sorted_sentence = my_sentence.split(" ")
bubble_sort(sorted_sentence, sorted_sentence.length)
return sorted_sentence
end

def bubble_sort(array, length)
i = 0
while i < length-1 # outer loop
j = 0
while j < length-i-1 # inner loop
if array[j].length > array[j+1].length # swap
temp = array[j]
array[j] = array[j+1]
array[j+1] = temp
end
j += 1
end
i += 1
end
end
46 changes: 23 additions & 23 deletions test/reverse_sentence_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,70 +4,70 @@
describe "basic tests" do
it "reverse a sentence with two words" do
test_string = "hello, world"

reverse_sentence(test_string)

test_string.must_equal "world hello,"
end

it "reverse a sentence with three words" do
test_string = "Yoda is awesome!"

reverse_sentence(test_string)

test_string.must_equal "awesome! is Yoda"
end
end

# check for edge cases
describe "edge cases" do
# if it's a string parameter, check for empty
it "reverse an empty sentence" do
test_string = ""

reverse_sentence(test_string)

test_string.must_be_empty
end

# if the parameter is an object, check for nil
it "nil object passed to sentence reverse" do
test_string = nil

reverse_sentence(test_string)

test_string.must_be_nil
end

it "reverse a sentence with one word" do
test_string = "world"

reverse_sentence(test_string)

test_string.must_equal "world"
end

it "reverse a sentence with multiple words" do
test_string = "I'm a better engineer today than I was yesterday."

reverse_sentence(test_string)

test_string.must_equal "yesterday. was I than today engineer better a I'm"
end

it "reverse a sentence with multiple spaces between words" do
test_string = "How do you like them apples?"

reverse_sentence(test_string)

test_string.must_equal "apples? them like you do How"
end

it "reverse a sentence with preceeding and trailing white spaces" do
test_string = " I can do this! "

reverse_sentence(test_string)

test_string.must_equal " this! do can I "
end
end
Expand Down
4 changes: 2 additions & 2 deletions test/sort_by_length.rb → test/sort_by_length_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@
it "will return an array of words, by length" do
expect(sort_by_length("I love Ada")).must_equal ["I", "Ada", "love"]
end

it "will return an array of words by length, words that are of equal length will appear in the order they appear" do
expect(sort_by_length("words of equal length")).must_equal ["of", "words", "equal", "length"]
end

it "will return an array of words by length, words that are of equal length will appear in the order they appear" do
expect(sort_by_length("I love great awesome words")).must_equal ["I", "love", "great", "words", "awesome"]
end
Expand Down