From 99aa65d5e4e626a1dc6f0dbbdf48995a896c7c85 Mon Sep 17 00:00:00 2001
From: fartem <jaman.smlnsk@gmail.com>
Date: Thu, 20 Mar 2025 06:21:08 +0300
Subject: [PATCH] 2025-03-20 v. 9.0.5: added "2149. Rearrange Array Elements by
 Sign"

---
 README.md                                     |  1 +
 leetcode-ruby.gemspec                         |  2 +-
 .../2149_rearrange_array_elements_by_sign.rb  | 17 +++++++++++++
 ...t_2149_rearrange_array_elements_by_sign.rb | 25 +++++++++++++++++++
 4 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100644 lib/medium/2149_rearrange_array_elements_by_sign.rb
 create mode 100644 test/medium/test_2149_rearrange_array_elements_by_sign.rb

diff --git a/README.md b/README.md
index 801c3d0d..07e91274 100644
--- a/README.md
+++ b/README.md
@@ -739,6 +739,7 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/).
 | 2125. Number of Laser Beams in a Bank                                               | [Link](https://leetcode.com/problems/number-of-laser-beams-in-a-bank/)                                               | [Link](./lib/medium/2125_number_of_laser_beams_in_a_bank.rb)                                               | [Link](./test/medium/test_2125_number_of_laser_beams_in_a_bank.rb)                                               |
 | 2130. Maximum Twin Sum of a Linked List                                             | [Link](https://leetcode.com/problems/maximum-twin-sum-of-a-linked-list/)                                             | [Link](./lib/medium/2130_maximum_twin_sum_of_a_linked_list.rb)                                             | [Link](./test/medium/test_2130_maximum_twin_sum_of_a_linked_list.rb)                                             |
 | 2131. Longest Palindrome by Concatenating Two Letter Words                          | [Link](https://leetcode.com/problems/longest-palindrome-by-concatenating-two-letter-words/)                          | [Link](./lib/medium/2131_longest_palindrome_by_concatenating_two_letter_words.rb)                          | [Link](./test/medium/test_2131_longest_palindrome_by_concatenating_two_letter_words.rb)                          |
+| 2149. Rearrange Array Elements by Sign                                              | [Link](https://leetcode.com/problems/rearrange-array-elements-by-sign/)                                              | [Link](./lib/medium/2149_rearrange_array_elements_by_sign.rb)                                              | [Link](./test/medium/test_2149_rearrange_array_elements_by_sign.rb)                                              |
 | 2425. Bitwise XOR of All Pairings                                                   | [Link](https://leetcode.com/problems/bitwise-xor-of-all-pairings/)                                                   | [Link](./lib/medium/2425_bitwise_xor_of_all_pairings.rb)                                                   | [Link](./test/medium/test_2425_bitwise_xor_of_all_pairings.rb)                                                   |
 | 2429. Minimize XOR                                                                  | [Link](https://leetcode.com/problems/minimize-xor/)                                                                  | [Link](./lib/medium/2429_minimize_xor.rb)                                                                  | [Link](./test/medium/test_2429_minimize_xor.rb)                                                                  |
 | 2657. Find the Prefix Common Array of Two Arrays                                    | [Link](https://leetcode.com/problems/find-the-prefix-common-array-of-two-arrays/)                                    | [Link](./lib/medium/2657_find_the_prefix_common_array_of_two_arrays.rb)                                    | [Link](./test/medium/test_2657_find_the_prefix_common_array_of_two_arrays.rb)                                    |
diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec
index e38bc7fe..42ae4fac 100644
--- a/leetcode-ruby.gemspec
+++ b/leetcode-ruby.gemspec
@@ -5,7 +5,7 @@ require 'English'
 ::Gem::Specification.new do |s|
   s.required_ruby_version = '>= 3.0'
   s.name = 'leetcode-ruby'
-  s.version = '9.0.4'
+  s.version = '9.0.5'
   s.license = 'MIT'
   s.files = ::Dir['lib/**/*.rb'] + %w[README.md]
   s.executable = 'leetcode-ruby'
diff --git a/lib/medium/2149_rearrange_array_elements_by_sign.rb b/lib/medium/2149_rearrange_array_elements_by_sign.rb
new file mode 100644
index 00000000..2fb41c66
--- /dev/null
+++ b/lib/medium/2149_rearrange_array_elements_by_sign.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+# https://leetcode.com/problems/rearrange-array-elements-by-sign/
+# @param {Integer[]} nums
+# @return {Integer[]}
+def rearrange_array(nums)
+  positives = nums.select(&:positive?)
+  negatives = nums.select(&:negative?)
+  result = []
+
+  positives.each_with_index do |p, i|
+    result << p
+    result << negatives[i]
+  end
+
+  result
+end
diff --git a/test/medium/test_2149_rearrange_array_elements_by_sign.rb b/test/medium/test_2149_rearrange_array_elements_by_sign.rb
new file mode 100644
index 00000000..18f15872
--- /dev/null
+++ b/test/medium/test_2149_rearrange_array_elements_by_sign.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+require_relative '../test_helper'
+require_relative '../../lib/medium/2149_rearrange_array_elements_by_sign'
+require 'minitest/autorun'
+
+class RearrangeArrayElementsBySignTest < ::Minitest::Test
+  def test_default_one
+    assert_equal(
+      [3, -2, 1, -5, 2, -4],
+      rearrange_array(
+        [3, 1, -2, -5, 2, -4]
+      )
+    )
+  end
+
+  def test_default_two
+    assert_equal(
+      [1, -1],
+      rearrange_array(
+        [-1, 1]
+      )
+    )
+  end
+end