अलग-अलग पूर्णांकों की सबसे बड़ी संख्या ज्ञात कीजिए जो n को योग करते हैं


18

काम

एक इनपुट पॉजिटिव पूर्णांक n(आपकी भाषा की सीमा से, समावेशी रूप से) को देखते हुए , अधिकतम पॉजिटिव पूर्णांकों की अधिकतम संख्या को वापस लौटाएं या आउटपुट करें जो कि योग करें n

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

चलो fकाम के अनुसार एक वैध समारोह को परिभाषित:

f1 से शुरू होने वाला क्रम :

1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, ...

एक बड़े परीक्षण के मामले के रूप में:

>>> f(1000000000) // Might not be feasible with brute-forcers
44720

टेस्ट कोड

स्पष्ट रूप से नहीं दिए गए किसी भी परीक्षण मामलों के लिए, आपके कोड का आउटपुट निम्नलिखित के परिणाम से मेल खाना चाहिए:

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        System.out.println((int) Math.floor(Math.sqrt(2*x + 1./4) - 1./2));
    }
}

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


क्या इसे 0-अनुक्रमित किया जा सकता है?
पूरी तरह से

1
@totallyhuman "यह" जवाब दिया जा रहा है? क्योंकि यह एक सूची के बारे में नहीं है ...
Addison Crump

3
@totallyhuman No. यह विशिष्ट संख्याओं के अलग-अलग विभाजन के बारे में है।
एडिसन क्रम्प


4
मुझे लगता है मैं कोडगोल्फ स्टैक में हर बार सबसे अधिक तुच्छ महसूस करता हूं। जवाब और टिप्पणियां बहुत अधिक विनम्र हैं। सवाल आम तौर पर दिलचस्प होते हैं, लेकिन उनकी टिप्पणी के साथ @JeppeStigNielsen पूरा ब्लूप्रिंट में फेंकता है जब हम अभी भी फर्श क्षेत्र पर विचार कर रहे हैं।
कालपीएम

जवाबों:


9

05AB1E , 4 बाइट्स

ÅTg<

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

नौकरी के लिए सही उपकरण।

ÅTकी सूची पैदावार Å करूँगा टी riangular संख्या अप करने के लिए और सहित एन (दुर्भाग्य से 0 भी शामिल हैं, अन्यथा यह 3 बाइट्स होगा), g<हो जाता है लेन जी वें और यह decrements।


8

जेली , 6 5 बाइट्स

R+\»ċ

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

कुछ हद तक कुशल। यह अनुक्रम त्रिकोणीय संख्याओं में वृद्धि करता है, इसलिए यह केवल यह गणना करता है कि कितने त्रिकोणीय संख्या n से छोटी है ।

स्पष्टीकरण:

        # Main link
R       # Range, generate [1..n]
 +\     # Cumulative sum (returns the first n triangular numbers)
   »    # For each element, return the maximum of that element and 'n'
    ċ   # How many elements are 'n'? (implicit right argument is n)

स्पष्टीकरण में, आपका निश्चित रूप से मतलब है "कितने नंबर n की तुलना में छोटे हैं या बराबर हैं "
लुइस मेंडो

@LuisMendo नई व्याख्या देखें।
DJMcMayhem

6

हास्केल , 26 बाइट्स

-2 बाइट्स H.PWiz को धन्यवाद।

(!!)$do x<-[0..];x<$[0..x]

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

यह संपूर्ण संख्याओं का nth तत्व देता है जहाँ प्रत्येक i को दोहराया जाता है i + 1 बार।


3
मैं मदद नहीं कर सकता, लेकिन यह पूछ सकता हूं कि "succ" क्या है
Addison Crump

हाँ, मुझे पता है। succके लिए खड़ा है successor
पूरी तरह से

5

ब्रेन-फ्लैक , 36 बाइट्स

<>(())({()<(({}())){<>({}[()])}>{}})

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

यह मानक विभाजन एल्गोरिथ्म के रूप में समान संरचना का उपयोग करता है, सिवाय इसके कि "भाजक" को हर बार पढ़ने के बाद बढ़ा दिया जाता है।



3

ब्रेन-फ्लैक , 82 बाइट्स

व्हॉट्सएप ने "पठनीयता" के लिए जोड़ा

(())

{
    {}

    ((({})[[]]))

    ([({}<(())>)](<>)){({}())<>}{}{((<{}>))<>{}}{}<>{}

}{}{}{}

([]<>)

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



