सबसे कम संख्या की गणना करें जहां संख्याओं के अनुक्रम का योग किसी दिए गए मान से अधिक है


14

यह देखते हुए कि आपके पास संख्याओं का अनंत क्रम निम्नानुसार है:

1: 1 = 1
2: 1 + 2 = 3
3: 1 + 3 = 4
4: 1 + 2 + 4 = 7
5: 1 + 5 = 6
6: 1 + 2 + 3 + 6 = 12
7: 1 + 7 = 8
...

अनुक्रम n1 और सहित के विभाजकों का योग है n

xइनपुट के रूप में एक सकारात्मक पूर्णांक को देखते हुए , सबसे कम संख्या की गणना करें nजो परिणाम से अधिक उत्पन्न करेगा x

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

f(100) = 48, ∑ = 124
f(25000) = 7200, ∑ = 25389
f(5000000) = 1164240, ∑ = 5088960

अपेक्षित उत्पादन

आपके कार्यक्रम को दोनों n और उसके विभाजकों के योग को वापस करना चाहिए , जैसे:

$ ./challenge 100
48,124

नियम

यह कोड-गोल्फ है इसलिए बाइट्स में सबसे छोटा कोड है, प्रत्येक भाषा में जीतता है।


4
क्या यह क्रम सिर्फ nविभाजकों का योग है ? आप शायद यह स्पष्ट रूप से बताना चाहते हैं।
मार्टिन एंडर

3
इसके अलावा, आपके "अपेक्षित आउटपुट" को देखते हुए आप दोनों चाहते हैं n और f(n) , लेकिन आप विनिर्देश में कहीं भी ऐसा नहीं कहते हैं।
मार्टिन एंडर

2
बोनस खराब हैं , खासकर जब वे अस्पष्ट हैं। मैंने इसे हटाने का फ़ैसला किया, ताकि इसे ख़राब होने से बचाया जा सके।
श्री एक्सकोडर

2
आप जाँच कर सकते हैं f(1000) = 48? का भाजक योग 48है124
caird coinheringaahing

3
उत्तर स्वीकार करने से कम से कम एक सप्ताह पहले प्रतीक्षा करना अच्छा है, अन्यथा आप नए समाधानों को हतोत्साहित कर सकते हैं।
जगरब

जवाबों:


8

ब्रेकीलॉग , 9 बाइट्स

∧;S?hf+S>

यह कार्यक्रम "आउटपुट चर" से इनपुट लेता है ., और आउटपुट "इनपुट चर" के लिए ?इसे ऑनलाइन आज़माएं!

व्याख्या

∧;S?hf+S>
∧;S        There is a pair [N,S]
   ?       which equals the output
    h      such that its first element's
     f     factors'
      +    sum
       S   equals S,
        >  and is greater than the input.

अंतर्निहित चर Nको बढ़ते क्रम में गणना की जाती है, इसलिए इसका सबसे कम कानूनी मूल्य आउटपुट के लिए उपयोग किया जाता है।


10

जेली , 18 12 11 10 बाइट्स

1Æs>¥#ḢṄÆs

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

-1 बाइट मिस्टर एक्सकोडर की बदौलत !

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

1Æs>¥#ḢṄÆs - Main link. Argument: n (integer)
1   ¥#     - Find the first n integers where...
 Æs        -   the divisor sum
   >       -   is greater than the input
       Ṅ   - Print...
      Ḣ    -   the first element
        Æs - then print the divisor sum

क्या आप बता सकते हैं कि क्यों 1आवश्यक है और कैसे ¥कार्य करता है?
डायलाॅन

1
@dylnan 1 से गिनती शुरू करने के लिए 1कहता #है और ¥पिछले दो लिंक ( Æsऔर >) लेता है और उन्हें एक डाईएड के रूप में लागू करता है (यानी दो तर्कों के साथ), बाएं तर्क के साथ पुनरावृत्ति होती है, और सही तर्क इनपुट होता है।
caird coinheringaahing

ओह, यह अब समझ में आता है। #कुछ मामलों में मुझसे पहले थोड़ा भ्रमित था।
बजे

4

वोल्फ्राम भाषा (गणितज्ञ) , 53 बाइट्स

