1votos

AutoNumeros (selfNumbers) en Haskell en Clojure

por josejuan hace 3 años

Lento por usar sets.

Realizar el ejercicio acorde a los planteamientos dados en lenguaje de programación Haskell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(require '[clojure.set :refer [union difference]]) 
 
(defn digitToInt [c] (- (int c) 48)) 
 
(defn d [n] (+ n (reduce + (map digitToInt (str n))))) 
 
(defn noTo [i n] (if (< i n) (conj (noTo (d i) n) i) #{})) 
 
(defn noSelfs [n] (reduce union (map (fn [i] (noTo (d i) n)) (range 1 (+ 1 n))))) 
 
(defn selfs [n] (difference (into #{} (range 1 (+ 1 n))) (noSelfs n))) 
 
(defn upTo [n] (reverse (take 20 (reverse (sort (selfs n)))))) 
 
;; user=> (upTo 9999) 
;; (9813 9824 9826 9837 9848 9859 9870 9881 9892 9903 9914 9925 9927 9938 9949 9960 9971 9982 9993 9999) 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.