N- 선택 목록


12

정수의리스트로부터 L, 및 정수 N, 출력 L에서 스플릿 N동일한 거리에서는 쉴드의 하위 목록.

나눌 수없는 길이

경우 N의 길이를 분할하지 않습니다 L다음 모든 하위 목록이 동일한 길이를 가지고 수 없습니다.

어쨌든 출력의 마지막 하위 목록은 나머지 목록을 포함하도록 길이를 조정하는 하위 목록입니다.

모든 하위 목록 것이이 방법 L의 마지막을 제외한 길이로되어야한다 length(L) // N, 여기서 //바닥의 분할 (예이다 3//2 = 1).

일부 규칙

  • L 비어있을 수 있습니다.

  • N >= 1.

  • 원하는 모든 내장 기능을 사용할 수 있습니다.

  • 를 통해 입력을 STDIN함수 인수 또는 이와 유사한 것으로 사용할 수 있습니다.

  • 출력을로 인쇄 STDOUT하거나 함수 또는 이와 유사한 것에서 반환 할 수 있습니다 .

  • 언어와 목록이 가장 자연스럽게 표현되는 한 목록과 정수 형식을 선택할 수 있습니다.

테스트 사례

Input:  [1,2,3,4], 2
Output: [[1,2],[3,4]]

Input:  [-1,-2,3,4,-5], 2
Output: [[-1,-2],[3,4,-5]]

Input:  [1,2,3,4], 1
Output: [[1,2,3,4]]

Input:  [4,8,15,16,23,42], 5
Output: [[4],[8],[15],[16],[23,42]]

Input:  [4,8,15,16,23,42], 7
Output: [[],[],[],[],[],[],[4,8,15,16,23,42]]

Input:  [2,3,5,7,11,13,17,19,23], 3
Output: [[2,3,5],[7,11,13],[17,19,23]]

Input:  [], 3
Output: [[],[],[]]

Input:  [1,2,3,4,5,6,7,8], 3
Output: [[1,2],[3,4],[5,6,7,8]]

채점

이것은 이므로 바이트 단위의 최단 답변이 이깁니다.




양의 정수만? 또는 테스트 사례를 추가하십시오
Luis Mendo

@LuisMendo 아니요.이를 반영하기 위해 테스트 사례를 변경했습니다.
치명적인

길이 n = 3 (user2357112에서 제안)을 가진 길이 8의 목록은 좋은 테스트 사례가 될 것입니다. 내 방법을 위반했습니다.
xnor

답변:


2

Pyth, 11 10 바이트

@FryAmTheEggman 덕분에 1 바이트 .

cJEt*R/lJQ

테스트 스위트.

입력을 역순으로 취합니다.

샘플 입력 :

5
[1,2,3,4,5,6,7]

샘플 출력 :

[[1], [2], [3], [4], [5, 6, 7]]

설명

cJEt*R/lJQ     Main function, first input:Q, second input:E.
cJEt*R/lJQQ    Implicit arguments.

c              The function c is special.
               It can chop arrays.
               If the second argument is a list of integers,
               then it chops the first array at the indices
               specified by the second array.

 JE            The first argument is the second input, stored
               to the variable J.

   t*R/lJQQ    This is the second argument.
      /lJQ     Yield length of J, integer-divided by Q.
    *R    Q    Multiply it to the following respectively:
                   [0,1,2,3,...,Q-1]
   t           Then throw away the first element.
               For example, if Q=3 and E=[1,2,3,4,5,6,7,8],
               we would now have [3,6].

4

자바 스크립트 (ES6), 63 바이트

(a,n,l=a.length/n|0)=>[...Array(n)].map(_=>--n?a.splice(0,l):a)

2

파이썬, 76 73 바이트