1
किसने सोचा होगा कि दो अपठनीय भाषाओं, व्हाट्सएप और ब्रेन-फ्लैक के संयोजन को "पठनीय" माना जा सकता है!
caird coinheringaahing

3

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

×8‘½’:2

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

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

Ḥ+4ݤ½_.Ḟ

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

यह डेनिस और डीजे की तुलना में लंबा है , लेकिन इस बार उद्देश्य पर । बहुत, बहुत कुशल



@totallyhuman उपयोग M
user202729

3

आर , 28 बाइट्स

function(n)rep(1:n,1:n+1)[n]

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

1बार- 2बार, 2बार- 3बार, ..., nबार- n+1बार के वेक्टर को बनाता है और nthतत्व लेता है । यह स्मृति त्रुटि या तो क्योंकि 1:nबहुत बड़ी है या क्योंकि n*(n+1)/2 - 1तत्वों के साथ दोहराया सूची बहुत बड़ी है।

आर , 29 बाइट्स

function(n)((8*n+1)^.5-1)%/%2

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

Alephalpha के उत्तर में पाए गए सूत्र का उपयोग करके सीधे मूल्य की गणना करता है । यह संभवतया संख्यात्मक परिशुद्धता के अलावा, किसी भी मुद्दे के साथ नहीं चलना चाहिए।

आर , 30 बाइट्स

function(n)sum(cumsum(1:n)<=n)

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

से कम या इसके बराबर त्रिकोणीय संख्याओं की गणना करता है n। यदि संभव है कि यह स्मृति त्रुटि 1:nकाफी बड़ी होगी - उदाहरण के लिए, 1e9यह फेंकता है Error: cannot allocate vector of size 3.7 Gb




2

क्या यह हमेशा सही है? मैं निश्चित नहीं हूं floor((sqrt(8x+4)-1)/2)(आपका सूत्र) और floor((sqrt(8x+1)-1)/2)(सही फॉर्मूला) हर के लिए समान परिणाम देता हूं x
ETHproductions

@ETHproductions मैं झांसा दे सकता था और "हाँ" कह सकता था, लेकिन मुझे लगता है कि अधिक ईमानदार जवाब यह है कि आपको अपनी स्वयं की परिकल्पना विकसित करने की कोशिश करनी चाहिए और यह पता लगाना चाहिए कि क्या / क्यों यह एक ही सूत्र को प्रतिबिंबित करता है। मैं अपने आप से इस दृष्टिकोण के साथ नहीं आया (मैंने इसे एक अलग साइट से सीखा) लेकिन मैंने इसके साथ थोड़ा सा खेला। यह एक बहुत ही दिलचस्प तरीका है और मैं मेंढक को इतनी जल्दी नहीं काटना चाहता।
अनहिद्रोन

हम्म। मुझे यकीन नहीं है कि इसे सीधे कैसे साबित किया जाए, लेकिन मैंने एक ब्रूट-फॉरेसर लिखा है जिसमें 100 मिलियन के नीचे कोई भी विफलता नहीं मिलती है।
ETHproductions

2

Japt , 8 बाइट्स

बंद सूत्र समाधान।

*8Ä ¬É z

कोशिश करो


व्याख्या

8 से गुणा करें, 1 जोड़ें ( Ä), वर्गमूल प्राप्त करें ( ¬), 1 घटाएं ( É) और फर्श 2 से परिणाम को विभाजित करें ( z)।


वैकल्पिक, 8 बाइट्स

DJMcMayhem के जेली समाधान का पोर्ट ।

õ å+ è§U

कोशिश करो

õ1 से इनपुट तक पूर्णांक ( ) की एक सरणी उत्पन्न करें , åइसके अलावा ( +) और गिनती ( è) §इनपुट ( U) से कम या बराबर होने वाले तत्वों को कम ( ) करें।



2

ब्रेन-फ्लैक , 70 56 48 बाइट्स

{([(({}[({}())()])[()])]<>){<>({}())}{}<>{}}<>{}

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

व्याख्या

इसका मुख्य भाग निम्नलिखित स्निपेट है जो मैंने लिखा है:

([(({})[()])]<>){<>({}())}{}<>{}

यह कुछ नहीं करेगा यदि टीओएस पॉजिटिव है और स्टैक को अन्यथा स्विच करेगा। यह सुपर स्टैक अशुद्ध है लेकिन यह काम करता है। अब प्रोग्राम का मुख्य हिस्सा इनपुट से बड़ी संख्या में घटता है जब तक कि इनपुट नॉन-पॉजिटिव न हो। हम 1 से हर बार संचायक को शुरू करते हैं, इनपुट से संचायक की तुलना में 1 अधिक घटाते हैं।