{#,f@#}&@@Select[Range[x=#]+1,(f=Tr@*Divisors)@#>x&]&

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

2 और x + 1 के बीच सभी मानों को लेता है, जहां x इनपुट है।

(उन Selectसभी मूल्यों की सूची देता है जो काम करते हैं, लेकिन फ़ंक्शन {#,f@#}&इन सभी को इनपुट के रूप में लेता है, और फिर इसके सभी प्रयोगों को अनदेखा करता है लेकिन पहले।)



4

भूसी , 12 11 बाइट्स

§eVḟ>⁰moΣḊN

-1 बाइट, @Zbb को धन्यवाद!

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


चतुर! अजीब हालांकि ,काम नहीं करता (या अनुमान बहुत लंबा लगता है?)।
21

यह एक प्रकार का अनुमान लगाता है, लेकिन एक अनंत सूची का उत्पादन करता है। यह but के अतिभार के कारण हो सकता है जो दूसरे तर्क के रूप में पूर्णांक लेता है, लेकिन यह केवल एक अनुमान है।
ज़गारब


4

जाप , 15 बाइट्स

[@<(V=Xâ x}a V]

कोशिश करो


व्याख्या

पूर्णांक का निहित इनपुट U[]हमारे सरणी आवरण है। पहले तत्व के लिए, @ }aएक फ़ंक्शन होता है जो तब तक लगातार चलता है जब तक कि यह एक सत्य मान नहीं देता है, हर बार एक वृद्धि पूर्णांक (0 से शुरू) और उस पूर्णांक के अंतिम मान को आउटपुट करने के लिए। âवर्तमान पूर्णांक ( X) का विभाजक प्राप्त करता है , xउन्हें रकम देता है और उस परिणाम को चर को सौंपा जाता है V। से कम है <तो जाँच करें । सरणी में दूसरा तत्व तो बस है ।UVV


4

क्लोजर , 127 बाइट्स

(defn f[n](reduce +(filter #(zero?(rem n %))(range 1(inc n)))))
(defn e[n](loop[i 1 n n](if(>(f i)n){i,(f i)}(recur(inc i)n))))

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

-4 बाइट्स के लिए @steadybox को धन्यवाद!


1
साइट पर आपका स्वागत है!
15:31 बजे caird coinheringaahing

कुछ बाइट्स को बचाने के लिए कुछ व्हाट्सएप को हटाया जा सकता है। इसे ऑनलाइन आज़माएं!
स्टेडियोबॉक्स

इस मामले में इसके reduceद्वारा प्रतिस्थापित किया जा सकता है apply, साथ ही फ़ंक्शन eको #(...)सिंटैक्स के माध्यम से एक अनाम फ़ंक्शन के रूप में व्यक्त किया जा सकता है , आपको इसे कोड गोल्फ में नाम देने की आवश्यकता नहीं है। #(=(rem n %)0)से छोटा है #(zero?(rem n %))। और याद रखें कि ,यह व्हाट्सएप है, और इस मामले में इसे हटाया जा सकता है क्योंकि यह इसके बाद है (, इसलिए इसे सही ढंग से पार्स किया जाएगा।
निकोनिरह

@NikoNyrh एक साथी क्लॉजिस्ट से मिलकर अच्छा लगा, मैं जल्द ही इस पोस्ट को संपादित
करूंगा

3

रूबी , 58 बाइट्स

पूर्ण कार्यक्रम क्योंकि मुझे यकीन नहीं है कि अगर लंबोदर की अनुमति है। / कंधे उचकाने की क्रिया

gets
$.+=1until$_.to_i.<v=(1..$.).sum{|n|$.%n<1?n:0}
p$.,v

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

व्याख्या

gets     # read line ($_ is used instead of v= because it cuts a space)
$.+=1    # $. is "lines read" variable which starts at 1 because we read 1 line
    until     # repeat as long as the next part is not true
$_.to_i  # input, as numeric
  .<v=   # is <, but invoked as function to lower operator prescedence
  (1..$.)        # Range of 1 to n
  .sum{|n|       # .sum maps values into new ones and adds them together
     $.%n<1?n:0  # Factor -> add to sum, non-factor -> 0
  }
p$.,v    # output n and sum

3
लैम्ब्डा निश्चित रूप से अनुमति दी जाती है।
ग्यूसेप

3

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

f=(n,i=1,s=j=0)=>j++<i?f(n,i,i%j?s:s+j):s>n?[i,s]:f(n,++i)
<input type=number min=0 oninput=o.textContent=f(this.value)><pre id=o>

संपादित करें: @Arnauld के लिए 3 बाइट्स सहेजे गए।


मुझे "स्क्रिप्ट त्रुटि" मिलती है। जब 545 से अधिक मान इनपुट कर रहे हैं
StudleyJr 16

सफारी का उपयोग करने की कोशिश करें; स्पष्ट रूप से यह टेल कॉल ऑप्टिमाइज़ेशन का समर्थन करता है। (या यदि आप उन्हें पा सकते हैं, तो क्रोम के कुछ संस्करण इसे "प्रायोगिक जावास्क्रिप्ट सुविधाओं" के माध्यम से सक्षम करते हैं।)
नील

3

05AB1E , 11 बाइट्स

>LʒÑO‹}нDÑO

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

स्टैक पर आउटपुट छोड़ता है, जैसा कि मेटा सर्वसम्मति के अनुसार अनुमति देता है । मैंने )विज़ुअलाइज़ेशन के लिए जोड़ा , लेकिन कार्यक्रम में भी स्टैक के शीर्ष को स्पष्ट रूप से प्रिंट किया गया है।





2

MATL , 12 बाइट्स

`@Z\sG>~}@6M

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

व्याख्या

`      % Do...while
  @    %   Push iteration index (1-based)
  Z\   %   Array of divisors
  s    %   Sum of array
  G    %   Push input
  >~   %   Greater than; logical negate. This is the loop condition
}      % Finally (execute on loop exit)
  @    %   Push latest iteration index
  6M   %   Push latest sum of divisors again
       % End (implicit). Run new iteration if top of the stack is true
       % Display stack (implicit)

2

गैया , 11 बाइट्स

dΣ@>
↑#(:dΣ

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

स्टैक पर आउटपुट छोड़ता है, जैसा कि मेटा सर्वसम्मति के अनुसार अनुमति देता है । मैंने €.विज़ुअलाइज़ेशन के लिए जोड़ा , लेकिन कार्यक्रम में भी स्टैक के शीर्ष को स्पष्ट रूप से प्रिंट किया गया है।




2

कारक ,,

USE: math.primes.factors [ 0 0 [ drop 1 + dup divisors sum pick over > ] loop rot drop ]

जानवर बल खोज। यह एक उद्धरण (लैम्ब्डा) है, callयह xस्टैक, पत्तियों nऔर f(n)स्टैक पर है।

एक शब्द के रूप में:

: f(n)>x ( x -- n f(n) )
  0 0 [ drop 1 + dup divisors sum pick over > ] loop rot drop ;

2

पायथन 3, 163 बाइट्स

def f(x):
    def d(x):return[i for i in range(1,x+1) if x%i==0]
    return min(i for i in range(x) if sum(d(i)) >x),sum(d(min(i for i in range(x) if sum(d(i)) >x)))

3
नमस्कार और पीपीसीजी में आपका स्वागत है; अच्छी पहली पोस्ट! एक गोल्फ पहलू से, आप कुछ बाइट्स को व्हाट्सएप को हटाकर, लैम्ब्डा कार्यों का उपयोग करके, एक पंक्ति में सब कुछ ढहने से बचा सकते हैं और खुद को दोहरा नहीं सकते। हम आम तौर पर एक ऑनलाइन परीक्षण वातावरण से भी जुड़ते हैं, उदाहरण के लिए टीआईओ ( 105 बाइट्स , ऊपर वर्णित तकनीकों का उपयोग करके।)
जोनाथन फ्रेच

@JonathanFrech: उत्कृष्ट टिप्पणी। सामान्य रूप से और noobविशेष रूप से noobies के साथ अपने धैर्य के लिए धन्यवाद ;)
एरिक डुमिनील

2

पायथन 3 , 100 बाइट्स

d=lambda y:sum(i+1for i in range(y)if y%-~i<1)
f=lambda x:min((j,d(j))for j in range(x+1)if x<=d(j))

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

पिछले अजगर 3 प्रयास पर जोनाथन फ्रेच की टिप्पणी के लिए धन्यवाद , मैंने अभी-अभी अजगर सिंटैक्स के अपने ज्ञान का विस्तार किया है। मैंने कभी नहीं सोचा था कि - i + 1 चाल के लिए ~ i, जो दो वर्णों को बचाता है।

हालाँकि, यह उत्तर 1) न्यूनतम नहीं है और 2) x = 1 के लिए काम नहीं करता है (ऑफ-वन-वन त्रुटि के कारण जो संक्षिप्तता के लिए जाना आसान है; मैं सुझाव देता हूं कि बाकी सभी इस किनारे के लिए अपने उत्तर की जांच करें; मामला!)।

