의 벡터를 반환하는 기능, 그것은Clojure에 - 당신이 전달하는 경우 벡터
- 즉, 벡터의 반복을 돌려 [1]
- [1 2]를 전달하면 [[1 2] [2 1]]가 반환됩니다.
- [1 2 3]을 전달하면 [[1 2 3] ] [2 3 1] [3 1 2]] 등
어떤 도움을 많이 주시면 감사하겠습니다.
의 벡터를 반환하는 기능, 그것은Clojure에 - 당신이 전달하는 경우 벡터
어떤 도움을 많이 주시면 감사하겠습니다.
는 그 같은 것을 볼 수 있었다 :
user> (defn its [items]
(let [c (count items)]
(if (<= c 1)
items
(->> items
cycle
(partition c 1)
(take c)
(mapv vec)))))
#'user/its
user> (its [])
;;=> []
user> (its [1 2])
;;=> [[1 2] [2 1]]
user> (its [1 2 3])
;;=> [[1 2 3] [2 3 1] [3 1 2]]
기본 아이디어는 두 조각으로 입력을 잘라내어 두 조각을 역순으로 결합하는 것입니다 (두 번째 조각 이후 첫 번째 조각).
그래서 당신은 벡터의 회전을 계산하는 기능이 필요합니다
(defn rotations [v]
당신은 (빠른 랜덤 액세스 용) 벡터 작업 할 당신은 또한 벡터의 크기를해야합니다.
(for [i (range n)]
그 다음 i
번째 위치에있는 벡터를 절단하여 역순으로 병합 :
(let [v (vec v)
n (count v)]
하면 절삭 이루어져야 입력의 모든 사항을 반복해야
(into (subvec v i n) (subvec v 0 i))
아, 괄호를 닫는 것을 잊지 마세요.
)))
https://github.com/clojure/math.combinatorics/에서 permutations
이 Readme.md에서 해당
예에 사용할 수있는 기능 : 무슨
(ns example.core
(:require [clojure.math.combinatorics :as combo]))
; PERMUTATIONS
; all the unique arrangements of items
=> (combo/permutations [1 2 3])
([1 2 3] [1 3 2] [2 1 3] [2 3 1] [3 1 2] [3 2 1])
; Note that permutations intelligently handles duplicate items
=> (combo/permutations [1 1 2])
([1 1 2] [1 2 1] [2 1 1])
내가 이해하는 한, op는 순열을 필요로하지 않고 순환 값을 필요로합니다. 즉 [1 3 2], [2 1 3], [2 3 1] 및 [3 2 1]은 거짓 결과입니다. – leetwinski
을 너 지금까지 해봤 니? – leetwinski