कोडगॉल्फ रेनबो: फन विथ इंटेगर-एरेस


12

परिचय:

यहाँ छवि विवरण दर्ज करें(स्रोत: विकिपीडिया )
जब हम एक इंद्रधनुष को देखते हैं तो उसमें हमेशा ऊपर से नीचे तक रंग होंगे:
लाल; संतरा; पीला; हरा; नीला; इंडिगो; बैंगनी

अगर हम इन अलग-अलग रिंगों को देखें, तो लाल रिंग वायलेट रिंग से बड़ी होती है।
इसके अलावा, एक ही समय में दो या तीन इंद्रधनुष होना भी संभव है।

इस चुनौती में उपरोक्त सभी का उपयोग किया जाएगा:

चुनौती:

बिल्कुल 7 आकार के पूर्णांक की एक सूची को देखते हुए, जहां प्रत्येक मान इंद्रधनुष-बनाने के लिए उपलब्ध रंग-कणों को इंगित करता है (जहां सबसे बड़ा सूचकांक लाल इंगित करता है और सबसे छोटा सूचकांक वायलेट इंगित करता है), जो इंद्रधनुष का गठन कर सकता है।

एक पूर्णांक-इंद्रधनुष में कम से कम 3x वायलेट, 4x इंडिगो, 5x नीला, 6x हरा, 7x पीला, 8x नारंगी, 9x लाल होना आवश्यक है। इसके ऊपर एक दूसरा इंद्रधनुष पहले इंद्रधनुष की लाल रिंग (उनके बीच एक स्थान सहित) से भी बड़ा होगा, इसलिए इसे कम से कम 11x बैंगनी, 12x इंडिगो, 13x नीला, 14x हरा, 15x पीला, 16x नारंगी , 17x लाल इसके अलावा जो पहले इंद्रधनुष का उपयोग करता है। तीसरा इंद्रधनुष 19x वायलेट पर फिर से शुरू होगा।

उदाहरण:

इनपुट-सूची: [15,20,18,33,24,29,41]
आउटपुट:2

क्यों? हमारे पास 15x वायलेट हैं, और हमें दो इंद्रधनुष के लिए कम से कम 3 + 11 = 14 की आवश्यकता है। हमारे पास 20 इंडिगो हैं और हमें दो इंद्रधनुषों के लिए कम से कम 4 + 12 = 16 चाहिए। आदि। हमारे पास दो इंद्रधनुषों के लिए पर्याप्त रंग हैं, लेकिन तीन इंद्रधनुष बनाने के लिए पर्याप्त नहीं है, इसलिए आउटपुट है 2

चुनौती नियम:

  • इनपुट-ऐरे में पूर्णांक गैर-नकारात्मक ( >= 0) होने की गारंटी है ।
  • इनपुट-लिस्ट का आकार 7 बिल्कुल ठीक होने की गारंटी है।
  • जब कोई रेनबो नहीं बन सकता है तो हम आउटपुट करते हैं 0
  • इनपुट और आउटपुट प्रारूप लचीला है। दशमलव की पूर्णांकों की एक सूची या सारणी हो सकती है, जिसे STDIN से लिया जा सकता है। आउटपुट किसी भी उचित आउटपुट-प्रकार में फ़ंक्शन से रिटर्न हो सकता है, या सीधे STDOUT में मुद्रित किया जा सकता है।

nइंद्रधनुषों की मात्रा के लिए आवश्यक न्यूनतम रंग :

Amount of Rainbows    Minimum amount per color
0                     [0,0,0,0,0,0,0]
1                     [3,4,5,6,7,8,9]
2                     [14,16,18,20,22,24,26]
3                     [33,36,39,42,45,48,51]
4                     [60,64,68,72,76,80,84]
5                     [95,100,105,110,115,120,125]
etc...

सामान्य नियम:

  • यह , इसलिए बाइट्स जीत में सबसे छोटा जवाब है।
    कोड-गोल्फ भाषाओं को गैर-कोडगॉल्फिंग भाषाओं के साथ उत्तर पोस्ट करने से हतोत्साहित न करें। 'किसी भी' प्रोग्रामिंग भाषा के लिए यथासंभव संक्षिप्त उत्तर के साथ आने का प्रयास करें।
  • मानक नियम आपके उत्तर के लिए लागू होते हैं , इसलिए आपको उचित पैरामीटर और रिटर्न-टाइप, पूर्ण कार्यक्रमों के साथ STDIN / STDOUT, फ़ंक्शन / विधि का उपयोग करने की अनुमति है। तुम्हारा कॉल।
  • डिफ़ॉल्ट लूपोल्स वर्जित हैं।
  • यदि संभव हो, तो कृपया अपने कोड के लिए एक परीक्षण के साथ एक लिंक जोड़ें।
  • साथ ही, आपके उत्तर के लिए स्पष्टीकरण जोड़ना अत्यधिक अनुशंसित है।

