拡大する配列


21

2つの正の整数pおよびqが与えられた場合、次のアルゴリズムを適用して作成された配列Aを返すことがタスクです。

  1. スタートA = [P、Q]D = 2
  2. 合計がdで割り切れるAの連続する数値の各ペア(x、y)に対して、xyの間に(x + y)/ dを挿入します。
  3. 一致するペアが少なくとも1つ見つかった場合は、dをインクリメントして、手順2に進みます。それ以外の場合は、停止してAを返します。

以下は、p = 1およびq = 21のプロセスの詳細です。

  1  21             | Iteration #1: we start with d = 2 and A = [1, 21]
   \/               |               1 + 21  is divisible by 2 -> we insert 11
 22/2=11            |
                    |
  1  11 21          | Iteration #2: d = 3, A = [1, 11, 21]
   \/               |               1 + 11  is divisible by 3 -> we insert 4
 12/3=4             |
                    |
  1 4 11  21        | Iteration #3: d = 4, A = [1, 4, 11, 21]
        \/          |               11 + 21 is divisible by 4 -> we insert 8
      32/4=8        |
                    |
  1    4    11 8 21 | Iteration #4: d = 5, A = [1, 4, 11, 8, 21]
    \/   \/         |               1 + 4   is divisible by 5 -> we insert 1
  5/5=1 15/5=3      |               4 + 11  is divisible by 5 -> we insert 3
                    |
  1 1 4 3 11 8 21   | Iteration #5: d = 6, A = [1, 1, 4, 3, 11, 8, 21]
                    |               no sum of two contiguous numbers is divisible by 6
                    |               -> we stop here

したがって、期待される出力:[ 1、1、4、3、11、8、21 ]

明確化と規則

  • 入力および出力は、適切な形式で処理できます。整数pおよびqは、0より大きいことが保証されています。それが役立つ場合は、q≥pと仮定できます。
  • アルゴリズムの2番目のステップは、同じ繰り返しで挿入されたばかりの要素に再帰的に適用されるべきでありませ。たとえば、A = [1、1]およびd = 2は、[ 1、1、1 ](1の無限リストではない)につながるはずです。
  • これはなので、バイト単位の最短回答が勝ちです!

テストケース

  p |   q | Output
----+-----+-------------------------------------------------------------------------------
  1 |   1 | [1,1,1]
  1 |   2 | [1,2]
  1 |   3 | [1,1,2,3]
  2 |   6 | [2,1,2,1,4,1,2,6]
  3 |  13 | [3,1,8,1,3,1,7,1,2,1,5,1,3,2,13]
  9 |   9 | [9,6,9,6,9]
 60 |  68 | [60,13,1,4,31,2,3,5,2,19,64,7,13,1,2,5,2,27,44,3,4,8,2,1,12,1,5,3,28,2,4,16,1,
    |     |  2,12,1,2,1,10,1,6,68]
144 | 336 | [144,68,3,4,8,1,12,1,4,2,28,13,128,44,17,92,240,58,108,5,17,1,2,5,3,28,3,1,11,
    |     |  60,3,6,2,42,2,4,26,192,54,132,7,1,15,1,3,1,18,1,4,2,30,3,1,12,1,9,78,46,336]

あなたは大きめのテストケースであなたのコードをテストしたい場合は、ここでの予想出力は、次のとおりです。

  • p = 12096(2 6 * 3 3 * 7)
  • q = 24192(2 7 * 3 3 * 7)

回答:


6

05AB1E28 19 18バイト

[Ðü+NÌ/‚ζ˜ʒ.ï}DŠQ#

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


ええ、間違いなくハードコアを改善できます。リファクタリングに取り組んでいます。

おそらく私が得ているのと同じくらい良い。

-1ありがとう、エミグナ!スワップを指摘するために、レジスタよりもうまく機能しました。


[                   // Infinite loop.
 Ð                  // Triplicate [p, ..., q]
  U                 // Pop 1 of 3 copies into register X.
   ü+               // Pairwise addition.
     NÌ/            // Divide by current iteration + 2 (which is d).
        ‚           // Group original [p, ..., q] with pairwise additives.
         ζ˜         // Transpose together and flatten.
           ʒ.ï}     // Filter out non-integer entities (includes the space added by zip).
               DXQ  // Dupe result, see if equal to original.
                  # // If new array is original array, nothing happened, quit & return.

デバッグダンプ[p,q] = [1,3]