lambda L,N:list(map(lambda x,r=len(L)//N:L[x*r:][:r+(x>N-2)*N],range(N)))

기본적으로 작업을 수행하는 명명되지 않은 함수입니다. 바이트를 절약 해 준 LeakyNun에게 감사드립니다!


1
또한 PPCG에 오신 것을 환영합니다!
Leaky Nun

@LeakyNun Nun 실제로 생각하는 73입니다. 또한 편집하는 동안 많은주의를 기울이지 않았기 때문에 대부분 내 잘못입니다. 직장에서의 코드 골프 위험 : P
Lause

@LeakyNun-첫 번째 포인트-작동하지 않습니다. 표현식은 기본적으로 일반 항목의 경우 [: r]이고 마지막 항목의 경우 [: r + N]이며 나머지 모든 요소를 ​​포착합니다. 두 번째 요점-시도했지만 내가 아는 모든 방법은 r을 내 코드보다 길게 만듭니다.
Lause

r * (x> N-2)의 경우 [:]가 아니라 [: 0]입니다.
Lause


2

공통 리스프, 114 바이트

(defun f(l n &optional(p(floor(length l)n))(i 1))(if(= i n)(list l)(cons(subseq l 0 p)(f(subseq l p)n p(+ i 1)))))

언 골프 드 :

(defun f (l n &optional (p (floor (length l) n)) (i 1))
  (if (= i n) (list l)
              (cons (subseq l 0 p)
                    (f (subseq l p) n p (+ i 1))))
  )

호출 예 :

(format t "~A~C~C" (f (read) (read)) #\return #\newline)

여기 사용해보십시오!

원래:

  • 마지막 그룹을 절단하는 경우 초기 목록의 왼쪽을 반환하십시오.
  • 그렇지 않으면 p = |L| / N목록에서 요소를 가져 와서 나머지에 대한 재귀 호출 결과에 참여시킵니다. i중지 조건에 사용되는 반복 카운터입니다.

나는 프로그램이 그룹이 N아닌 요소 그룹을 만들어야한다고 생각하면서 처음에는 도전을 오해했다 N. 어쨌든이 버전은 추가로 10 바이트를 처리합니다. LisP는 이번에는 이길 수 없지만 기회를 놓칠 수는 없습니다. ')


2

하스켈, 69 67 바이트

a%b=a#b where l#1=[l];l#n|(h,t)<-splitAt(div(length a)b)l=h:t#(n-1)

사용 예 : [1,2,3,4] % 3-> [[1],[2],[3,4]].

@ xnor 's answer 와 유사한 간단한 재귀 접근법 .

편집 : @ Will Ness는 2 바이트를 저장했습니다. 감사!


h:t#(n-1)작동합니다.
Will Ness 2016 년

1

PowerShell v2 +, 125 바이트

param($l,$n)if($p=[math]::Floor(($c=$l.count)/$n)){1..$n|%{$l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]}}else{(,''*($n-1))+$l}

너무 오래 느껴지지만 출력에 빈 배열이 있으면 슬라이싱이 행복하게 작동하는 방법을 찾지 못하는 것이므로 이러한 경우를 처리하기 위해 캡슐화 if/ else가 필요합니다 . 또한 .ToString()콘솔 출력을 통한 배열 의 PowerShell 기본값 은 약간 이상하게 보일 수 -join','있으므로 콘솔에서 줄 바꿈이 아닌 쉼표로 구분하여 배열을 표시하려면 a 를 선택하십시오. 아래 예제에서 출력을보다 명확하게하기 위해이 작업을 수행했지만 다른 명령을 선택하기 위해 파이프 라인에 출력을 남겨 두는 경우에는 원하지 않습니다.

설명

입력을 받고, param($l,$n)각각의 파티션의 목록 번호. 그런 다음 if/ else문 을 입력하십시오 . 각 파티션의 크기가되면 $p제로가 아닌 (도우미 설정 $c.count길을 따라)을, 우리는에있어 if.

내부 if에서, 우리는 루프 1$n|%{...}, 각 반복 우리는 꽤 복잡한 보이는 배열 슬라이스를하고 있어요 $l[(($_-1)*$p)..((($_*$p-1),$c)[!($_-$n)])]. 첫 번째 parens는 현재 어떤 파티션에 있고 파티션 크기가 얼마나 큰지에 따라 시작 인덱스입니다. 우리 ..pseudo-ternary로 구성된 end index로 범위를 정합니다 . 여기서는 $c마지막 청크에 있는지 여부에 따라 (배열의 리터럴 끝) 또는 파티션 길이 중 하나를 선택 합니다 $_-$n.

그렇지 않으면에 있습니다 else. ,''*요청한 것보다 적은 수의 파티션과 동일한 쉼표 연산자로 빈 배열을 구성한 다음 입력 배열을 최종 요소로 고정합니다.

여기에 ,위에서 설명한 것처럼 줄 바꿈으로 구분 된 파티션과로 구분 된 각 개별 요소를 보여줍니다 .

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (1,2,3,4) 2
1,2
3,4

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (-1,-2,3,4,-5) 2
-1,-2
3,4,-5

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (1,2,3,4) 1
1,2,3,4

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (4,8,15,16,23,42) 5
4
8
15
16
23,42

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (4,8,15,16,23,42) 7






4,8,15,16,23,42

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 (2,3,5,7,11,13,17,19,23) 3
2,3,5
7,11,13
17,19,23

PS C:\Tools\Scripts\golfing> .\n-chotomize-a-list.ps1 $null 3



PS C:\Tools\Scripts\golfing> 

1

F #, 100 98 바이트

fun n l->
let a=List.length l/n
List.init n (fun i->if i<n-1 then l.[a*i..a*i+a-1] else l.[a*i..])

선택 여부를 결정할는 IF 절, F # 목록 슬라이싱을 사용 요소 나 남아있는 모든 요소를.


1

프롤로그, 100 99 바이트

n(A,B):-length(B,A).
p(L,K,G):-n(K,G),append(A,[_],G),n(N,L),M is N//K,maplist(n(M),A),append(G,L).

예를 들어 전화

β-p ([1,2,3,4,5,6,7], 3, X).
X = [[1, 2], [3, 4], [5, 6, 7]] 입니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.