diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..e7f3a15 Binary files /dev/null and b/.DS_Store differ diff --git a/lib/reverse_sentence.rb b/lib/reverse_sentence.rb index 3fe7cac..13a9761 100644 --- a/lib/reverse_sentence.rb +++ b/lib/reverse_sentence.rb @@ -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) +# 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) + 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) + 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 + i = j+2 + j = i + end + return string end diff --git a/lib/sort_by_length.rb b/lib/sort_by_length.rb index a5713ad..e0fc8e2 100644 --- a/lib/sort_by_length.rb +++ b/lib/sort_by_length.rb @@ -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 diff --git a/test/reverse_sentence_test.rb b/test/reverse_sentence_test.rb index 346069b..02400d2 100644 --- a/test/reverse_sentence_test.rb +++ b/test/reverse_sentence_test.rb @@ -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 diff --git a/test/sort_by_length.rb b/test/sort_by_length_test.rb similarity index 99% rename from test/sort_by_length.rb rename to test/sort_by_length_test.rb index c38d976..1eb292f 100644 --- a/test/sort_by_length.rb +++ b/test/sort_by_length_test.rb @@ -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