配列からチャンクを作成する


21

あなたの仕事は、配列と番号を指定したプログラムを書くことです。配列をサイズがnumberのチャンクに分割する必要があります。

ルール

プログラムはA、正の整数だけでなく配列も受け取りnます。n文字列の長さがn残りの部分で割り切れない場合、配列をlengthのチャンクに分割する必要があります。

  • nがarrayの長さよりも大きい場合は、array Aを返す必要があります。A例:if n = 4およびarray 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がある長さよりも大きい場合‽意味がありませんか?AA[A]
アダム

9
@chaugiangまだ大きすぎるn値を返すべきだと思う[A]、例えば[[1,2,3]]。どのような場合nの長さが正確ですかA
アダム

4
@chaugiang Adamは正しいです。戻り値は一貫している必要があります。
ヨナ

1
@chaugiangができますnは今までに等しい1を
DJMcMayhem

4
強く型付けされた言語Aでは[A] 、返されるのは単に不可能であり、ひどい多くの言語を除外します。
dfeuer

回答:



9

JavaScript(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の知識> _>)。

説明

 ⊂⍨           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

実行

引数21 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ámMar


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
ビルトインに別の名前を付ける必要はないと思うので、スコアは11だけですよね。
ニール

@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

笑、私はそれらをすべて削除したと思ったが、それらに気付かなかった、ありがとう!
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私は知らない。私は職場で使用していますが、PHPでゴルフしたことはありません。
ルイス・フェリペ・デ・イエス・ムニョス

私も100%確信はありませんが、宣言されていない変数の文字列への暗黙的な変換を悪用して、そのようなことをすることができます。
アーナウド

(正誤表:未定義の定数を意味していました)
Arnauld

3

Java 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

オンラインでお試しください!

Hexdump:

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

Clojure、14バイト

#(partition %)

私が推測する組み込み


こんにちは、ようこそ。この関数は2つの引数を取る必要があります。パーティション化される配列とチャンクの長さです。また、パーティションを使用しているときに最後のチャンクが「フル」でない場合はどうなりますか?
ニコニル



3

ゼリー、1バイト

s

オンラインでお試しください!

プリンターは、単一要素の分割がリストにラップされていないように見えますが、実際にはそうです。


1
この夜は、単一素子アレイは、実際にはまだ配列であることを示すにようより良い出力を与えます。
ニックケネディ

ええと、@ Nick Kennedyのリンクを追加しなかったからです。
ベン

確かに私からではない
ニックケネディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.