배열에서 청크 생성


21

당신의 임무는 배열과 숫자가 주어진 프로그램을 작성하는 것입니다, 당신은 크기가 숫자 인 덩어리로 배열을 분할해야합니다.

규칙

프로그램은 A양의 정수뿐만 아니라 배열도받습니다 n. 배열이 길이의 청크로 나뉘어 야 n합니다. 문자열의 길이가 n끝에서 남은 부분으로 나눌 수없는 경우 자체 청크로 간주해야합니다.

  • 경우 n배열의 길이보다 큰 경우 A, 당신은 배열을 반환해야합니다 A예를 들어, : 경우 n = 4array A = [1,2,3], 당신은 반환해야[1,2,3]

  • 배열은 숫자가 아닌 모든 유형을 포함 할 수 있습니다.

  • 항목의 순서 (또는 방향)를 왼쪽에서 오른쪽으로 변경해서는 안됩니다. 예를 들어 if n = 2A= [1,2,3]. [[1,2],[3]]유효하지 않은 결과 입니다.

테스트 사례

n   A               Output

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

이것은 이므로 각 언어의 최단 바이트가 승자가됩니다.


4
경우 n의 길이보다 큰 A우리가 반환해야 A‽ 당신은 확실히 의미하지 않는다 있습니까 [A]?
Adám

9
@chaugiang 난 여전히 너무 큰 생각 n반환해야합니다 [A][[1,2,3]]. n길이가 정확히 무엇입니까 A?
Adám

4
@chaugiang Adam은 정확한 imo입니다. 반환 값은 일관성이 있어야합니다.
요나

1
@chaugiang n1이 될 수 있습니까 ?
DJMcMayhem

4
강력하게 입력 된 언어에서는가 A아닌 반환 이 불가능하므로 [A] 많은 언어가 제외됩니다.
dfeuer

답변:



9

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

로 입력을 (n)(array)받습니다.

n=>g=a=>a+a&&[a.splice(0,n),...g(a)]

온라인으로 사용해보십시오!

댓글

n =>                  // n = chunk size
  g = a =>            // g = recursive function taking the array a[]
    a + a             // if a[] is empty, stop recursion and return an empty string
    &&                // otherwise, return an array made of:
    [ a.splice(0, n), //   the next chunk
      ...g(a)         //   followed by the result of a recursive call
    ]                 //   (the last call leads to ...'', which adds nothing)

이제는 깔끔하고 깨끗한 솔루션이며 반복적 인 익명 함수에 대해서도 배웠습니다!
사람 조

9

APL (Dyalog Unicode) , 12 바이트 SBCS

⊢⊂⍨(⍴⊢)⍴1↑⍨⊣

기본적으로 기본적으로 모든 골프 (및 현재> _>에 대한 모든 APL 지식)를 수행 한 Adám 에게 큰 감사를드립니다 .

설명

 ⊂⍨           Partitioned enclose (commuted, i.e. left and right switched) - for each  in left,  in right, if  = 0, create a new sub-array, push  to latest sub-array
             Right argument of entire expression
             Reshape - Change size of right into dimensions specified by left
   (⍴ )       Shape of (here, there is only one dimension - length)
             Right argument of entire expression
         ↑⍨   Take (commuted) - takes  elements from left where  is right. Extra elements (zeroes here) are automatically added
        1     1
             Left argument of entire expression

실행

인수 2, 1 2 3 4 5 6 7. APL 배열은 a b c선택적인 주변 괄호와 함께 형식 입니다.

             2
        1     1
         ↑⍨   12 = 1 0
             1 2 3 4 5 6 7
   (⍴ )       1 2 3 4 5 6 7 = 7
             71 0 = 1 0 1 0 1 0 1
             1 2 3 4 5 6 7
 ⊂⍨           1 0 1 0 1 0 11 2 3 4 5 6 7 = (1 2)(3 4)(5 6)(7)

온라인으로 사용해보십시오!


7
첫 번째 APL 답변을 축하합니다. 그리고 잘 설명했다! 여기에 APL 파이가 있습니다 : 🥧
Adám


7

프롤로그 (SWI) , 90 84 61 바이트

암호:

[]*_*[].
L*N*[P|R]:-length(P,N),append(P,T,L),T*N*R;P=L,R=[].

입력 형식이 약간 이상 할 수 있지만 다음과 같습니다.

A * n * Result.

예를 들어, 입력의 경우 :

n = 2
 A = [1, 2, 3, 4, 5, 6]

을 사용해야 [1, 2, 3, 4, 5, 6] * 2 * Result.합니다.

온라인으로 사용해보십시오!


언 골프 버전 :

divide([], _, []).
divide(List, N, [Prefix | Result]) :-
    length(Prefix, N), append(Prefix, Remaining, List), divide(Remaining, N, Result) 
  ; Prefix = List, Result = [].

온라인으로 사용해보십시오! .


6

PHP, 15 바이트

$f=array_chunk;

PHP 7이 필요합니다.로 전화하십시오 $f(ARRAY, N).


6
나는 당신이 내장에 다른 이름을 부여 할 필요가 없다고 생각합니다.

@Neil 나는 금지 된 허점 이 될 것이라고 생각했다 . 그러나 당신이 옳을 수도 있습니다.
디도




5

Brainfuck, 71 바이트

,[>+>+<<-]>>>,[<[>.,<-]>>>++++[<++++++++>-]<.[-]<<<[<+>>+<-]<[->+<]>>>]

입력 횟수에 상관없이 입력 형식 :

