Как найти нечетный элемент в данном списке чисел? (PS здесь нечетный означает разные) - PullRequest
0 голосов
/ 28 июня 2019

Мне нужно отобразить индекс нечетных элементов в заданном списке чисел.

Я попытался получить остаток, но мне нужно разделить данный список на [2 3 5 10], чтобы узнать, какой элемент нечетный.

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

(odd_one_out [2 8 9 200 56])

Я ожидаю выход 9 или индекс 9, поскольку это единственный элемент, который нельзя разделить на 2. Я получаю вывод 0 0 1 0 0

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Если я правильно понимаю, вы хотите найти число, которое однозначно неделимо для данных делителей.Вы можете использовать group-by, чтобы сгруппировать числа по их делимости, а затем найти те, которые неделимы ровно одним делителем.

(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
0 голосов
/ 28 июня 2019

Если вы просто хотите расширить текущую функцию, вы можете использовать map-indexed, что даст вам этот список ([0 0] [1 0] [2 1] [3 0] [4 0]), который вы можете затем отфильтровать, чтобы сохранить только векторы, которые имеют 1 во второй позиции. Это вернет индекс нечетного символа.

(defn odd-one-out [y]
  (->> y
       (map #(rem % 2))
       (map-indexed vector)
       (filter #(= 1 (second %)))
       (map first)))

(odd-one-out [2 8 9 200 56])
(2)

Еще лучше было бы использовать функцию odd? из стандартной библиотеки Clojure.

(->> [2 8 9 200 56]
     (map odd?)
     (map-indexed vector)
     (filter #(second %))
     (map first))

Другая версия, использующая keep.

(чтобы вернуть индекс)

(->> [2 8 9 200 56]
     (map-indexed vector)
     (keep #(when (odd? (second %))
              (first %))))
(2)

(чтобы вернуть значение)

(->> [2 8 9 200 56]
     (map-indexed vector)
     (keep #(when (odd? (second %))
              (second %))))
(9)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...