2017-05-03 1 views
0
당신이 인수로 벡터에서 통과 할 때 그 함수를 작성 할

의 벡터를 반환하는 기능, 그것은Clojure에 - 당신이 전달하는 경우 벡터

  • 즉, 벡터의 반복을 돌려 [1]
  • [1 2]를 전달하면 [[1 2] [2 1]]가 반환됩니다.
  • [1 2 3]을 전달하면 [[1 2 3] ] [2 3 1] [3 1 2]] 등

어떤 도움을 많이 주시면 감사하겠습니다.

+3

을 너 지금까지 해봤 니? – leetwinski

답변

2

는 그 같은 것을 볼 수 있었다 :

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]] 
0

기본 아이디어는 두 조각으로 입력을 잘라내어 두 조각을 역순으로 결합하는 것입니다 (두 번째 조각 이후 첫 번째 조각).

그래서 당신은 벡터의 회전을 계산하는 기능이 필요합니다

(defn rotations [v] 

당신은 (빠른 랜덤 액세스 용) 벡터 작업 할 당신은 또한 벡터의 크기를해야합니다.

(for [i (range n)] 

그 다음 i 번째 위치에있는 벡터를 절단하여 역순으로 병합 :

(let [v (vec v) 
     n (count v)] 

하면 절삭 이루어져야 입력의 모든 사항을 반복해야

(into (subvec v i n) (subvec v 0 i)) 

아, 괄호를 닫는 것을 잊지 마세요.

))) 
4

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]) 
+0

내가 이해하는 한, op는 순열을 필요로하지 않고 순환 값을 필요로합니다. 즉 [1 3 2], [2 1 3], [2 3 1] 및 [3 2 1]은 거짓 결과입니다. – leetwinski

관련 문제