Search code examples
clojure

How to find odd item in given list of numbers?(PS here odd means different)


I have to display the index of the odd items in a given list of numbers.

I tried getting the remainder but I have to divide the given list by [2 3 5 10] in order to know which element is odd.

(defn odd_one_out [y]
  (println (map #(rem % 2) y)))

(odd_one_out [2 8 9 200 56])

I expect the output 9 or index of 9 since it is the only element which cannot be divided by 2. The output i am getting is 0 0 1 0 0


Solution

  • If I understand correctly, you want to find the number which is uniquely indivisible for given divisors. You could use group-by to group the numbers by their divisibility, then find the one(s) that are indivisible by exactly one divisor.

    (defn odd-one-out [nums divs]
      (->> nums
           (group-by #(map (fn [d] (zero? (mod % d))) divs))
           (some (fn [[div-flags nums']]
                   (and (= 1 (count nums'))
                        (= 1 (count (filter true? div-flags)))
                        (first nums'))))))
    
    (odd-one-out [2 8 9 200 56] [2 3 5 10]) ;; => 9
    
    (odd-one-out [2 10 20 60 90] [2 3 5 10]) ;; => 2