({}[({}())()])

हम ऊपर स्निपेट के अंदर रख सकते हैं

([(({}[({}())()])[()])]<>){<>({}())}{}<>{}

यह एक लूप में रखा जाता है ताकि यह तब तक निष्पादित हो जब तक हम ढेर को स्विच न करें। एक बार जब लूप खत्म हो जाता है तो हम स्टैक को स्विच करके और रद्दी को हटाकर संचायक को पुनः प्राप्त करते हैं।



2

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

lh{I#./

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

पूर्णांक विभाजन को फ़िल्टर करें-जो Iसमर्पण से अधिक भिन्न होते हैं , head को पकड़ते हैं और इसके उत्कीर्णन को प्राप्त करते हैं l

वैधता प्रमाण

न बहुत कठोर और न ही अच्छी तरह से शब्द।

चलो एक = एक 1 + एक 2 + ... + एक एन और बी = बी 1 + बी 2 + ... + ख मीटर ही पूर्णांक के दो अलग विभाजन होना एन । हम मान लेंगे कि एक है सबसे लंबे समय तक अद्वितीय विभाजन। जब हम B को घटाते हैं , यानी एक ही पूर्णांक के कई आवृत्तियों को उनमें से केवल एक के साथ प्रतिस्थापित करते हैं, तो हम जानते हैं कि B का योग N से कम है । लेकिन हम यह भी जानते हैं कि फ़ंक्शन परिणाम बढ़ रहा है (गैर-कड़ाई से), इसलिए हम सबसे लंबे समय तक अनूठे विभाजन को घटा सकते हैं हमेशा अन्य विभाजनों में अद्वितीय वस्तुओं की गिनती के रूप में कम से कम तत्वों की मात्रा होती है।


2

त्रिकोणीयता , 49 बाइट्स

....)....
...2)2...
..)1/)8..
.)1/)IE/.
@^)1_+/i.

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

यह काम किस प्रकार करता है

त्रिकोणीयता को डॉट्स के त्रिकोणीय वितरण के लिए कोड की आवश्यकता होती है। यही है, प्रत्येक पंक्ति की लंबाई 2 से गुणा की गई पंक्तियों की संख्या के बराबर होनी चाहिए और घटती है, और प्रत्येक पंक्ति के पास (प्रत्येक तरफ) प्रोग्राम में इसकी स्थिति के बराबर डॉट्स की एक संख्या होनी चाहिए (नीचे की पंक्ति पंक्ति 0 है,) यह ऊपर वाला पंक्ति 1 है और आगे)। केवल कुछ आदेश हैं, और 'विकी / कमांड्स' पृष्ठ पर सूचीबद्ध लोगों के अलावा किसी भी चरित्र को नो-ऑप माना जाता है (एक्सट्रॉनिक डॉट्स प्रोग्राम को किसी भी तरह से प्रभावित नहीं करते हैं, जब तक कि समग्र आकार नहीं मिलता है। कार्यक्रम आयताकार रहता है)।

ध्यान दें कि दो-तर्क आदेशों के लिए, मैंने स्पष्टीकरण में और बी का उपयोग किया है । इसे ध्यान में रखते हुए, आइए देखें कि पैडिंग के लिए बनाने वाले सभी बाहरी वर्णों को हटाने के बाद वास्तविक कार्यक्रम क्या करता है:

)2)2)1/)8)1/)IE/@^)1_+/i | Input from STDIN and output to STDOUT.

)                        | Push a 0 onto the stack. Must precede integer literals.
 2                       | Push ToS * 10 + 2 (the literal 2, basically).
  )2                     | Again, push a 2 onto the stack. This can be replaced by D
                         | (duplicate), but then the padding would discard the saving.
    )1                   | Literal 1.
      /                  | Division. Push b / a (1 / 2).
       )8)1              | The literal 8 and the literal 1 (lots of these!).
           /             | Division. Push b / a (1 / 8).
            )IE          | Get the 0th input from STDIN and evaluate it.
               /         | Divide it by 1 / 8 (multiply by 8, but there isn't any
                         | operand for multiplication, and I'm not willing to add one).
                @        | Add 1 to the result.
                 ^       | Exponentiation. Here, it serves as a square too.
                  )1_+   | Decrement (add literal -1).
                      /  | Divide (by 2).
                       i | Cast to an integer.

