Ăn cá, tăng kích cỡ


16

Bạn là cá trong ao cần sống sót bằng cách ăn những con cá khác. Bạn chỉ có thể ăn những con cá có cùng kích cỡ hoặc nhỏ hơn mình. Bạn phải tạo một chương trình lấy một đàn cá làm đầu vào được sắp xếp. Từ đó, bạn phải tìm ra số lượng cá bạn có thể ăn và cuối cùng là kích thước bạn sẽ tăng lên.

Biểu đồ kích thước

+--------------+--------------+--------------+--------------+
|              | 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       |
+--------------+--------------+--------------+--------------+

Quy tắc

  1. Kích thước của bạn bắt đầu từ 1
  2. Đầu vào shoal sẽ chứa số nguyên cá trong khoảng 0-9
  3. 0 = tảo và sẽ không giúp bạn cho ăn.
  4. Số nguyên cá đại diện cho kích thước của cá (1-9).
  5. Bạn chỉ có thể ăn cá có cùng kích cỡ hoặc ít hơn mình.
  6. Bạn có thể ăn cá theo bất kỳ thứ tự nào bạn chọn để tối đa hóa kích thước của bạn.
  7. Bạn chỉ có thể ăn mỗi con cá một lần.
  8. Bạn càng ăn nhiều cá, bạn càng phát triển nhanh. Một con cá cỡ 2 bằng hai con cá cỡ 1, con cá cỡ 3 bằng ba con cá cỡ 1, v.v.
  9. Kích thước của bạn tăng lên một lần mỗi khi bạn đạt được số tiền dưới đây.

Trả về một số nguyên có kích thước tối đa bạn có thể

Ví dụ

"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

Mã ngắn nhất (tính theo byte) để làm như vậy trong bất kỳ ngôn ngữ nào có số thắng.


1
Chào mừng bạn đến với PPCG, tôi đã tự do thực hiện các thay đổi định dạng nhỏ trong câu hỏi, vui lòng trả lại chúng nếu bạn nghĩ rằng chúng không phù hợp.
Rod


5
Thêm câu hỏi: (1) chúng ta có thể lấy danh sách các số nguyên thay vì một chuỗi số nguyên không? (2) chúng ta có thể giả sử đầu vào được sắp xếp?
JungHwan Min

1
Tôi đã thêm nó sẽ được sắp xếp và có thể nhận bất kỳ đầu vào nào
Scath

2
Người ta có thể xóa 5,6hoặc 6,6 từ ví dụ cuối cùng của Mark và đạt kích thước 13; chưa loại bỏ 5,5thay thế và người ta chỉ có thể đạt kích thước năm.
Jonathan Allan

Câu trả lời:


10

JavaScript (ES6), 44 byte

Đưa đầu vào như một mảng các số nguyên.

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

Hãy thử trực tuyến!

Làm sao?

TSS+1

TS= =2S(S+1)

Stt= =11

x

  • xtSx
  • St>TS


5

Ngôn ngữ Wolfram (Mathicala) , 40 39 byte

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

Hãy thử trực tuyến!

Giải trình

f:=Floor@s;s=1;

Lưu trữ floor(s)trong f, tượng trưng. Bắt đầu với s=1(kích thước).

... /@#

Lặp lại qua từng yếu tố trong đầu vào ...

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

Nếu phần tử không lớn hơn s, thì tăng stheo <element> / (4 * floor(s)). Các Or (||)ngắn mạch khác.

f

Quay trở lại floor(s).


5

Thạch , 17 byte

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

Hãy thử trực tuyến!

Một phương pháp thú vị có thể bị đánh bại bởi một loại vòng lặp hoặc đệ quy.

Làm sao?

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.)

Có người nói rằng tôi sẽ sớm chấp nhận điều này, bạn có đồng ý không?
Scath

Vâng tôi đồng ý; một số người không trao giải kiểm tra màu xanh lá cây cho môn đánh gôn, những người khác để lại khoảng một tuần - chấp nhận câu trả lời có thể có nghĩa là giảm hoạt động. Như một bên, tôi cảm thấy như thế này nên có thể đánh bại được (dù là trong chính Jelly hay là một cuộc thi đa ngôn ngữ)! ... Code-golf là một sự phù hợp kỳ lạ với Stack Exchange vì đối thủ cạnh tranh thực sự là ngôn ngữ nội bộ nhưng dấu chấp nhận là liên ngôn ngữ.
Jonathan Allan


1

Lua , 214 byte

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

Hãy thử trực tuyến!

Thậm chí không phải là gần ngắn nhất ở đây nhưng thật vui khi tìm ra nó: D

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.