summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2022-08-29 14:39:01 -0600
committermo khan <mo@mokhan.ca>2022-08-29 14:39:01 -0600
commitc74a40b8f98e7c38d0caa5744b02dc17a8ad3618 (patch)
tree85ed0ceccba5ae2510f9e6292babab67aa39fb1b
parent44e8488d7b22262e94cfcd739a459ade1ffc064f (diff)
use xor to find unique #
-rw-r--r--misc/find-non-duplicate-number/main.rb28
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]))