एक वैकल्पिक समाधान, और यदि पैडिंग आवश्यक नहीं है तो कम:

....)....
...2)1...
../DD)I..
.E/)4)1/.
+^s_+i...

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


2

पावरशेल 3.0, 45 बाइट्स

[math]::Sqrt(2*$args[0]+.25)-.5-replace'\..*'

गणित कॉल को चोट लगी है और PS के बैंकर की गोलाई वास्तविक शैतान है (इसलिए बाइट को बचाने के लिए regex को छोटा करना आवश्यक है) लेकिन यह बहुत ठीक लगता है।


2

जावा (JDK) , 28 बाइट्स

n->~-(int)Math.sqrt(8*n+1)/2

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

क्योंकि उदाहरण वास्तव में अच्छी तरह से गोल्फ नहीं था: पी

क्रेडिट


1
28 बाइट्स " क्योंकि आपका कोड वास्तव में अच्छी तरह से गोल्फ नहीं था "; पी
केविन क्रूज़सेन

@ केविनक्रूजसेन खैर, अब यह है! : ओ
ओलिवियर ग्रेजायर

1

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

ŒPfŒṗṪL

मोटे तौर पर O (2 n ) समय में चलता है ।

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

यह काम किस प्रकार करता है

ŒPfŒṗṪL  Main link. Argument: n

ŒP       Powerset; yield all subarrays of [1, ..., n], sorted by length.
   Œṗ    Yield all integer partitions of n.
  f      Filter; keep subarrays that are partitions.
     Ṫ   Tail; extract the last result.
      L  Compute its length.

1

जावास्क्रिप्ट (ईएस 7), 22 19 बाइट्स

n=>(8*n+1)**.5-1>>1

-3 बाइट्स ETHproductions के लिए धन्यवाद।


कोशिश करो

o.innerText=(f=
n=>(8*n+1)**.5-1>>1
)(i.value=1000000000);oninput=_=>o.innerText=f(+i.value)
<input id=i type=number><pre id=o>


व्याख्या

इनपुट को 8 से गुणा करें और 1 जोड़ें, .5 की शक्ति को बढ़ाएं, हमें वर्गमूल देते हुए, 1 घटाएं और परिणाम को 1 से ठीक करें।


क्या आप एक स्पष्टीकरण शामिल कर सकते हैं? मैंने थोड़ी देर में जावास्क्रिप्ट नहीं किया है
FantaC

कैसे n=>(8*n+1)**.5-1>>13 बाइट बचाने के लिए डटकर ? (परीक्षण नहीं किया गया)
ETHproductions

मैंने इसे JS में कोडित किया: codegolf.stackexchange.com/a/152558/21830
Unihedron

@ETHproductions - ऐसा काम करता है, धन्यवाद।
झबरा

@tfbninja, मैंने सोचा है कि काफी आत्म-व्याख्यात्मक लेकिन स्पष्टीकरण जोड़ा जाएगा।
झबरा

1

पायथन 2/3, 32 बाइट्स

बंद फार्मूले का पायथन कार्यान्वयन

