मैं चाहता हूं कि मेरी पुस्तक इस तालिका से दूर हो


21

कहानी

इसलिए मेरे पास एक ऐसी किताब है जिसे मैं अपनी किताबों के अलावा दूसरी किताबों से अलग करना चाहता हूं। मैं जानना चाहता हूं कि पुस्तक की लंबाई के साथ मुझे इसे प्राप्त करने के लिए कितनी पुस्तकों की आवश्यकता है ।n

यहाँ एक दृश्य है कि वुल्फराम में मेरे दोस्त ने मेरे लिए आकर्षित किया:

वुल्फराम से एक दृश्य

वुल्फ्राम और विकिपीडिया में विषय के बारे में अधिक जानकारी ।

चुनौती

यह देखते हुए एक पूर्णांक इनपुट , उत्पादन कितनी पुस्तकें शीर्ष पुस्तक के लिए आवश्यक होने के लिए क्षैतिज किताब लंबाई टेबल से दूर। या निम्न असमानता में इनपुट लिए का सबसे छोटा पूर्णांक मान ज्ञात कीजिए। nn

मीटरn

Σमैं=1मीटर12मैंn

संपादित करें: भिन्न के लिए कम से कम एक IEEE एकल-सटीक फ़्लोटिंग बिंदु का उपयोग करें। पोस्टिंग के बाद संपादन चुनौती के लिए खेद है

( OEIS A014537 )

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

 1          4
 2         31
 3        227
 5      12367
10  272400600


क्या यह पुस्तकों की इस विशेष व्यवस्था का उपयोग करना है , जो IIRC इष्टतम नहीं है?
user253751

जवाबों:


13

ऑक्टेव , 41 40 33 बाइट्स

1 बाइट ने @ डेनिस को धन्यवाद दिया

@(n)find(cumsum(.5./(1:9^n))>n,1)

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

व्याख्या

यह इस तथ्य का उपयोग करता है कि हार्मोनिक संख्या एक लॉगरिदमिक फ़ंक्शन द्वारा कम-बाध्य हो सकती है।

इसके अलावा, >=तुलना द्वारा प्रतिस्थापित किया जा सकता है >क्योंकि हार्मोनिक संख्या पूर्णांक भी नहीं हो सकती (धन्यवाद, @ डेनिस!)।

@(n)                                   % Anonymous function of n
                     1:9^n             % Range [1 2 ... 9^n]
                .5./(     )            % Divide .5 by each entry
         cumsum(           )           % Cumulative sum
                            >n         % Is each entry greater than n?
    find(                     ,1)      % Index of first true entry


10

भूसी , 8 बाइट्स

V≥⁰∫m\İ0

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

चूंकि हस्क तर्कसंगत संख्याओं का उपयोग करता है जब यह कर सकता है, इसमें कोई फ़्लोटिंग पॉइंट समस्याएँ नहीं हैं

व्याख्या

      İ0    The infinite list of positive even numbers
    m\      Reciprocate each
   ∫        Get the cumulative sum
V           Find the index of the first element
 ≥⁰         that is greater than or equal to the input

8 बाइट्स, लेकिन किस चारसेट में?
जॉन १६३ 27४

3
@ john16384 हस्क के पास अपना स्वयं का कोडपेज है जहां प्रत्येक प्रतीक एक सिंगल बाइट से मेल खाता है। यहाँ पर हेक्सडंप
H.PWiz





3

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

n=>eval("for(i=0;n>0;n-=.5/i)++i")

Ungolfed

n => {
    for(i = 0; n > 0; ++i)
        n -= .5 / i
    return i;
}

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


30 बाइट्स के लिए पुनरावृत्ति का उपयोग करके एक समान समाधान के साथ आया था। दुन्नो इसे देखने के बाद, इसे पोस्ट करें या नहीं।
झबरा

1
मुझे कुछ याद आ रहा है, लेकिन आपको इसे एक evalबयान में लपेटने की आवश्यकता क्यों है ?
केयर्ड सिक्काहिंगाहिंग

1
@cairdcoinherigaahing, बिना चर करने की आवश्यकता होगी , अंत में एड कुछ और बाइट्स की क्षति उठानी पड़ी। evalireturn
झबरा २


2

हास्केल, 71 49 48 बाइट्स

f x=length.fst.span(<x).scanl(+)0$(0.5/)<$>[1..]

@BMO ने मुझे 22 बाइट्स से बचाया!



2

टीआई-बेसिक, 27 बाइट्स

इनपुट के लिए उपयोगकर्ता को संकेत देता है और समाप्ति पर आउटपुट प्रदर्शित करता है। नोट: ⁻¹है -1 (उलटा) टोकन।

