From 31606f6528ef5de1f2028fa50edc6d991039c8c8 Mon Sep 17 00:00:00 2001 From: andie5 Date: Mon, 3 Apr 2017 22:33:25 +0100 Subject: [PATCH 1/4] added name to readme --- .rspec | 3 ++ Gemfile | 4 ++ Gemfile.lock | 65 ++++++++++++++++++++++++++++ Guardfile | 70 ++++++++++++++++++++++++++++++ README.md | 1 + spec/spec_helper.rb | 103 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 246 insertions(+) create mode 100644 .rspec create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100644 Guardfile create mode 100644 spec/spec_helper.rb diff --git a/.rspec b/.rspec new file mode 100644 index 0000000..43ae203 --- /dev/null +++ b/.rspec @@ -0,0 +1,3 @@ +--color +--require spec_helper +--format documentation diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..bdf3bd7 --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +source "https://rubygems.org" + +gem 'rspec' +gem 'guard-rspec', require: false \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..5d0bb9f --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,65 @@ +GEM + remote: https://rubygems.org/ + specs: + coderay (1.1.1) + diff-lcs (1.3) + ffi (1.9.17) + formatador (0.2.5) + guard (2.14.1) + formatador (>= 0.2.4) + listen (>= 2.7, < 4.0) + lumberjack (~> 1.0) + nenv (~> 0.1) + notiffany (~> 0.0) + pry (>= 0.9.12) + shellany (~> 0.0) + thor (>= 0.18.1) + guard-compat (1.2.1) + guard-rspec (4.7.3) + guard (~> 2.1) + guard-compat (~> 1.1) + rspec (>= 2.99.0, < 4.0) + listen (3.1.5) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + ruby_dep (~> 1.2) + lumberjack (1.0.11) + method_source (0.8.2) + nenv (0.3.0) + notiffany (0.1.1) + nenv (~> 0.1) + shellany (~> 0.0) + pry (0.10.4) + coderay (~> 1.1.0) + method_source (~> 0.8.1) + slop (~> 3.4) + rb-fsevent (0.9.8) + rb-inotify (0.9.8) + ffi (>= 0.5.0) + rspec (3.5.0) + rspec-core (~> 3.5.0) + rspec-expectations (~> 3.5.0) + rspec-mocks (~> 3.5.0) + rspec-core (3.5.4) + rspec-support (~> 3.5.0) + rspec-expectations (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-mocks (3.5.0) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.5.0) + rspec-support (3.5.0) + ruby_dep (1.5.0) + shellany (0.0.1) + slop (3.6.0) + thor (0.19.4) + +PLATFORMS + ruby + +DEPENDENCIES + guard-rspec + rspec + +BUNDLED WITH + 1.14.3 diff --git a/Guardfile b/Guardfile new file mode 100644 index 0000000..3215f01 --- /dev/null +++ b/Guardfile @@ -0,0 +1,70 @@ +# A sample Guardfile +# More info at https://github.com/guard/guard#readme + +## Uncomment and set this to only include directories you want to watch +# directories %w(app lib config test spec features) \ +# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")} + +## Note: if you are using the `directories` clause above and you are not +## watching the project directory ('.'), then you will want to move +## the Guardfile to a watched dir and symlink it back, e.g. +# +# $ mkdir config +# $ mv Guardfile config/ +# $ ln -s config/Guardfile . +# +# and, you'll have to watch "config/Guardfile" instead of "Guardfile" + +# Note: The cmd option is now required due to the increasing number of ways +# rspec may be run, below are examples of the most common uses. +# * bundler: 'bundle exec rspec' +# * bundler binstubs: 'bin/rspec' +# * spring: 'bin/rspec' (This will use spring if running and you have +# installed the spring binstubs per the docs) +# * zeus: 'zeus rspec' (requires the server to be started separately) +# * 'just' rspec: 'rspec' + +guard :rspec, cmd: "bundle exec rspec" do + require "guard/rspec/dsl" + dsl = Guard::RSpec::Dsl.new(self) + + # Feel free to open issues for suggestions and improvements + + # RSpec files + rspec = dsl.rspec + watch(rspec.spec_helper) { rspec.spec_dir } + watch(rspec.spec_support) { rspec.spec_dir } + watch(rspec.spec_files) + + # Ruby files + ruby = dsl.ruby + dsl.watch_spec_files_for(ruby.lib_files) + + # Rails files + rails = dsl.rails(view_extensions: %w(erb haml slim)) + dsl.watch_spec_files_for(rails.app_files) + dsl.watch_spec_files_for(rails.views) + + watch(rails.controllers) do |m| + [ + rspec.spec.call("routing/#{m[1]}_routing"), + rspec.spec.call("controllers/#{m[1]}_controller"), + rspec.spec.call("acceptance/#{m[1]}") + ] + end + + # Rails config changes + watch(rails.spec_helper) { rspec.spec_dir } + watch(rails.routes) { "#{rspec.spec_dir}/routing" } + watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" } + + # Capybara features specs + watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") } + watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") } + + # Turnip features and steps + watch(%r{^spec/acceptance/(.+)\.feature$}) + watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m| + Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance" + end +end diff --git a/README.md b/README.md index dc1a8aa..397ea9f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ # assignment_sort +Andrea A Insertion and Merge Sort assignment diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..47b39ce --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1,103 @@ +# This file was generated by the `rspec --init` command. Conventionally, all +# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. +# The generated `.rspec` file contains `--require spec_helper` which will cause +# this file to always be loaded, without a need to explicitly require it in any +# files. +# +# Given that it is always loaded, you are encouraged to keep this file as +# light-weight as possible. Requiring heavyweight dependencies from this file +# will add to the boot time of your test suite on EVERY test run, even for an +# individual file that may not need all of that loaded. Instead, consider making +# a separate helper file that requires the additional dependencies and performs +# the additional setup, and require it from the spec files that actually need +# it. +# +# The `.rspec` file also contains a few flags that are not defaults but that +# users commonly want. +# +# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +RSpec.configure do |config| + # rspec-expectations config goes here. You can use an alternate + # assertion/expectation library such as wrong or the stdlib/minitest + # assertions if you prefer. + config.expect_with :rspec do |expectations| + # This option will default to `true` in RSpec 4. It makes the `description` + # and `failure_message` of custom matchers include text for helper methods + # defined using `chain`, e.g.: + # be_bigger_than(2).and_smaller_than(4).description + # # => "be bigger than 2 and smaller than 4" + # ...rather than: + # # => "be bigger than 2" + expectations.include_chain_clauses_in_custom_matcher_descriptions = true + end + + # rspec-mocks config goes here. You can use an alternate test double + # library (such as bogus or mocha) by changing the `mock_with` option here. + config.mock_with :rspec do |mocks| + # Prevents you from mocking or stubbing a method that does not exist on + # a real object. This is generally recommended, and will default to + # `true` in RSpec 4. + mocks.verify_partial_doubles = true + end + + # This option will default to `:apply_to_host_groups` in RSpec 4 (and will + # have no way to turn it off -- the option exists only for backwards + # compatibility in RSpec 3). It causes shared context metadata to be + # inherited by the metadata hash of host groups and examples, rather than + # triggering implicit auto-inclusion in groups with matching metadata. + config.shared_context_metadata_behavior = :apply_to_host_groups + +# The settings below are suggested to provide a good initial experience +# with RSpec, but feel free to customize to your heart's content. +=begin + # This allows you to limit a spec run to individual examples or groups + # you care about by tagging them with `:focus` metadata. When nothing + # is tagged with `:focus`, all examples get run. RSpec also provides + # aliases for `it`, `describe`, and `context` that include `:focus` + # metadata: `fit`, `fdescribe` and `fcontext`, respectively. + config.filter_run_when_matching :focus + + # Allows RSpec to persist some state between runs in order to support + # the `--only-failures` and `--next-failure` CLI options. We recommend + # you configure your source control system to ignore this file. + config.example_status_persistence_file_path = "spec/examples.txt" + + # Limits the available syntax to the non-monkey patched syntax that is + # recommended. For more details, see: + # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ + # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ + # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode + config.disable_monkey_patching! + + # This setting enables warnings. It's recommended, but in some cases may + # be too noisy due to issues in dependencies. + config.warnings = true + + # Many RSpec users commonly either run the entire suite or an individual + # file, and it's useful to allow more verbose output when running an + # individual spec file. + if config.files_to_run.one? + # Use the documentation formatter for detailed output, + # unless a formatter has already been configured + # (e.g. via a command-line flag). + config.default_formatter = 'doc' + end + + # Print the 10 slowest examples and example groups at the + # end of the spec run, to help surface which specs are running + # particularly slow. + config.profile_examples = 10 + + # Run specs in random order to surface order dependencies. If you find an + # order dependency and want to debug it, you can fix the order by providing + # the seed, which is printed after each run. + # --seed 1234 + config.order = :random + + # Seed global randomization in this process using the `--seed` CLI option. + # Setting this allows you to use `--seed` to deterministically reproduce + # test failures related to randomization by passing the same `--seed` value + # as the one that triggered the failure. + Kernel.srand config.seed +=end +end From 9f347df06080df05f9daa5dde66ae4051a3bd5c9 Mon Sep 17 00:00:00 2001 From: andie5 Date: Tue, 4 Apr 2017 23:32:35 +0100 Subject: [PATCH 2/4] insertion sort --- lib/insertion_sort.rb | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lib/insertion_sort.rb diff --git a/lib/insertion_sort.rb b/lib/insertion_sort.rb new file mode 100644 index 0000000..ecb176c --- /dev/null +++ b/lib/insertion_sort.rb @@ -0,0 +1,38 @@ +# Insertion sort + + +def insertion_sort(array_to_sort) + + counter = array_to_sort.length - 2 + (0..counter).each do |num| + value = array_to_sort[num+1] + insert(array_to_sort, num, value) + end + array_to_sort +end + +# It finds the last sorted element smaller than it, then places itself one index higher + then it proceeds through the rest of the array and swaps everything to the right by one + (Yes, it overwrites one element just to the right of your sorted section. + +def insert(arr, right_index, value) + # value is the value to insert + # right_index is the furthest right sorted element + + # Step through sorted elements right to left. + # As long as your value is less than the element + # at array[i] and you still have elements + + i = right_index + while(i >= 0 && arr[i] > value) + # copy the element + arr[i+1] = arr[i] + i -= 1 + end + + # insert the actual element + arr[i+1] = value; +end + +# insertion_sort([1, 3, 7, 2, 5]) +# insertion_sort([1, 3, 7, 7, 2, 5]) +# insertion_sort([1, 3, 7, 2, 2, 5]) +# insertion_sort([1, -3, 7, 2, -2, -5, 10]) \ No newline at end of file From ee1f93269b6a38e2a6c5051369e4dfea44de29e0 Mon Sep 17 00:00:00 2001 From: andie5 Date: Wed, 5 Apr 2017 00:05:52 +0100 Subject: [PATCH 3/4] bubble sort --- lib/bubble_sort.rb | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 lib/bubble_sort.rb diff --git a/lib/bubble_sort.rb b/lib/bubble_sort.rb new file mode 100644 index 0000000..fde488c --- /dev/null +++ b/lib/bubble_sort.rb @@ -0,0 +1,26 @@ +# Bubble sort + +def bubble_sort(array_to_sort) + + counter = array_to_sort.length - 1 + + loop do + swap = false + (0..counter-1).each do |i| + if(array_to_sort[i] > array_to_sort[i+1]) + # temp = array_to_sort[i] + array_to_sort[i], array_to_sort[i+1] = array_to_sort[i+1], array_to_sort[i] + swap = true + # = temp + end + end + break if not swap + end + array_to_sort +end + + +# bubble_sort([1, 3, 7, 2, 5]) +# bubble_sort([1, 3, 7, 7, 2, 5]) +# bubble_sort([1, 3, 7, 2, 2, 5]) +# bubble_sort([1, -3, 7, 2, -2, -5, 10]) \ No newline at end of file From e229fc55615ef2c8e15b243f0f6d7aa9b7c6e192 Mon Sep 17 00:00:00 2001 From: andie5 Date: Wed, 5 Apr 2017 22:57:11 +0100 Subject: [PATCH 4/4] merge sort --- lib/merge_sort.rb | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 lib/merge_sort.rb diff --git a/lib/merge_sort.rb b/lib/merge_sort.rb new file mode 100644 index 0000000..cb19087 --- /dev/null +++ b/lib/merge_sort.rb @@ -0,0 +1,56 @@ +# Merge recursive sort + +def merge_sort(array_to_sort) + len = array_to_sort.length + # // if the array is one element long, just return it + if(len == 1) + return array_to_sort + else + middle = (len/2) + + left = merge_sort(array_to_sort[0..middle-1]) + + right = merge_sort(array_to_sort[middle..-1]) + + merge(left,right) + end + end + +def merge(left_arr, right_arr) + + new_arr = [] + + until left_arr.length == 0 || right_arr.length == 0 do + + # compare left_arr[0] and right_arr[0] + # whichever is smaller, push it onto new_arr + if(left_arr[0] < right_arr[0]) + new_arr << left_arr[0] + left_arr.shift + else + new_arr << right_arr[0] + right_arr.shift + end + end + + # repeat the process, but don't reuse elements, + # // until you have pushed all the elements from + # // left_arr and right_arr onto new_arr in sorted order + + + new_arr += left_arr + right_arr + + # if left_arr.length == 0 + # new_arr += right_arr + # else + # new_arr += left_arr + # end + + new_arr +end + + +# merge_sort([1, 3, 7, 2, 5]) +# merge_sort([1, 3, 7, 7, 2, 5]) +# merge_sort([1, 3, 7, 2, 2, 5]) +# merge_sort([1, -3, 7, 2, -2, -5, 10]) \ No newline at end of file