lambda n:int((sqrt(1+8*n)-1)//2)

पूर्णांक विभाजन //2शून्य की ओर घूमता है, इसलिए कोई floor( )आवश्यकता नहीं है


1
PPCG में आपका स्वागत है! क्या इसके from math import sqrtलिए काम करने की जरूरत है? यदि हां, तो इसे बायटेकाउंट में शामिल किया जाना चाहिए। (उस मामले lambda n:int((math.sqrt(1+8*n)-1)//2) import math में थोड़ा कम है। )
स्टेडीबॉक्स


हां, इसे काम करने के लिए आयात की आवश्यकता है, इसलिए इसे बाइट की गिनती में शामिल किया जाना चाहिए।
mbomb007

1

हास्केल , 28 बाइट्स

Kinda उबाऊ, लेकिन यह अन्य हास्केल समाधान की तुलना में काफी कम है और वास्तव में एक अच्छा पॉइंटफ्री अभिव्यक्ति है। दुर्भाग्य से मैं इसे टाइप सिस्टम के बिना किसी भी छोटे से प्राप्त नहीं कर सका:

g x=floor$sqrt(2*x+0.25)-0.5

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

पॉइंटफ्री, 33 बाइट्स

ceiling.(-0.5+).sqrt.(0.25+).(2*)

वैकल्पिक रूप से, 33 बाइट्स

पॉइंटफ्री संस्करण के रूप में एक ही लंबाई, लेकिन बहुत अधिक दिलचस्प।

g n=sum[1|x<-scanl1(+)[1..n],n>x]

मैंने कुछ गूंगी गलतियों को ठीक करके सूत्र को बांधने में कामयाब रहा !
अमानवीय

@totallyhuman: अच्छा, अब आपका भी बहुत अच्छा है :)
'

1

मिल्की वे , 12 बाइट्स

'8*1+g1-2/v!

व्याख्या

code         explanation       value

'            push input        n          
 8*          push 8, multiply  8n
   1+        add 1             8n+1
     g       square root       sqrt(8n+1)
      1-     subtract 1        sqrt(8n+1)-1
        2/   divide by 2       (sqrt(8n+1)-1)/2
          v  floor             floor((sqrt(8n+1)-1)/2)
           ! output

1

पाइट , 5 बाइट्स

Đř△>Ʃ

स्पष्टीकरण:

                      Implicit input
Đř△                   Gets a list of the first N triangle numbers
   >                  Is N greater than each element in the list? (returns an array of True/False)
    Ʃ                 Sums the list (autoconverts booleans to ints)



तेज़, लेकिन लंबा रास्ता

पाइट , 11 9 बाइट्स

Đ2*√⌈ř△>Ʃ

स्पष्टीकरण:

Đ2*√⌈ř△           Gets a list of triangle numbers up to the ceiling(sqrt(2*N))-th
       >          Is N greater than each element of the list? (returns an array of True/False)
        Ʃ         Sums the array



वैकल्पिक तरीका - का बंदरगाह झबरा के उत्तर का

Pyt , 8 7 बाइट्स

8*⁺√⁻2÷


1

व्हॉट्सएप , 111 बाइट्स

[S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_integer_from_STDIN][T T   T   _Retrieve_input][S S S T    S S S N
_Push_8][T  S S N
_Multiply][S S S T  N
_Push_1][T  S S S _Add][S S T   T   N
_Push_n=-1][N
S S N
_Create_Label_SQRT_LOOP][S S S T    N
_Push_1][T  S S S _Add][S N
S _Duplicate_n][S N
S _Duplicate_n][T   S S N
Multiply][S T   S S T   S N
_Copy_0-based_2nd_(the_input)][S S S T  N
_Push_1][T  S S S _Add][T   S S T   _Subtract][N
T   T   N
_If_negative_jump_to_Label_SQRT_LOOP][S S S T   S N
_Push_2][T  S S T   _Subtract][S S S T  S N
_Push_2][T  S T S _Integer_divide][T    N
S T _Print_integer]

पत्र S(स्थान), T(टैब), औरN (नई-पंक्ति) केवल हाइलाइटिंग के रूप में जोड़े गए।
[..._some_action]केवल स्पष्टीकरण के रूप में जोड़ा गया।

इसे ऑनलाइन आज़माएँ (कच्चे स्थान, टैब और नई-नई लाइनों के साथ)।

छद्म कोड में स्पष्टीकरण:

सूत्र का उपयोग करता है:

n=8n+1-12

नोट: व्हॉट्सएप के पास वर्गाकार रूट नहीं है, इसलिए हमें इसे मैन्युअल रूप से करना होगा।

Integer i = read STDIN as integer
i = i * 8 + 1
Integer n = -1
Start SQRT_LOOP:
  n = n + 1
  If(n*n < i+1):
    Go to next iteration of SQRT_LOOP
n = (n - 2) integer-divided by 2
Print n as integer to STDOUT


0

शाद्वल , 14 बाइट्स

n8*1+1tm1%_b+0

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

कैसे?

n8*1+           8n + 1
     1tm        sqrt
        1%_     integer?
           b+   add f(n-1)

             0  f(0) is 0

यह एक पुनरावर्ती समाधान है जो परिणाम को बढ़ाता है जब यह त्रिकोणीय सूचकांक का सामना करता है, इनपुट 0 के लिए 0 से शुरू होता है।



0

माणिक , 27 बाइट्स

एक की कीमत के लिए तीन। मैं निराश हूं कि मैं छोटा नहीं हो सकता।

->n{a=0;n-=a+=1while n>a;a}
->n{((8*n+1)**0.5-1).div 2}
->n{((n-~n)**0.5-0.5).to_i}

इसे ऑनलाइन आज़माएं! (फ़ंक्शन का चयन करने के लिए, उसके सामने f = जोड़ें)

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