Input N
1
Repeat 2N≤Σ(I⁻¹,I,1,Ans
Ans+1
End
Ans

2
यदि आप तुरंत Ansमें सहेजने जा रहे हैं N, तो Input Nया Prompt Nएक इनपुट विधि है जो आपको एक बाइट बचाती है Ans→N। और Mद्वारा प्रतिस्थापित किया जा सकता है Ans, ताकि वह 1→Mबन जाए 1और M+1→Mबन जाए Ans+1। (लेकिन मैं में एक निर्गम के बारे में उलझन में हूँ Ansप्रदर्शित हो यह नहीं है कि - देखना यह - तो शायद के साथ समाप्त :Ansउचित है। उसके बाद मूल्य का "हो गया" जगह में दिखाया जाएगा)
Misha लावरोव

धन्यवाद! मुझे पता था कि Ans→Nयह मजाकिया है। अच्छा अनुकूलन। साथ ही सुरक्षित होने के लिए आउटपुट पर आपकी सलाह ली। अभी भी नेट -3 बाइट्स के साथ बाहर आता है: D
kamoroso94



1

जाप , 12 बाइट्स

के रूप में एक ही लंबाई, लेकिन पुनरावर्ती विकल्प की तुलना में थोड़ा अधिक कुशल।

@T¨(Uµ½÷X}a1

कोशिश करो


व्याख्या

@T¨(Uµ½÷X}a1
                 :Implicit input of integer U
@        }a1     :Return the first number X >=1 that returns truthy when passed through the following function
 T               :Zero
  ¨              :Greater than or equal to
    Uµ           :Decrement U by...
      ½÷X        :0.5 divided by X

1

जे, 22 बाइट्स

-6 बाइट्स frownyfrog के लिए धन्यवाद

I.~0+/\@,1%2*1+[:i.9&^

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

मूल उत्तर

जे में लुइस का जवाब:

1+]i.~[:<.[:+/\1%2*1+[:i.9&^

Ungolfed

1 + ] i.~ [: <. [: +/\ 1 % 2 * 1 + [: i. 9&^

ज्यादातर यह देखने के लिए उत्सुक हैं कि क्या यह काफी सुधार किया जा सकता है ( खांसी पेजिंग मील)

व्याख्या

1 +      NB. 1 plus... 
] i.~    NB. find the index of the arg in...
[: <.    NB. the floor of...
[: +/\   NB. the sumscan of...
1 %      NB. the reciprical of...
2 *      NB. two times...
1 +      NB. 1 plus...
[: i.    NB.  the integers up to 
9&^      NB. 9 raised to the power of the arg

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


1+]i.~[:<.-> 1+]I.~->I.~0,
FrownyFrog

ओएफसी! धन्यवाद frownyfrog
जोनाह

और फिरI.~0+/\@,
FrownyFrog

यदि आप संपादित करते हैं, तो आप जूलिया को हरा देंगे :)
FrownyFrog

@FrownyFrog, किया। यदि आपके पास कुछ समय है, तो मैं आपको यह देखना पसंद करूंगा : codegolf.stackexchange.com/questions/154345/bracket-expansion । सभी उपाय जो मैं सोच सकता हूं, वे अच्छे विवेक में पोस्ट करने के लिए बहुत ही क्रियाशील हैं ...
योना

0

PHP, 35 बाइट्स

while($argv[1]>$s+=.5/++$i);echo$i;

CLI का उपयोग करके इसे चलाएं:

$ php -d error_reporting=0 -r 'while($argv[1]>$s+=.5/++$i);echo$i;' 5


0

जावा 8, 49 बाइट्स

n->{float r=0,s=0;for(;s<n;)s+=.5f/++r;return r;}

स्पष्टीकरण:

इसे ऑनलाइन आज़माएं। (ऊपर दिए गए परीक्षण मामलों के लिए समय निकालें n=7।)

n->{             // Method with integer parameter and float return-type
  float r=0,     //  Result-float, starting at 0
        s=0;     //  Sum-float, starting at 0
  for(;s<n;)     //  Loop as long as the sum is smaller than the input
    s+=.5f/++r;  //   Increase the sum by `0.5/(r+1)`,
                 //   by first increasing `r` by 1 with `r++`
  return r;}     //  Return the result-float

0

टिनिइलिश , 98 बाइट्स

(load library
(d _(q((k # N D)(i(l N(* D # 2))(_(inc k)#(+(* N k)D)(* D k))(dec k
(q((#)(_ 1 # 0 1

अंतिम पंक्ति एक अनाम लंबो फ़ंक्शन है जो पुस्तक-लंबाई की संख्या लेता है और आवश्यक पुस्तकों की संख्या लौटाता है। इसे ऑनलाइन आज़माएं!

व्याख्या

केवल संख्यात्मक डेटा प्रकार टिनिइलिस में पूर्णांक होते हैं, इसलिए हम अंश और हर के ट्रैक को रखकर हार्मोनिक श्रृंखला की गणना एक अंश के रूप में करते हैं। प्रत्येक चरण पर, Nअंश Dहै, हर है, और kयोग सूचकांक है। हम चाहते हैं कि नया आंशिक योग हो N/D + 1/k, या (N*k + D)/(D*k)। इस प्रकार, हम एक नए अंश के साथ N*K + D, एक नए भाजक D*kऔर एक नए सूचकांक के साथ पुनरावृत्ति करते हैं k+1

एक बार आंशिक राशि से अधिक या बराबर #, पुस्तक-लंबाई की वांछित संख्या के बाद पुनरावृत्ति को रोकना चाहिए । इस बिंदु पर, हम एक पुस्तक बहुत दूर चले गए हैं, इसलिए हम लौट आए k-1। शर्त है 1/2 * N/D < #; हर N < D*#*2को बढ़ाते हुए , हमें मिलता है , जो इसे लिखने का सबसे आसान तरीका है।

_इन सभी गणनाओं को पुनरावर्ती सहायक कार्य करता है; मुख्य कार्य केवल एक-तर्क आवरण है , जो , और, के _लिए सही शुरुआती मानों के साथ कहता है ।kND

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