크기가 커지는 물고기를 먹는


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. 아래 금액에 도달 할 때마다 크기가 하나씩 증가합니다.

가능한 최대 크기의 정수를 반환

"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에 오신 것을 환영합니다. 질문에서 사소한 형식 변경을 수행 할 자유를 얻었으며 적절하지 않다고 생각되면 자유롭게 롤백하십시오.
Rod


5
더 많은 질문 : (1) 정수 문자열 대신 정수 목록을 가져올 수 있습니까? (2) 입력이 정렬되었다고 가정 할 수 있습니까?
JungHwan Min

1
나는 그것을 분류하고 모든 입력을받을 수 있다고 덧붙였다
Scath

2
Mark의 마지막 예제를 제거 5,6하거나 6,6크기 13을 얻을 수 있습니다. 그러나 5,5대신 제거 하고 하나는 크기 5에 도달 할 수 있습니다.
Jonathan Allan

답변:


10

자바 스크립트 (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

Wolfram Language (Mathematica) , 40 39 바이트

(f:=Floor@s;s=1;s<#||(s+=#/4/f)&/@#;f)&

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

설명

f:=Floor@s;s=1;

저장 floor(s)에서 f상징적으로. s=1(크기)로 시작하십시오 .

... /@#

입력의 각 요소를 반복하십시오 ...

s<#||(s+=#/4/f)

요소가보다 큰 경우 s, 다음 증가 s에 의해 <element> / (4 * floor(s)). Or (||)그렇지 않으면 단락.

f

을 반환 floor(s)합니다.


5

젤리 , 17 바이트

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

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

어떤 종류의 루프 나 재귀에 잘 맞을 수있는 흥미로운 방법입니다.

어떻게?

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

그래, 난 동의; 어떤 사람들은 코드 골프에 대해 녹색 확인 표시를하지 않고 다른 사람들은 일주일 정도 그것을 남겨 둡니다. 답변을 수락하면 활동이 줄어들 수 있습니다. 제쳐두고 나는 이것이 젤리 자체 또는 언어 간 경쟁에서 이길 수 있어야한다고 생각합니다! ... 실제 경쟁은 언어 내이지만 승인 마크는 언어 간이므로 code-golf는 Stack Exchange에 적합하지 않습니다.
Jonathan Allan


1

루아 , 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.