Full program: [ÐUü+NÌ/‚ζ˜ʒ.ï}DXQ#
current >> [  ||  stack: []
ÐUü+NÌ/‚ζ˜ʒ.ï}DXQ#
Full program: ÐUü+NÌ/‚ζ˜ʒ.ï}DXQ#
current >> Ð  ||  stack: []
current >> U  ||  stack: [[1, 3], [1, 3], [1, 3]]
current >> ü  ||  stack: [[1, 3], [1, 3]]
Full program: +
current >> +  ||  stack: [1, 3]
stack > [4]
current >> N  ||  stack: [[1, 3], [4]]
current >> Ì  ||  stack: [[1, 3], [4], 0]
current >> /  ||  stack: [[1, 3], [4], 2]
current >> ‚  ||  stack: [[1, 3], [2.0]]
current >> ζ  ||  stack: [[[1, 3], [2.0]]]
current >> ˜  ||  stack: [[[1, 2.0], [3, ' ']]]
current >> ʒ  ||  stack: [[1, 2.0, 3, ' ']]
Filter: .ï
Full program: .ï
current >> .  ||  stack: [1]
stack > [1]
Full program: .ï
current >> .  ||  stack: [2.0]
stack > [1]
Full program: .ï
current >> .  ||  stack: [3]
stack > [1]
Full program: .ï
current >> .  ||  stack: [' ']
invalid literal for int() with base 10: ' '
stack > []
current >> D  ||  stack: [[1, 2.0, 3]]
current >> X  ||  stack: [[1, 2.0, 3], [1, 2.0, 3]]
current >> Q  ||  stack: [[1, 2.0, 3], [1, 2.0, 3], [1, 3]]
current >> #  ||  stack: [[1, 2.0, 3], 0]
stack > [[1, 2.0, 3]]
Full program: ÐUü+NÌ/‚ζ˜ʒ.ï}DXQ#
current >> Ð  ||  stack: [[1, 2.0, 3]]
current >> U  ||  stack: [[1, 2.0, 3], [1, 2.0, 3], [1, 2.0, 3]]
current >> ü  ||  stack: [[1, 2.0, 3], [1, 2.0, 3]]
Full program: +
current >> +  ||  stack: [1, 2.0]
stack > [3.0]
Full program: +
current >> +  ||  stack: [3.0, 2.0, 3]
stack > [3.0, 5.0]
current >> N  ||  stack: [[1, 2.0, 3], [3.0, 5.0]]
current >> Ì  ||  stack: [[1, 2.0, 3], [3.0, 5.0], 1]
current >> /  ||  stack: [[1, 2.0, 3], [3.0, 5.0], 3]
current >> ‚  ||  stack: [[1, 2.0, 3], [1.0, 1.6666666666666667]]
current >> ζ  ||  stack: [[[1, 2.0, 3], [1.0, 1.6666666666666667]]]
current >> ˜  ||  stack: [[[1, 1.0], [2.0, 1.6666666666666667], [3, ' ']]]
current >> ʒ  ||  stack: [[1, 1.0, 2.0, 1.6666666666666667, 3, ' ']]
Filter: .ï
Full program: .ï
current >> .  ||  stack: [1]
stack > [1]
Full program: .ï
current >> .  ||  stack: [1.0]
stack > [1]
Full program: .ï
current >> .  ||  stack: [2.0]
stack > [1]
Full program: .ï
current >> .  ||  stack: [1.6666666666666667]
stack > [0]
Full program: .ï
current >> .  ||  stack: [3]
stack > [1]
Full program: .ï
current >> .  ||  stack: [' ']
invalid literal for int() with base 10: ' '
stack > []
current >> D  ||  stack: [[1, 1.0, 2.0, 3]]
current >> X  ||  stack: [[1, 1.0, 2.0, 3], [1, 1.0, 2.0, 3]]
current >> Q  ||  stack: [[1, 1.0, 2.0, 3], [1, 1.0, 2.0, 3], [1, 2.0, 3]]
current >> #  ||  stack: [[1, 1.0, 2.0, 3], 0]
stack > [[1, 1.0, 2.0, 3]]
Full program: ÐUü+NÌ/‚ζ˜ʒ.ï}DXQ#
current >> Ð  ||  stack: [[1, 1.0, 2.0, 3]]
current >> U  ||  stack: [[1, 1.0, 2.0, 3], [1, 1.0, 2.0, 3], [1, 1.0, 2.0, 3]]
current >> ü  ||  stack: [[1, 1.0, 2.0, 3], [1, 1.0, 2.0, 3]]
Full program: +
current >> +  ||  stack: [1, 1.0]
stack > [2.0]
Full program: +
current >> +  ||  stack: [2.0, 1.0, 2.0]
stack > [2.0, 3.0]
Full program: +
current >> +  ||  stack: [2.0, 3.0, 2.0, 3]
stack > [2.0, 3.0, 5.0]
current >> N  ||  stack: [[1, 1.0, 2.0, 3], [2.0, 3.0, 5.0]]
current >> Ì  ||  stack: [[1, 1.0, 2.0, 3], [2.0, 3.0, 5.0], 2]
current >> /  ||  stack: [[1, 1.0, 2.0, 3], [2.0, 3.0, 5.0], 4]
current >> ‚  ||  stack: [[1, 1.0, 2.0, 3], [0.5, 0.75, 1.25]]
current >> ζ  ||  stack: [[[1, 1.0, 2.0, 3], [0.5, 0.75, 1.25]]]
current >> ˜  ||  stack: [[[1, 0.5], [1.0, 0.75], [2.0, 1.25], [3, ' ']]]
current >> ʒ  ||  stack: [[1, 0.5, 1.0, 0.75, 2.0, 1.25, 3, ' ']]
Filter: .ï
Full program: .ï
current >> .  ||  stack: [1]
stack > [1]
Full program: .ï
current >> .  ||  stack: [0.5]
stack > [0]
Full program: .ï
current >> .  ||  stack: [1.0]
stack > [1]
Full program: .ï
current >> .  ||  stack: [0.75]
stack > [0]
Full program: .ï
current >> .  ||  stack: [2.0]
stack > [1]
Full program: .ï
current >> .  ||  stack: [1.25]
stack > [0]
Full program: .ï
current >> .  ||  stack: [3]
stack > [1]
Full program: .ï
current >> .  ||  stack: [' ']
invalid literal for int() with base 10: ' '
stack > []
current >> D  ||  stack: [[1, 1.0, 2.0, 3]]
current >> X  ||  stack: [[1, 1.0, 2.0, 3], [1, 1.0, 2.0, 3]]
current >> Q  ||  stack: [[1, 1.0, 2.0, 3], [1, 1.0, 2.0, 3], [1, 1.0, 2.0, 3]]
current >> #  ||  stack: [[1, 1.0, 2.0, 3], 1]
[1, 1.0, 2.0, 3]
stack > [[1, 1.0, 2.0, 3]]