त्वरित स्पष्टीकरण: sum(i+1for i in range(y)if y%-~i<1)के बराबर है, sum(i for i in range(1,y+1)if y%i<1)लेकिन दो पात्रों को बचाता है। फिर से मिस्टर फ्रेश का धन्यवाद।

d=lambda y:sum(i+1for i in range(y)if y%-~i<1) इसलिए y के भाजक लौटाता है।

f=lambda x:min((j,d(j))for j in range(x+1)if x<=d(j))वह जगह है जहाँ मैंने वास्तव में काम किया है। चूंकि शब्दकोश क्रम में एक टपल काम की तुलना करते हुए, हम जम्मू, डी (जे) की तुलना आसानी से कर सकते हैं क्योंकि हम जे की तुलना कर सकते हैं, और इससे हमें न्यूनतम जे को खोजने की जरूरत नहीं है, इसे एक चर में संग्रहीत किया जा सकता है, और / फिर / गणना करें एक अलग ऑपरेशन में टपल। इसके अलावा, हमारे पास <=, नहीं <, में है x<=d(j), क्योंकि d (1) 1 है तो यदि x 1 है तो आपको कुछ नहीं मिलता है। यह भी है कि हमें इसकी आवश्यकता क्यों है range(x+1)और क्या नहीं range(x)

