กินปลาขนาดกำลังเติบโต


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. อินพุต shoal จะมีจำนวนเต็มของปลาระหว่าง 0-9
  3. 0 = สาหร่ายและไม่ช่วยคุณป้อน
  4. จำนวนเต็มของปลาหมายถึงขนาดของปลา (1-9)
  5. คุณสามารถกินปลาที่มีขนาดเท่ากันหรือน้อยกว่าตัวคุณได้เท่านั้น
  6. คุณสามารถกินปลาตามลำดับที่คุณเลือกเพื่อเพิ่มขนาดของคุณ
  7. คุณสามารถกินปลาได้เพียงครั้งเดียวเท่านั้น
  8. ปลาที่ใหญ่กว่าที่คุณกินยิ่งคุณโตเร็ว ขนาดปลา 2 เท่ากับสองขนาด 1 ปลาขนาด 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 ฉันมีอิสระที่จะทำการเปลี่ยนแปลงเล็กน้อยในการจัดรูปแบบคำถามอย่าลังเลที่จะย้อนกลับหากคุณคิดว่าไม่เหมาะสม
ร็อด


5
คำถามเพิ่มเติม: (1) เราสามารถใช้รายการจำนวนเต็มแทนสตริงจำนวนเต็มได้หรือไม่ (2) เราสามารถสมมติว่าอินพุตถูกเรียงลำดับหรือไม่?
JungHwan Min

1
ฉันเพิ่มมันจะถูกจัดเรียงและสามารถนำเข้า
Scath

2
หนึ่งสามารถลบ5,6หรือออก6,6 จากตัวอย่างสุดท้ายของ Mark และไปที่ขนาด 13; แต่ลบออก5,5และหนึ่งสามารถเข้าถึงขนาดห้าเท่านั้น
Jonathan Allan

คำตอบ:


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

ภาษา Wolfram (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 ส่วนคนอื่นทิ้งไว้ประมาณหนึ่งสัปดาห์การยอมรับคำตอบอาจหมายถึงกิจกรรมที่ลดลง นอกจากนี้ฉันรู้สึกว่าควรเอาชนะได้ (ไม่ว่าจะเป็นใน Jelly หรือการแข่งขันข้ามภาษา) ต่อไป! ... code-golf เป็นสิ่งที่แปลกสำหรับการแลกเปลี่ยนแบบสแต็คเนื่องจากการแข่งขันที่แท้จริงคือภาษาภายใน แต่เครื่องหมายการยอมรับเป็นภาษาระหว่างกัน
Jonathan Allan


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.