परीक्षण के मामलों:

Input:  [15,20,18,33,24,29,41]
Output: 2

Input:  [3,4,5,6,7,8,9]
Output: 1

Input:  [9,8,7,6,5,4,3]
Output: 0

Input:  [100,100,100,100,100,100,100]
Output: 4

Input:  [53,58,90,42,111,57,66]
Output: 3

Input:  [0,0,0,0,0,0,0]
Output: 0

Input:  [95,100,105,110,115,120,125]
Output: 5

Input:  [39525,41278,39333,44444,39502,39599,39699]
Output: 98

0,0,0,0,0,0,0बढ़त दर-मामला हालांकि :( (यह 1-खाई तर्क के साथ फिट नहीं करता है)
जोनाथन एलन

जवाबों:


8

अजगर , 14 बाइट्स

thS.ef<b*+tkyy

परीक्षण सूट!

कैसे?

Algortihm

सबसे पहले, आइए इस सूत्र को बंद करें। आइए उस फ़ंक्शन को कॉल करें जो आवश्यक मात्रा में रंग कणों , जहां एन परतों की संख्या है और मैं रंग का सूचकांक है, 0-आधारित। सबसे पहले, हम ध्यान दें कि अकेले n वें परत के लिए (जहां n 1-अनुक्रमित है, इस मामले में), हमें L ( n , i ) = i + 3 + 8 ( n - 1 ) रंग कणों की आवश्यकता है। इसे ध्यान में रखते हुए, हम प्रत्येक के परिणामों का योग करते हैंC(n,i)ninthnL(n,i)=i+3+8(n1) प्रत्येक परत के लिए k :L(k,i)k

सी ( n , i ) = ( i + 3 ) एन

C(n,i)=(i+3)1st layer+(i+3+8)2nd layer++[i+3+8(n1)]nth layer
सी ( n , मैं ) = ( मैं + 3 ) n + 8 ( n - 1 ) n
C(n,i)=(i+3)n+8(0+1++n1)
सी(n,मैं)=(मैं+3)n+8(n-1)n2=(मैं+3)n+4n(n-1)
सी(n,मैं)=n(मैं+3+4n-4)सी(n,मैं)=n(4n+मैं-1)

सी(,मैं)मैंमैंमैंमैंमैंवें

कार्यान्वयन

सी.eटी<सी(टी,मैं)सी(टी,मैं) और 1 से ऑफसेट करने के लिए इसे एक से घटाएं।


3

पायथन 2 , 64 61 बाइट्स

lambda l:min(((16*v+i*i)**.5-i)//8for i,v in enumerate(l,-1))

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


इंद्रधनुष का प्रत्येक रंग (3+i)+n*8परत nऔर रंग i(0 = बैंगनी, आदि) के लिए उपयोग करता है

एक्स परतों के लिए कुल इसलिए है (3*i)*x + 8*x*(x+1):।

हम बस एन के लिए हल करते हैं, और न्यूनतम मूल्य लेते हैं।


बचाया:

  • -3 बाइट्स, ओव्स के लिए धन्यवाद

2
आह, अब मुझे वह प्रतिक्रिया मिल गई है ...
जोनाथन फ्रीच


@ नोव्स, थैंक्स :)
टीफ़ल्ड

3

05AB1E , 18 17 16 बाइट्स

मैजिक ऑक्टोपस Urn के लिए -1 बाइट धन्यवाद

[ND4*6Ý<+*¹›1å#N

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

एन इंद्रधनुष के लिए आवश्यक रंग की मात्रा n (4n + [-1, 0, 1, 2, 3, 4, 5]) है


[ND4*6Ý<+*¹›1å#Nकाम करता है लेकिन मुझे पता नहीं क्यों। -1 बाइट हालांकि
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn धन्यवाद! यह काउंटर काउंटर के बजाय लूप इंडेक्स का उपयोग करता है।
17

अजीब लगता है, N>हालांकि मुझे ऐसा नहीं करना है - क्योंकि आपके पास ¾>पहले था ।
मैजिक ऑक्टोपस Urn

@MagicOctopusUrn काउंटर वैरिएबल को बढ़ाने का कमांड काउंटर वैरिएबल को पुश नहीं करता है।
19

2

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

f=(a,n)=>a.some((v,k)=>v<4*n*n-~-k*n)?~n:f(a,~-n)

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

कैसे?

पी(n,)n

पी(n,)=n(4n+(-1))=4n2+(-1)n

nvपी(n,)

लेकिन गोल्फ उद्देश्यों के लिए, हम बाद के n === undefinedनकारात्मक मूल्यों के साथ शुरू करते हैं और उपयोग करते हैं n। पहली पुनरावृत्ति हमेशा सफल होती है क्योंकि असमानता का सही पक्ष इसका मूल्यांकन करता है NaN। इसलिए, पहला सार्थक परीक्षण दूसरा है n == -1



1

एक्सेल VBA, 78 बाइट्स

बेनामी फ़ंक्शन जो [A1:G1]VBE तत्काल विंडो के लिए और आउटपुट की सीमा से इनपुट लेता है ।

[A2:G999]="=A1-(COLUMN()+8*ROW()-14)":[H:H]="=-(MIN(A1:G1)<0)":?998+[Sum(H:H)]

1

चारकोल , 21 बाइट्स

I⌊EA÷⁻X⁺X⊖κ²×¹⁶ι·⁵⊖κ⁸

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण: प्रत्यक्ष रूप से प्राप्त किए गए एक सूत्र के साथ प्रत्येक रंग के साथ संभव इंद्रधनुष की संख्या की सीधे गणना करता है, लेकिन @ टीफ़िल्ड के सूत्र के समान है।

   A                   Input array
  E                     Map over values
          κ             Current index
         ⊖              Decrement
        X  ²            Square
               ι        Current index
            ×¹⁶         Multiply by 16
       ⁺                Add
      X         ·⁵      Square root
                   κ    Current index
                  ⊖     Decrement
     ⁻                  Subtract
    ÷               ⁸   Integer divide by 8
 ⌊                      Take the maximum
I                       Cast to string
                        Implicitly print


1

जेली , 14 बाइट्स

यह कठिन था!

Ṃ+9s8Ṗ‘+\>Ż§ỊS

सात पूर्णांक की एक सूची को स्वीकार करने वाला एक अद्वैत लिंक जो एक पूर्णांक प्राप्त करता है, इंद्रधनुष की संख्या संभव है।

इसे ऑनलाइन आज़माएं! या परीक्षण-सूट देखें

कैसे?

दुर्भाग्य से किसी भी भोली विधि 16 बाइट लेने के लिए लगता है, एक ऐसी विधि है Ṃɓ_J×¥H÷‘H<¬Ȧð€S, लेकिन यह पता चला है कि यहाँ इस्तेमाल किया विधि बहुत अधिक कुशल है और साथ ही कम है!

यह विधि अल्ट्रा-वायलेट बैंड सहित कण काउंट्स के रूप में पर्याप्त इंद्रधनुषीय ढेर से अधिक का निर्माण करती है , और प्रत्येक स्टैक के लिए 1 जोड़ देती है जो संभव है।

यह संभव होने के लिए परीक्षण यह जांचने के लिए है कि केवल एक ही बैंड संभव नहीं है क्योंकि हमें कुछ अल्ट्रा-वायलेट बैंड कणों की आवश्यकता है लेकिन शून्य प्रदान किए गए थे।

Ṃ+9s8Ṗ‘+\>Ż§ỊS - Link list of integers    e.g. [0,0,0,0,0,0,0]        or [17,20,18,33,24,29,41]
Ṃ              - minimum                       0                         17
 +9            - add nine                      9                         26
   s8          - split into eights             [[1,2,3,4,5,6,7,8],[9]]   [[1,2,3,4,5,6,7,8],[9,10,11,12,13,14,15,16],[17,18,19,20,21,22,23,24],[25,26]]
     Ṗ         - discard the rightmost         [[1,2,3,4,5,6,7,8]]       [[1,2,3,4,5,6,7,8],[9,10,11,12,13,14,15,16],[17,18,19,20,21,22,23,24]]
      ‘        - increment (vectorises)        [[2,3,4,5,6,7,8,9]]       [[2,3,4,5,6,7,8,9],[10,11,12,13,14,15,16,17],[18,19,20,21,22,23,24,25]]
               -   (single rainbow counts, including ultra-violet bands, ready to stack)
       +\      - cumulative addition           [[2,3,4,5,6,7,8,9]]       [[2,3,4,5,6,7,8,9],[12,14,16,18,20,22,24,26],[30,33,36,39,42,45,48,51]]
               -   (stacked rainbow counts, including ultra-violet bands)
          Ż    - zero concatenate              [0,0,0,0,0,0,0,0]         [0,17,20,18,33,24,29,41]
               -   (we got given zero ultra-violet band particles!)
         >     - greater than? (vectorises)    [[1,1,1,1,1,1,1,1]]       [[1,0,0,0,0,0,0,0],[1,0,0,0,0,0,0,0],[1,1,1,1,1,1,1,1]]
               -   (always a leading 1 - never enough particles for the ultra-violet band)
           §   - sum each                      [8]                       [1,1,8]
               -   (how many bands we failed to build for each sacked rainbow?)
            Ị  - insignificant? (abs(X)<=1?)   [0]                       [1,1,0]
               -   (1 if we only failed to build an ultra-violet band for each sacked rainbow, 0 otherwise)
             S - sum                           0                         2
               -   (the number of rainbows we can stack, given we don't see ultra-violet!)

मैं आपको महसूस करता हूं, 18 बाइट्स में ओक्स के एल्गोरिथ्म को निचोड़ना मेरे लिए निश्चित रूप से बहुत कठिन था ...
एरिक द आउटगलर

इसके अलावा, चतुर विचार के साथ §ỊS!
आउटगोल्फर

1

05AB1E , 14 बाइट्स

žv*āÍn+tā-Ì8÷ß

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

n

पायथ एल्गोरिथ्म ⟶ 05AB1E एल्गोरिथ्म

रहे हैं कई तरीकों से एक 05AB1E में इस चुनौती को हल करने के लिए कोशिश कर सकते हैं, तो मैं उनमें से एक जोड़े की कोशिश की और यह कम से कम साबित हुआ। मेरे Pyth उत्तर से उपर्युक्त सूत्र को अपनाना, यह ध्यान में रखते हुए कि 05AB1E ने 1-इंडेक्सिंग का उपयोग किया, हम अपने कार्य का निर्माण इस प्रकार कर सकते हैं:

सी(n,मैं)=n(मैं+2)+4n(n-1)

मैंमैं

4n2+n(मैं-2)-मैंमैं=0

ध्यान दें कि यह समानता सटीक नहीं है (लेकिन मुझे वर्तमान में इसे और अधिक औपचारिक रूप से बताने का तरीका नहीं पता है) और इस समीकरण के समाधानों में फ्लोटिंग-पॉइंट नंबर होंगे, लेकिन हम सटीक विभाजन के बजाय फर्श विभाजन का उपयोग करके इसे ठीक करते हैं बाद में। वैसे भी, हमारे तर्क को जारी रखने के लिए, आप में से अधिकांश शायद इस तरह के समीकरण के समाधान से परिचित हैं , इसलिए यहां हमारे पास यह है:

n1,2=2-मैं±(मैं-2)2+16मैंमैं8

मैंमैं(मैं-2)2+16मैंमैंमैं-2-2-मैं-मैं+2=4-2मैंमैं22-मैं-2+मैं=4n

n=2+(मैं-2)2+16मैंमैं-मैं8

जो वास्तव में संबंध है कि यह उत्तर लागू होता है।


1

सी ++, 127 125 बाइट्स

केविन क्रूज़सेन की बदौलत 2 बाइट्स निकाल दिए।

#include<cmath>
int f(int x[7]){size_t o=-1;for(int c=0,q;c<7;c++,o=o>q?q:o)q=(std::sqrt(--c*c-c+16*x[++c])-c+1)/8;return o;}

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

फ़ंक्शन सात-ints के C- शैली सरणी लेता है और एक int देता है।

सी0सी6n(n1)yसी(n)=(सी+3)+8(n-1)nYसी(n)=Σ=1nyसी()=n(सी+3)+8n(n-1)2एक्ससीYसी(n)एक्ससीn:

n-(सी-1)+(सी-1)2+16एक्ससी8

एक्ससी

स्पष्टीकरण:

#include <cmath> // for sqrt

int f (int x[7])
{
     // Note that o is unsigned so it will initially compare greater than any int
     size_t o = -1;
     // Iterate over the array
     for (int c = 0; c < 7; c++)
     {
         // calculate the bound
         int q = c - 1;
         q = (std::sqrt (q * q + 16 * x[c]) - q) / 8;

         // if it is less than previously found - store it
         o = o > q ? q : o;
     }
     return o;
 }

नमस्ते वहाँ, PPCG में आपका स्वागत है! मैं सी भी अच्छी तरह से पता नहीं ++, लेकिन मैं बहुत यकीन है कि आप कर सकते हैं गोल्फ इस भाग: for(int c=0;c<7;c++){int q=c-1;q=(std::sqrt(q*q+16*x[c])-q)/8;o=o>q?q:o;}यह करने के लिए: for(int c=0,q;c<7;c++,o=o>q?q:o)q=(std::sqrt(--c*c-c+16*x[++c]))/8;। इसके अलावा, क्या आप शायद टेस्ट कोड के साथ एक टीआईओ-लिंक प्रदान कर सकते हैं ?
केविन क्रूज़सेन

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