<character whose ascii is n>AAAAAAAAAAAAA
For example, in the input:
 1234567890123492034
n is 32 since the ASCII value of space is 32

입력 할 때마다 n문자가 지나갈 때마다 공백을 넣습니다.

설명 (프로그램을 손상시킬 수 있으므로 쉼표 없음) :

, take n
[>+>+<<-] copy into next two cells (destroys original)
>>>, take first of A into next cell
[ while that input exists
<[>.,<-] if n is nonzero output take next of A subtract one from n
>>>++++[<++++++++>-]<.[-]< n is zero so put a space
<<[<+>>+<-] copy the old n into surrounding cells
<[->+<] move from first cell to second
>>>] take input, do again

2
71자를위한 공백을 제거하십시오
MilkyWay90

lol, 나는 그것들을 모두 제거했다고 생각했지만 그 사실을 알지 못했습니다. 감사합니다!
vityavv

더 많이 사용하는 셀이 더 접근 ,하기 쉽도록 셀을 재구성하십시오. 다른 세포에서) 또는 무차별 대입을 사용하십시오. 저는 BF ​​골프에 능숙하지 않으므로 이러한 제안이 도움이되지 않을 수 있습니다.
MilkyWay90

n n n A space당신이 더 나은 방법을 생각할 수 있다면 지금까지 내 세포 설정으로 가지고 있습니다 ...
vityavv

A space n n n ...작동 할 수 space A n n n...있습니까 (또는 )?
MilkyWay90





4

, 1 바이트

온라인으로 사용해보십시오! Charcoal의 기본 I / O를 사용하면 문자열 이외의 다른 것을 사용하여 시연하기가 어렵습니다. 숫자 목록을 사용하고 형식 목록을 출력하는 전체 프로그램을 원하면 다음과 같이 수행 할 수 있습니다.

E⪪AN⪫ι,

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

  A      Input array
 ⪪       Split into chunks of
   N     Input number
E       Map over chunks
     ι  Current chunk
    ⪫   Joined with
      , Literal `,`
        Implicitly print each chunk on its own line



4

J , 4 바이트

<\~-

온라인으로 사용해보십시오!

배열을 왼쪽 인수로, 청크 크기를 오른쪽 인수로 취합니다.

정의에 따라 원하는 것을 수행하는 음수 인수와 함께 이완 고리와 접사 부사를 사용합니다.

참고 : J는 크기가 같은 항목의 테이블 만 허용하므로 반환 유형 상자로 묶어야합니다.



3

PHP , 45 바이트

function f($a,$b){return array_chunk($a,$b);}

온라인으로 사용해보십시오!


3
그냥 array_chunk정답일까요?
Arnauld

@Arnauld 나는 모른다. 직장에서 사용하기 전에 PHP에서 결코 골프를 치지 마십시오.
Luis felipe De jesus Munoz

100 % 확실하지는 않지만 선언되지 않은 변수를 문자열로 암시 적으로 변환하는 것을 남용하고 그와 같은 일을 할 수 있습니다.
Arnauld

(정오표 : 정의되지 않은 상수를 의미 함 )
Arnauld

3

자바 10, 106 80 바이트

L->n->{for(int l=L.size(),i=0;i<l;)System.out.print(L.subList(i,(i+=n)<l?i:l));}

구분 기호없이 청크를 인쇄합니다.

온라인으로 사용해보십시오.

106 바이트 :

L->n->{var r=new java.util.Stack();for(int l=L.size(),i=0;i<l;)r.add(L.subList(i,(i+=n)<l?i:l));return r;}

실제로 목록 목록을 반환합니다.

온라인으로 사용해보십시오.

설명:

L->n->{                       // Method with List and integer parameters and List return-type
  var r=new java.util.Stack();//  Create an empty List
  for(int l=L.size(),         //  Determine the size of the input-List
      i=0;i<l;)               //  Loop `i` in the range [0, size):
    r.add(                    //   Add to the result-List:
      L.subList(i,            //    A sublist of the input-list in the range from `i`
        Math.min(i+=n,l)));   //    to the minimum of: `i` + input-integer or the size
                              //    (and increase `i` by the input-integer at the same)
  return r;}                  //  Return the List of Lists of integers as result





3

V , 6 바이트

òÀf,r

온라인으로 사용해보십시오!

16 진 덤프 :

00000000: f2c0 662c 720a                           ..f,r.

설명:

ò           " Until an error happens:
  f         "   (f)ind the...
 À          "     n'th...
   ,        "     ","
            "   (If there are less than n commas after the cursor, throw an error)
    r       "   Replace the char under the cursor with...
     <cr>   "     A newline

3

클로저, 14 바이트

#(partition %)

내 생각에 내장


안녕하세요 이 함수는 두 개의 인수, 즉 분할 될 배열과 청크 길이를 고려해야합니다. 또한 파티션을 사용할 때 마지막 청크가 "전체"가 아닌 경우 어떻게됩니까?
NikoNyrh

3

하스켈 , 26 바이트

import Data.Lists
chunksOf

몇 가지 더 많은 바이트가있는 더 흥미로운 버전이 있습니다 (각 솔루션에서 5 바이트마다 nimi 덕분에).

하스켈 , 31 바이트

n![]=[]
n!x=take n x:n!drop n x

온라인으로 사용해보십시오!


나는 당신이 할 수 있다고 생각합니다
aloisdg는

1
n!x=take n x:n!drop n x. Data.Lists또한 제공합니다 chunksOf.
nimi


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