मछली खाना, आकार में बढ़ना


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 मछली दो आकार 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) क्या हम मान सकते हैं कि इनपुट छांटा गया है?
जुंगवान मिन जुले

1
मैंने कहा कि इसे हल किया जाएगा और कोई भी इनपुट ले सकता है
स्कैथ

2
कोई मार्क के अंतिम उदाहरण को हटा 5,6या हटा सकता है 6,6और 13 के आकार का हो सकता है; 5,5इसके बजाय हटा दें और एक केवल पांच आकार तक पहुंच सकता है।
जोनाथन एलन

जवाबों:


10

जावास्क्रिप्ट (ईएस 6), 44 बाइट्स

पूर्णांक के एक सरणी के रूप में इनपुट लेता है।

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

इसे ऑनलाइन आज़माएं!

कैसे?

Tss+1

टीरों=2रों(रों+1)

रोंटीटी=11

प्रत्येक मछली के लिए एक्स

  • एक्सटीsx
  • st>Tरों


5

वोल्फ्राम लैंग्वेज (मैथमेटिका) , 40 39 बाइट्स

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

इसे ऑनलाइन आज़माएं!

व्याख्या

f:=Floor@s;s=1;

स्टोर floor(s)में f, प्रतीकात्मक। से शुरू करें s=1(आकार)।

... /@#

इनपुट में प्रत्येक तत्व के माध्यम से Iterate ...

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

किसी ने कहा कि यह मेरे लिए जल्द ही स्वीकार करने के लिए क्या आप सहमत हैं?
स्कैथ

हाँ मैं सहमत हूँ; कुछ लोग कोड-गोल्फ के लिए हरे रंग की जांच के लिए पुरस्कार नहीं देते हैं, अन्य इसे एक सप्ताह के लिए छोड़ देते हैं - जवाब स्वीकार करने का मतलब गतिविधि में गिरावट हो सकती है। एक तरफ के रूप में मुझे लगता है कि इस तरह से (या तो जेली में या एक क्रॉस-भाषा प्रतियोगिता के रूप में) बीट करने योग्य होना चाहिए! ... कोड-गोल्फ स्टैक एक्सचेंज के लिए एक अजीब फिट है क्योंकि वास्तविक प्रतियोगिता इंट्रा-भाषा है, लेकिन स्वीकार चिह्न अंतर-भाषा है।
जोनाथन एलन


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

इसे ऑनलाइन आज़माएं!

यहां तक ​​कि कम से कम एक के पास नहीं, लेकिन यह पता लगाने के लिए मजेदार था: डी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.