Skip to content

Instantly share code, notes, and snippets.

@ericnormand
Created November 29, 2021 14:53
Show Gist options
  • Save ericnormand/6cc9a64238b4929510bb3d3025d60151 to your computer and use it in GitHub Desktop.
Save ericnormand/6cc9a64238b4929510bb3d3025d60151 to your computer and use it in GitHub Desktop.
452 PurelyFunctional.tv Newsletter

Consecutive numbers

Write a function that determines whether a sequence of integers can be rearranged into a sequence of consecutive numbers without duplicates. The function should return the sequence of consecutive numbers or nil if it is not possible.

Examples

(consec []) ;=> () ;; trivially true
(consec [1]) ;=> (1) ;; ditto
(consec [3 1 2]) ;=> (1 2 3)
(consec [5 3 2 1]) ;=> nil ;; non-consecutive (4 is missing)
(consec [7 8 9 7]) ;=> nil ;; 7 repeats

Thanks to this site for the problem idea, where it is rated Hard in Java. The problem has been modified.

Please submit your solutions as comments on this gist.

To subscribe: https://purelyfunctional.tv/newsletter/

@KingCode
Copy link

KingCode commented Dec 4, 2021

(defn consec [xs]
  (let [sxs (sort xs)]
    (when-not 
        (->> sxs (partition 2 1)
             (reduce (fn [misfit? [x y]]
                       (if misfit? 
                         (reduced true)
                         (not= 1 (- y x))))
                     false))
      sxs)))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment