diff options
| author | mo khan <mo@mokhan.ca> | 2022-08-29 14:39:01 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2022-08-29 14:39:01 -0600 |
| commit | c74a40b8f98e7c38d0caa5744b02dc17a8ad3618 (patch) | |
| tree | 85ed0ceccba5ae2510f9e6292babab67aa39fb1b | |
| parent | 44e8488d7b22262e94cfcd739a459ade1ffc064f (diff) | |
use xor to find unique #
| -rw-r--r-- | misc/find-non-duplicate-number/main.rb | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/misc/find-non-duplicate-number/main.rb b/misc/find-non-duplicate-number/main.rb new file mode 100644 index 0000000..0627b14 --- /dev/null +++ b/misc/find-non-duplicate-number/main.rb @@ -0,0 +1,28 @@ +#/usr/bin/env ruby + +def assert_equal(x, y) + raise [x, y].inspect unless x == y +end + +def find_non_duplicate(items) + counts = Hash.new(0) + + items.each do |item| + counts[item] += 1 + if counts[item].even? + counts.delete(item) + end + end + + counts.keys[0] +end + +def find_non_duplicate(items) + result = 0 + items.each do |item| + result = result ^ item + end + result +end + +assert_equal(1, find_non_duplicate([4, 3, 2, 4, 1, 3, 2])) |