デバッグしてオンラインで試してください!


のは、どのようにすることをおおü...これは私が私の前の回答:-)の一つ改善するために作品を許可
scottinet

@scottinet [1,2,3,4] ü = [[1,2],[2,3],[3,4]]、05AB1Eの実行時に引数に「-d」を追加すると、上記で添付した「デバッグ」出力が生成されます。(上記のデバッグリンクも追加)。ペアワイズが適切な理由は、自動的にベクトル化するコマンドに対して、コマンドをペアワイズで適用するだけだからです(ü)リスト上で実行するとこれがよくわかります)。
魔法のタコUr

私はそれを考え出した、それは私がその答えに 1バイトを保存することができました。-d...私は、「デバッグ」の後、waaay遅すぎるそれについて見つけ,q、「プリントと停止」へ。痛かった。
スコチネット

。@scottinet私が使用:(それについて学ぶ前に、通年で05AB1Eを使用してのだ=それがポップしないので、ちょうどスタックにプッシュ最後の項目を表示します。
マジックタコ壺

削除した場合U、あなたは置き換えることができXŠ
エミグナ

8

Mathematica、72 64 59 58バイト

(d=2;#//.x_:>Riffle[x,(x+{##2,}&@@x)/d++]~Cases~_Integer)&

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

使い方

入力をリストとして取得します{p,q}。反復ステップは次のように再定式化されます。

  1. 挿入(a+b)/dの間、すべての二つの要素ab(x+{##2,}&@@x)のシーケンスを計算a+bして、のをa+Null最後に。で除算しd、との間にRiffleそれぞれを挿入します。インクリメント。(a+b)/dabd
  2. Integer結果のリストの要素を選択します。(これもNullによって導入されたものを取り除き{##2,}ます。)

これは、結果が変わらなくなるまで繰り返されます(これは、すべての要素が整数ではなかったため、すべての新しい要素を削除したために発生します)。

@MartinEnderの//.代わりに使用するFixedPoint(および入力をリストとして取得する)ための-8バイト。

ListConvolve実際にはそれほど大きくないため、-6


1
//.切り札FixedPoint、と私はだけではなく、二つの別々の整数の整数のペアとして入力を取ると思います:(d=2;#//.x_:>x~Riffle~ListConvolve[{1,1}/d++,x]~Cases~_Integer)&
マーティン・エンダー

ありがとう!本当に好きなので、取り替えるの//.を忘れ続けています。FixedPointFixedPoint
ミシャラヴロフ

1
わずか64バイトです。内部に2つの印刷できないものを挿入したようですInteger
マーティンエンダー

再度、感謝します!変更後にコードが失敗し続けた理由がわからず、実際に違いが生じないことをしたときに作業に戻ります。
ミシャラヴロフ

1
特にコードスニペットに改行がある場合、コメント内のコードスニペットにこれらの印刷できない文字が含まれることがあります。SEがそれらを挿入する理由はわかりません。
マーティンエンダー


4

Haskell、85 81バイト

(a:b:c)#d=a:[div(a+b)d|mod(a+b)d<1]++(b:c)#d
l#d=l
l%d|l==l#d=l|e<-d+1=l#d%e
(%2)

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

入力はリストとして取得され[1,2]ます。

編集:@ライコニのおかげで-4バイト。


で2バイトを保存しますl%d|l==l#d=l|e<-d+1=l#d%e
ライコニ

@Laikoni:実際には4バイトです。ありがとう!
-nimi

3

パイソン2112の 110 108 105 103バイト

-Jonathan Frechに2バイト
、Erik the Outgolferに5バイト

y=input()
x=d=1
while x!=y:
 d+=1;x=y;y=x[:1]
 for a,b in zip(x,x[1:]):c=a+b;y+=[c/d,b][c%d>0:]
print x

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


y+=[...]*(...);y+=b,同等ではありませんy+=[...]*(...)+[b]か?
ジョナサンフレッチ

@JonathanFrechはい
ロッド


@EriktheOutgolfer私はこれをしようとしていましたが、110b @。@にいました
ロッド

3

Python 2、98バイト

f=lambda A,B=0,d=2:A*(A==B)or f(sum([[(l+r)/d,r][(l+r)%d>0:]for l,r in zip(A,A[1:])],A[:1]),A,d+1)

として呼び出しますf([p,q])オンラインでお試しください!

ジョナサンアランは12バイトを節約しました。ありがとう〜!

説明

fは再帰関数です。f(A, B, d)評価しf(next_A, A, d+1)ない場合A == Bは、を除き、その場合はを返しますA。(これはA*(A==B)or …、A≠Bの場合A*(A==B)、空のリストであり、false-yであるため、パーツが評価されます。A= Bの場合、A*(A==B)A、空ではないため、真であり、返されます。)

next_A 次のように計算されます。

sum([[(l+r)/d,r][(l+r)%d>0:]for l,r in zip(A,A[1:])],A[:1])

これは、例によって最もよく説明されます。たとえばd = 5 、およびA = [1, 4, 11, 8, 21]

  sum([[(l+r)/d,r][(l+r)%d>0:]for l,r in zip(A,A[1:])],A[:1])
= sum([[(1+4)/d, 4], [(4+11)/d, 11], [8], [21]], [1])
= [1] + [1, 4] + [3, 11] + [8] + [21]
= [1, 1, 4, 3, 11, 8, 21]

zip列挙の代わりにを使用[A[0]]し、sumの初期値としてを使用して、8バイト保存します
ジョナサンアラン

再帰関数を使用して別の4保存
ジョナサンアラン

@JonathanAllanナイス!私は交換する別のバイトに保存[A[0]]してA[:1]:)
リン

1
そして今、私は3バイトのおかげでリードしていA*(A==B)ます。
リン

2

Python 2、111バイト

A=input()
m=d=1
while m:
 m=o=0;d+=1
 while A[o+1:]:
	o+=1;s=A[o-1]+A[o]
	if s%d<1:A[o:o]=s/d,;m=1;o+=1
print A

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

-8 Rodに感謝します。
-2 Lynnに感謝します。



@Rod Nice(ab)use o:p
エリックアウトゴルファー


代替111:全部置き換えるforことにより、ループをwhile A[o+1:]:o+=1;s=A[o-1]+A[o];b=s%d<1;A[o:o]=[s/d]*b;m|=b;o+=b
リン

2

、22バイト

→UG`λf£NΣẊṠeo/⁰+:.)⁰tN

2要素のリストを受け取り、整数と浮動小数点数のリストを返します。 オンラインでお試しください!

説明

→UG`λf£NΣẊṠeo/⁰+:.)⁰tN  Input is a list L.
  G                 tN  Cumulative reduce over the list [2,3,4..
                   ⁰    with initial value L
   `λ             )     using flipped version of this function:
     f£NΣẊṠeo/⁰+:.       Arguments are a list, say K=[1,3,3], and a number, say d=4.
                :.       Prepend 0.5: [0.5,1,2,3]
         Ẋ               For each adjacent pair,
               +         take their sum,
            o/⁰          divide by d,
          Ṡe             and pair it with the right number in the pair: [[0.375,1],[1.0,3],[1.5,3]]
        Σ                Concatenate: [0.375,1,1.0,3,1.5,3]
     f£N                 Remove non-integers: [1,1.0,3,3]
                        Now we have an infinite list of L threaded through 2,3,4.. using the expansion operation.
 U                      Take longest prefix of unique elements,
→                       then last element of that.


1

網膜、111バイト

\d+
$*1;
^
11@
{+`(1+); (1+);
$1; $1$2 $2;
(?<=(?=(1+)).*) (\1)+ 
 a$#2$*1; 
 1+ 
 
.*a
1$&
)`a

1+@

1+
$.&
;

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

入力をスペース区切りの数字として受け取ります。与えられたアルゴリズムはかなり単純に続きますが、唯一の注目すべき技術は、マーカー記号を使用して、aいずれかの数値が保持されたことを記録することです。これは、Retinaのある程度制限されたループ機能を使用するために使用されます。これにより、一連のステージがそれらのステージへの入力に全体的な変更を加えない限りループすることができます。

説明:

これは、質問と同じ例を使用します。

\d+
$*1;

数値の入力配列をセミコロンで区切られた単項配列に変更するため、次のようになります。

1; 111111111111111111111;

^
11@

入れてd私たちを与える、冒頭で私たちのコードに:

11@1; 111111111111111111111;

{+`(1+); (1+);
$1; $1$2 $2;

これは少し複雑です。{固定ポイントに到達するまで実行されるステージのグループを開始します。次に、+このステージ自体を固定ポイントまで実行する必要があることを示します。この段階では、隣接する数字の各ペアを追加しますが、追加のセミコロンなしでそれらを挿入します。今、私たちは持っているでしょう:

11@1; 1111111111111111111111 111111111111111111111;

(?<=(?=(1+)).*) (\1)+ 
 a$#2$*1;

もう1つのトリッキーなステージであるこのステージは、最初のキャプチャグループに除数を累積し、リスト内の末尾のセミコロンなしの数値を、で割った数値に置き換えますd。また、aこれらの番号に先頭を追加し、何かが保持;されたことを示すために、それが永続的に配列の一部であることを示すために追加します。今、私たちは持っているでしょう:

11@1; a11111111111; 111111111111111111111;
 1+ 

これdは、このラウンドの前に、またその配列で割り切れなかった数字を削除します。この例では変更はありません。

.*a
1&$

これは、文字列の先頭からa入力の最後の文字まで貪欲に一致します。これは、最大で1つの一致があることを意味します。変更を加えた場合は、に1を追加dします。それ以外の場合はそのままにして、ループを終了します。

111@1; a11111111111; 111111111111111111111;

)`a

)開始されたループを閉じて{(!それを疑問視していない)と、そうでない場合は、この段階ではちょうど私たちが先に置くマーカーを削除します。これがループの終わりなので、上記の段階を何度も繰り返しますが、例がより連続的になるので、ループを忘れたように続けます。

111@1; 11111111111; 111111111111111111111;

1+@

このステージは出力から削除します:

1; 11111111111; 111111111111111111111;

1+
$.&

この段階では、単項数が10進数に置き換えられます。

1; 11; 21;

;

最終段階ではセミコロンを取り除きます:

1 11 21

明らかに、ループをスキップすると、ここで間違った結果が得られますが、うまくいけば、それはあまりにも混乱しないことです。


私のマークアッププレビューは、見ている出力とはかなり異なって見えます-アイデアはありますか?特に、あるべきではないと思うとき、多くのコードブロックが結合しています。
FryAmTheEggman

1

JavaScript(ES6)、89 87 82バイト

@Arnauldに-2バイト、さらに5バイトの節約にご協力いただきありがとうございます。

f=(a,d=2,r)=>a.map(v=>b.push(v,...(v+=a[++i])%d<1?[r=v/d]:[]),b=i=[])|r?f(b,d+1):a

入力を配列として受け取りますf([p,q])

テストケース

f=(a,d=2,r)=>a.map(v=>b.push(v,...(v+=a[++i])%d<1?[r=v/d]:[]),b=i=[])|r?f(b,d+1):a

;[[1,1],[1,2],[1,3],[2,6],[3,13],[9,9],[60,68],[144,336],[12096,24192]]
.forEach(test=>O.innerText+=JSON.stringify(test)+" -> "+JSON.stringify(f(test))+"\n")
<pre id=O></pre>


1バイトの節約に使用する代わりにvv+=b[++i])を更新できると思いますs|r代わりに別のバイトを保存することができます&&r(安全だと思いますが、再確認しませんでした)。
アーナルド

@Arnauldありがとう!|r実際に使用すると、すべてのテストケースに合格しました。
ジャスティンマリナー

以下は、を使用した85バイトのバリアントpush()です。
アーナルド

@Arnauldニース、私はもともとpush2回ではなく1回だけ使用することを考えていました。そのアイデアを再考した後、私はこれに86バイトで来ました。たぶんそれを改善できますか?
ジャスティンマリナー

実行してから84バイトで再びpush(v,...)使用できますv+=
アーナルド


1

Java 8、180バイト

import java.util.*;p->q->{List<Integer>r=new Stack();r.add(p);r.add(q);for(int d=1,f=d,i;f==d++;)for(i=1;i<r.size();i++)if((q=r.get(i)+r.get(i-1))%d<1)r.add(i++,q/(f=d));return r;}

説明:

ここで試してみてください。

import java.util.*;           // Required import for List and Stack

p->q->{                       // Method with two integer parameters and List return-type
  List<Integer>r=new Stack(); //  Result-list
  r.add(p);r.add(q);          //  Add the two input-integers to the List
  for(int d=1,                //  Divisible integer (starting at 1)
          f=d,                //  Temp integer (starting at `d` / also 1)
          i;                  //  Index-integer
      f==d++;)                //  Loop (1) as long as `f` and `d` are equal
                              //  (and raise `d` by 1 so it starts at 2 inside the loop)
    for(i=1;                  //   Reset index-integer to 1
        i<r.size();i++)       //   Inner loop (2) over the List
      if((q=r.get(i)+r.get(i-1)) 
                              //    If the current + previous items (stored in `q`)
         %d<1)                //    are divisible by `d`:
        r.add(i++,q/(f=d));   //     Insert `q` divided by `d` to the List at index `i`
                              //     (and raise `i` by 1 and set `f` to `d` in the process)
                              //   End of inner loop (2) (implicit / single-line body)
                              //  End of loop (1) (implicit / single-line body)
  return r;                   //  Return the result-List
}                             // End of method

1

C#、280バイト

using System.Linq;class A{static void Main(string[] p){var l=new System.Collections.Generic.List<int>(p.Select(int.Parse));int r,d=2,c;do{c=0;for(int i=1;i<l.Count;++i){if((r=l[i-1]+l[i])%d==0){l.Insert(i++,r/d);++c;}}++d;}while(c>0);l.ForEach(v=>System.Console.Write((v+" ")));}}

プログラム全体であるコードゴルフの最初の試み。 試して

試行2、159バイト

足場を取り去るのは、タスクが数値のペア(配列が機能する)を取り、配列を返す関数を提供することだからです。Func <int []、int []> Fを使用して要件を満たすことができる場合、Fを定義するだけです。

F=v=>{var l=new List<int>(v);int i,r,d=2,c;do{c=0;for(i=1;i<l.Count;++i){if((r=l[i-1]+l[i])%d==0){l.Insert(i++,r/d);++c;}}++d;}while(c>0);return l.ToArray();};

完全なプログラムをここでテスト

汎用リストが有効な出力と見なされる場合、これは小さくなる可能性があります(.ToArray()をドロップして10バイトを節約します)。

入力も変更できる場合、配列の代わりにList <int>を渡すと、出力を初期化する必要がなくなります(126バイトで出力されます)。

これをさらに一歩進めた場合、この場合、戻り値が実際に必要になることはありません。代わりにアクションを使用すると、returnステートメントで使用される9バイトが削除されます。


PPCGへようこそ!いい最初の答え。
アーナルド

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