(fn[n](nth(filter #(clojure.string/includes?(str(* % %))(str %))(range))n))
Çevrimiçi deneyin! (Ne yazık ki, TIO Clojure'un standart dize kütüphanesini desteklemiyor gibi görünüyor)
Clojure daha az içe aktarım sözdizimine sahipse veya includes?çekirdek kütüphanede bir yöntem içeriyorsa, bu aslında biraz rekabetçi olabilir. clojure.string/includes?Yalnız burada bazı cevaplardan daha uzun: /
(defn nth-sq-subs [n]
(-> ; Filter from an infinite range of numbers the ones where the square of
; the number contains the number itself
(filter #(clojure.string/includes? (str (* % %)) (str %))
(range))
; Then grab the "nth" result. Inc(rementing) n so 0 is skipped, since apparently
; that isn't in the sequence
(nth (inc n))))
TIO bağlantısı koptuğundan, işte bir test çalıştırması. Soldaki sayı index ( n) ve sonuç ( N) sağda:
(mapv #(vector % (nth-sq-subs %)) (range 100))
=>
[[0 1]
[1 5]
[2 6]
[3 10]
[4 25]
[5 50]
[6 60]
[7 76]
[8 100]
[9 250]
[10 376]
[11 500]
[12 600]
[13 625]
[14 760]
[15 1000]
[16 2500]
[17 3760]
[18 3792]
[19 5000]
[20 6000]
[21 6250]
[22 7600]
[23 9376]
[24 10000]
[25 14651]
[26 25000]
[27 37600]
[28 50000]
[29 60000]
[30 62500]
[31 76000]
[32 90625]
[33 93760]
[34 100000]
[35 109376]
[36 250000]
[37 376000]
[38 495475]
[39 500000]
[40 505025]
[41 600000]
[42 625000]
[43 760000]
[44 890625]
[45 906250]
[46 937600]
[47 971582]
[48 1000000]
[49 1093760]
[50 1713526]
[51 2500000]
[52 2890625]
[53 3760000]
[54 4115964]
[55 5000000]
[56 5050250]
[57 5133355]
[58 6000000]
[59 6250000]
[60 6933808]
[61 7109376]
[62 7600000]
[63 8906250]
[64 9062500]
[65 9376000]
[66 10000000]
[67 10050125]
[68 10937600]
[69 12890625]
[70 25000000]
[71 28906250]
[72 37600000]
[73 48588526]
[74 50000000]
[75 50050025]
[76 60000000]
[77 62500000]
[78 66952741]
[79 71093760]
[80 76000000]
[81 87109376]
[82 88027284]
[83 88819024]
[84 89062500]
[85 90625000]
[86 93760000]
[87 100000000]
[88 105124922]
[89 109376000]
[90 128906250]
[91 146509717]
[92 177656344]
[93 200500625]
[94 212890625]
[95 250000000]
[96 250050005]
[97 289062500]
[98 370156212]
[99 376000000]]
Bu, aşağıdakilerin herhangi bir değerini destekleyebilmelidir n; bitirmesini beklemek istiyorsanız (dizideki 50. ila 100. tam sayıları bulmak 15 dakika sürdü). Clojure keyfi olarak büyük tamsayı aritmetiğini destekler, bu nedenle sayılar çok büyük olmaya başladığında, BigInts'yi kullanmaya başlar .