मैं पहले tuple वापस आ गया था, लेकिन फिर मुझे इसे f में सब्स्क्राइब करना होगा, ताकि तीन और अक्षर लगें।


1
साइट पर आपका स्वागत है और अच्छी पहली पोस्ट। अनाम कार्यों को हटाकर आप 98 बाइट्स प्राप्त कर सकते हैं f=यहां पूरी तरह से स्वीकार्य हैं!
caird coinheringaahing

आप कोड की किसी अन्य पंक्ति से एक अनाम फ़ंक्शन को कॉल नहीं कर सकते, समस्या है - मेरे पास एक अलग प्रिंट (एफ (100)) स्टेटमेंट है जो यह परीक्षण करने के लिए फ़ंक्शन काम करता है।
माइकल बोगर

वह यहां कोई समस्या नहीं है। यह पूरी तरह से स्वीकार्य है और f=आपके बाइट की गिनती में शामिल नहीं है , और पायथन में गोल्फ के लिए एक अच्छा तरीका है। पायथन में अधिक गोल्फिंग टिप्स के लिए इसे देखें !
caird coinheringaahing

हम्म। मैं बराबर हो सकता हूं, लेकिन बेहतर नहीं, मेरे मौजूदा उदाहरणों के साथ जोड़कर q=rangeऔर बदलकर मेरा सबमिशन । अफसोस की बात यह है कि इसमें कोई सुधार नहीं हुआ है और चूँकि लैम्ब्डा एक ऐसा कीवर्ड है जिसका उपयोग मैं इसके लिए नहीं कर सकता, इसलिए मुझे कई पात्रों को बर्बाद करने के लिए निष्पादन () ट्रिक्स करना होगा। rangeq
माइकल बोगर

@MichaelBoger खैर, आप पायथन में एक गुमनाम समारोह कह सकते हैं ; लैम्ब्डा एक्सप्रेशन को एक वैरिएबल को असाइन करने की आवश्यकता नहीं है।
जोनाथन फ्रीच

2

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

def f(n):
 a=b=0
 while b<n:
	a+=1;i=b=0
	while i<a:i+=1;b+=i*(a%i<1)
 return a,b

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



टैब को दो स्थानों से बदलने से यह कार्य 83 बाइट्स में पायथन 3 में होता है, हालांकि इसे आजमाने के लिए मुझे प्रिंट स्टेटमेंट में कोष्ठक लगाना पड़ा। आप रिटर्न स्टेटमेंट को प्रिंट स्टेटमेंट से भी बदल सकते हैं और इसे प्रिंट करने के लिए सहायक फ़ंक्शन की आवश्यकता नहीं है; बाइट्स वही रहते हैं।
माइकल बोगर



0

क्लोजर, 102 बाइट्स

#(loop[i 1](let[s(apply +(for[j(range 1(inc i)):when(=(mod i j)0)]j))](if(> s %)[i s](recur(inc i)))))


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