魚を食べる、サイズが大きくなる


16

あなたは他の魚を食べて生き残るために必要な池の魚です。自分と同じサイズまたは小さい魚のみを食べることができます。ソートされた入力として魚の群れを受け取るプログラムを作成する必要があります。これから、何匹の魚を食べることができ、最終的には成長するサイズを計算する必要があります。

サイズチャート

+--------------+--------------+--------------+--------------+
|              | Amount extra | Total size 1 | Increase to  |
| Current size |  needed for  |     fish     |    size      |
|              |  next size   |              |              |
+--------------+--------------+--------------+--------------+
|      1       |      4       |      4       |      2       |
+--------------+--------------+--------------+--------------+
|      2       |      8       |      12      |      3       |
+--------------+--------------+--------------+--------------+
|      3       |      12      |      24      |      4       |
+--------------+--------------+--------------+--------------+
|      4       |      16      |      40      |      5       |
+--------------+--------------+--------------+--------------+
|      5       |      20      |      60      |      6       |
+--------------+--------------+--------------+--------------+
|      6       |      24      |      84      |      7       |
+--------------+--------------+--------------+--------------+

ルール

  1. サイズは1から始まります
  2. 浅瀬入力には0〜9の魚整数が含まれます。
  3. 0 =藻類であり、餌を与えません。
  4. 魚の整数は、魚のサイズ(1〜9)を表します。
  5. 自分と同じサイズまたはそれ以下の魚しか食べることができません。
  6. サイズを最大化するために、好きな順序で魚を食べることができます。
  7. 各魚を一度だけ食べることができます。
  8. 食べる魚が大きければ大きいほど、成長が早くなります。サイズ2の魚は2つのサイズ1の魚に等しく、サイズ3の魚は3つのサイズ1の魚に相当します。
  9. サイズは、以下の金額に達するたびに1ずつ増加します。

可能な最大サイズの整数を返します

"11112222" => 3  
4 fish size 1 increases to 2, 4 size 2 makes you 3

"111111111111" => 3
4 fish size 1 increases to 2, 8 size 1 makes you 3

数字が勝つ任意の言語でそうするための最短コード(バイト単位)。


1
PPCGへようこそ、私は自由に問題の小さなフォーマット変更を行いました。それらが適切でないと思われる場合は、気軽にロールバックしてください。
ロッド


5
その他の質問:(1)整数文字列の代わりに整数のリストを取得できますか?(2)入力がソートされていると仮定できますか?
ジョンファンミン

1
私はそれがソートされ、任意の入力を取ることができると付け加えました
-Scath

2
マークの最後の例から削除する5,66,6、サイズ13にすることができます。それでも5,5代わりに削除すると、サイズ5にしか到達できません。
ジョナサンアラン

回答:


10

JavaScript(ES6)、44バイト

入力を整数の配列として受け取ります。

a=>a.map(x=>s+=(t+=s>=x&&x)>s*-~s*2,t=s=1)|s

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

どうやって?

Tss+1

Ts=2s(s+1)

stt=11

x

  • xtsx
  • st>Ts



5

ゼリー、17 バイト

J×4ÄfSR$ịx`>JTḢȯ1

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

ある種のループまたは再帰によってwellられる可能性のある興味深い方法。

どうやって?

J×4ÄfSR$ịx`>JTḢȯ1 - Link: list A (ascending digits) e.g. [1,1,1,1,1,1,1,2,2,3]
J                 - range of length                      [1,2,3,4,5,6,7,8,9,10]
 ×4               - multiply all by 4                    [4,8,12,16,20,24,28,32,36,40]
   Ä              - cumulative sums                      [4,12,24,40,60,84,112,144,180,220]
       $          - last two links as a monad (of A):
     S            -   sum                                14
      R           -   range                              [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
   f              - filter keep                          [4,12]
          `       - use left argument as right with:
         x        -   repeat elements                    [1,1,1,1,1,1,1,2,2,2,2,3,3,3]
        ị         - index into                           [      1,              3    ]
                  -                                    = [1,3]
            J     - range of length (of A)               [1,2,3,4,5,6,7,8,9,10]
           >      - greater than?                        [0,1,3,4,5,6,7,8,9,10]
                  -                1 not greater than 1---^ ^---3 is greater than 2
                  -   (note keeps values of longer - i.e. the 3,4,... here)
             T    - truthy indices                       [  2,3,4,5,6,7,8,9,10]
              Ḣ   - head                                 2
                1 - literal one                          1
               ȯ  - logical OR                           2
                  -   (edge-case handling when the head of an empty list yields 0)
                  -   (note that when the shoal is fully consumed the final size will
                  -    still be less than the length of that shoal, so TḢ will still give
                  -    this size due to >J keeping values of the longer argument.)

誰かが私がこれを受け入れるのはもうすぐだと言いましたが、あなたは同意しますか?
-Scath

はい私は同意する; コードゴルフに緑色のチェックマークを付けない人もいれば、約1週間それを残す人もいます。答えを受け入れると、活動が低下する可能性があります。余談ですが、とにかくこれは(Jelly自体またはクロスランゲージコンペティションのいずれかで)打ち勝つことができると思います!...実際の競争は言語内ですが、受け入れマークは言語間であるため、code-golfはStack Exchangeに奇妙に適合します。
ジョナサンアラン


1

Lua、214バイト

l,f=1,{}for j=1,9 do s,f[j]=(...):gsub(j,0)end::z::a,n=0,l*4 for i=1,l do a=a+i*f[i]end if a>=n then e=l while n>0 do if 0<f[e]and e<=n then n=n-e f[e]=-1+f[e]else e=e-1 end end l=l+1 else print(l)return end goto z

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

ここで一番近いものではありませんが、それを理解するのは楽しかったです:D

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