मैं सेट जो एक ही हर बार मेरा कार्यक्रम चलाया जाता है हो जाएगा के कुछ शफ़ल करना चाहते हैं:क्या मैं क्लोजर में एक निर्धारित शफल कर सकता हूं?
यह एक तरीका है यह करने के लिए है:
(def colours ["red" "blue" "green" "yellow" "cyan" "magenta" "black" "white"])
(defn colour-shuffle [n]
(let [cs (nth (clojure.math.combinatorics/permutations colours) n)]
[(first cs) (drop 1 cs)]))
; use (rand-int 40320) to make up numbers, then hard code:
(def colour-shuffle-39038 (colour-shuffle 39038))
(def colour-shuffle-28193 (colour-shuffle 28193))
(def colour-shuffle-5667 (colour-shuffle 5667))
(def colour-shuffle-8194 (colour-shuffle 8194))
(def colour-shuffle-13895 (colour-shuffle 13895))
(def colour-shuffle-2345 (colour-shuffle 2345))
colour-shuffle-39038 ; ["white" ("magenta" "blue" "green" "cyan" "yellow" "red" "black")]
लेकिन यह मूल्यांकन करने के लिए कुछ समय लगता है , और अपर्याप्त और बल्कि सुरुचिपूर्ण लगता है।
क्या सभी अनुक्रमों को उत्पन्न और उपभोग किए बिना सीधे शफल 3 9 038 उत्पन्न करने का कोई तरीका है?
(मैं पहले से ही पता है कि मैं कड़ी मेहनत उन्हें कोड कर सकते हैं, या प्रयास को वापस लाने के लिए मैक्रो के साथ समय संकलित करने के लिए भी एक सा बकवास लगता है यही कारण है कि।।)
:
clojure.core/shuffle
इस तर्क का उपयोग नहीं है, लेकिन आप इसका इस्तेमाल फेरबदल का एक परिवर्तन है कि एक अतिरिक्त बीज मूल्य तर्क लेता बनाने के लिए कर सकता है, और एक यादृच्छिक संख्या जनरेटर बनाने के लिए है कि बीज मान का उपयोगjava.util.Collection/shuffle
को पारित करने के लिए फिशर-येट्स जैसे मानक शफल एल्गोरिदम का उपयोग कर सकते हैं लेकिन आरएनजी –माइक के लिए बीज तर्क जोड़ सकते हैं, हां, यही वह है जो मैं सोच रहा था। क्या क्लोजर में से कोई एक या उसके libs में से एक है या क्या मुझे एक कोड कोड करना है? –
लगता है जैसे आप पूछ रहे हैं कि क्या आप संख्या क्रमपरिवर्तन कर सकते हैं और इससे पहले 'n-1' उत्पन्न किए बिना 'nth' चुनें।हां, आप इसे [लेमर कोड का डीकोडिंग] लागू करके करते हैं (http://en.wikipedia.org/wiki/Permutation#Numbering_permutations)। मैंने अपने जवाब में इस पर एक झटका लगाया है। –