From f6c92c99bd38650b72ebbec55b3b258a5e3cfccb Mon Sep 17 00:00:00 2001 From: Ahmed Date: Mon, 27 Oct 2025 01:12:34 +0000 Subject: [PATCH 1/4] Added selection sort file to ruby --- archive/r/ruby/selection-sort.rb | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 archive/r/ruby/selection-sort.rb diff --git a/archive/r/ruby/selection-sort.rb b/archive/r/ruby/selection-sort.rb new file mode 100644 index 000000000..e69de29bb From edc0a49730bd6963bae1d21412b3e422840cda64 Mon Sep 17 00:00:00 2001 From: Ahmed Date: Mon, 27 Oct 2025 01:52:27 +0000 Subject: [PATCH 2/4] Solved selection sort in ruby --- archive/r/ruby/selection-sort.rb | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/archive/r/ruby/selection-sort.rb b/archive/r/ruby/selection-sort.rb index e69de29bb..38b4e116d 100644 --- a/archive/r/ruby/selection-sort.rb +++ b/archive/r/ruby/selection-sort.rb @@ -0,0 +1,28 @@ +# Define a function that takes in an array of numbers +def selection_sort (numbers) + # Store the given array into a variable + unsorted_elements = numbers + + # Create a array to store our final sorted array + sorted_elements = [] + + # Loop through all the numbers + while !unsorted_elements.empty? + # Find the minimum element in the array + min_element = unsorted_elements.min + + # Store the index of the minimum elment + index = unsorted_elements.index(unsorted_elements.min) + + # Add the minimum element to the sorted array at the start + sorted_elements.push(min_element) + + # Delete the element from the unsorted array + unsorted_elements.delete_at(index) + end + + # Return the sorted elements in an array + return sorted_elements +end + +print(selection_sort(ARGV[0])) \ No newline at end of file From 867590774f631a8411879e1d6c3307ef666ed550 Mon Sep 17 00:00:00 2001 From: Ahmed Date: Mon, 27 Oct 2025 02:02:36 +0000 Subject: [PATCH 3/4] Added input validation, and converted incoming values to integers for sorting purposes. --- archive/r/ruby/selection-sort.rb | 49 +++++++++++++++++++------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/archive/r/ruby/selection-sort.rb b/archive/r/ruby/selection-sort.rb index 38b4e116d..df9f0c098 100644 --- a/archive/r/ruby/selection-sort.rb +++ b/archive/r/ruby/selection-sort.rb @@ -1,28 +1,37 @@ -# Define a function that takes in an array of numbers -def selection_sort (numbers) - # Store the given array into a variable - unsorted_elements = numbers +def selection_sort(numbers) + # Handle missing or invalid input + if numbers.nil? || numbers.strip.empty? + return 'Usage: please provide a list of at least two integers to sort in the format "1, 2, 3, 4, 5"' + end - # Create a array to store our final sorted array - sorted_elements = [] + # Remove surrounding quotes if present + numbers = numbers.strip + numbers = numbers[1..-2] if numbers.start_with?('"') && numbers.end_with?('"') - # Loop through all the numbers - while !unsorted_elements.empty? - # Find the minimum element in the array - min_element = unsorted_elements.min + # Split into an array and convert to integers + unsorted_elements = numbers.split(',').map(&:strip).map(&:to_i) - # Store the index of the minimum elment - index = unsorted_elements.index(unsorted_elements.min) + # Validate array has at least 2 elements + if unsorted_elements.length < 2 + return 'Usage: please provide a list of at least two integers to sort in the format "1, 2, 3, 4, 5"' + end - # Add the minimum element to the sorted array at the start - sorted_elements.push(min_element) + sorted_elements = [] - # Delete the element from the unsorted array - unsorted_elements.delete_at(index) - end + # Iterate until the list of unsorted elements is emptu + until unsorted_elements.empty? + # Store the minimal value in a variable + min_element = unsorted_elements.min - # Return the sorted elements in an array - return sorted_elements + # Add the element at the end of the sorted elements array + sorted_elements.push(min_element) + + # Delete the minimal value from the unsorted elements array + unsorted_elements.delete_at(unsorted_elements.index(min_element)) + end + + # Return as comma-separated string + sorted_elements.join(', ') end -print(selection_sort(ARGV[0])) \ No newline at end of file +puts selection_sort(ARGV[0]) \ No newline at end of file From a12c0df8f674d42cbdd25b33d5c51942deb73697 Mon Sep 17 00:00:00 2001 From: Ahmed Date: Mon, 27 Oct 2025 02:05:38 +0000 Subject: [PATCH 4/4] Optimized code and added some needed comments for clarity --- archive/r/ruby/selection-sort.rb | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/archive/r/ruby/selection-sort.rb b/archive/r/ruby/selection-sort.rb index df9f0c098..f0d3b2f3a 100644 --- a/archive/r/ruby/selection-sort.rb +++ b/archive/r/ruby/selection-sort.rb @@ -3,11 +3,7 @@ def selection_sort(numbers) if numbers.nil? || numbers.strip.empty? return 'Usage: please provide a list of at least two integers to sort in the format "1, 2, 3, 4, 5"' end - - # Remove surrounding quotes if present - numbers = numbers.strip - numbers = numbers[1..-2] if numbers.start_with?('"') && numbers.end_with?('"') - + # Split into an array and convert to integers unsorted_elements = numbers.split(',').map(&:strip).map(&:to_i) @@ -16,8 +12,9 @@ def selection_sort(numbers) return 'Usage: please provide a list of at least two integers to sort in the format "1, 2, 3, 4, 5"' end + # Make an array to store the sorted elements sorted_elements = [] - + # Iterate until the list of unsorted elements is emptu until unsorted_elements.empty? # Store the minimal value in a variable