त्रिकोणीय वर्ग संख्याएँ


11

स्क्वायर नंबर वे होते हैं जो n^2n का पूर्णांक होता है। इन्हें पूर्ण वर्ग भी कहा जाता है, क्योंकि जब आप उनकी वर्गमूल लेते हैं तो आपको पूर्णांक मिलता है।

पहले 10 वर्ग संख्याएँ हैं: ( OEIS )

0, 1, 4, 9, 16, 25, 36, 49, 64, 81


त्रिकोणीय संख्या वे संख्याएं होती हैं जो समबाहु त्रिभुज का निर्माण कर सकती हैं। N-th त्रिभुज संख्या 1 से n तक की सभी प्राकृतिक संख्याओं के योग के बराबर है।

पहले 10 त्रिकोणीय संख्याएँ हैं: ( OEIS )

0, 1, 3, 6, 10, 15, 21, 28, 36, 45


स्क्वायर त्रिकोणीय संख्याएं संख्याएं हैं जो वर्ग और त्रिकोणीय दोनों हैं।

पहले 10 वर्ग त्रिकोणीय संख्याएँ हैं: ( OEIS )

0, 1, 36, 1225, 41616, 1413721, 48024900, 1631432881, 55420693056, 1882672131025, 63955431761796


एक अनंत संख्या वर्ग संख्या, त्रिकोण संख्या और वर्ग त्रिकोणीय संख्या है।

एक प्रोग्राम या नामांकित फ़ंक्शन लिखें जो एक इनपुट (पैरामीटर या स्टडिन) नंबर दिया गया है n, nवें वर्ग त्रिकोणीय संख्या की गणना करता है और इसे आउटपुट करता है / देता है, जहां n एक सकारात्मक नॉनजेरो नंबर है। (एन = 1 रिटर्न के लिए 0)

प्रोग्राम / फ़ंक्शन के लिए एक वैध सबमिशन होने के लिए यह 2 ^ 31-1 से कम से कम सभी वर्ग त्रिकोण संख्याओं को वापस करने में सक्षम होना चाहिए।

बक्शीश

-4 बाइट्स 2 ^ 63-1 से कम सभी वर्ग त्रिकोणीय संख्याओं को आउटपुट करने में सक्षम होने के लिए

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

Nonpolynomial समय लेने वाले समाधानों के लिए +8 बाइट पेनल्टी।

बोनस ढेर।

यह कोड-गोल्फ चुनौती है, इसलिए सबसे कम बाइट जीतता है।


मैंने उन समाधानों के लिए 8 बाइट का जुर्माना जोड़ा है जो इसे और अधिक निष्पक्ष बनाने वालों के लिए और अधिक निष्पक्ष बनाने के लिए> O (n) समय लेते हैं।
रॉडोलफिटो

@ रोडोलिसिस मुझे नहीं लगता कि आप रैखिक समय का मतलब है। मेरे पास जो पुनरावृत्त समाधान है वह द्विघात समय है क्योंकि nचरण हैं, और प्रत्येक चरण में अंकगणित को रैखिक समय लगता है क्योंकि अंकों की संख्या रैखिक रूप से बढ़ती है n। मुझे नहीं लगता कि रैखिक समय संभव है। जब तक आप कह रहे हैं कि अंकगणितीय संचालन निरंतर समय है?
xnor

1
@ रोडॉल्विस का मतलब है कि मेरा पुनरावृत्त समाधान ओ (एन) नहीं है। मुझे लगता है कि इसके बजाय क्लीनर को "बहुपद समय" कहना है। यदि आप रेखीय समय अंकगणित मानते हैं, तो आपको अजीब चीजें मिलती हैं जैसे घातांक का उपयोग निरंतर समय कहा जाता है। परिशोधन यहाँ खेलने में नहीं आता है।
1


2
"पहले 10 वर्ग त्रिकोणीय संख्या ..." निश्चित रूप से आपका मतलब 11 था? : पी
एलेक्स ए।

जवाबों:


8

CJam, 12 8 बाइट्स

XUri{_34*@-Y+}*;

विकिपीडिया लेख से पुनरावृत्ति संबंध का उपयोग करता है।

कोड 16 बाइट्स लंबा है और दोनों बोनस के लिए योग्य है।

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

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

मेरा कोड हमेशा के लिए हर पहलू में xnor के समान निकला, सिवाय इसके कि मैं चर के बजाय CJam के स्टैक का उपयोग करता हूं।

XU               e# Push 1 and 0 on the stack.
                 e# Since 34 * 0 - 1 + 2 = 1, this compensates for 1-based indexing.
  ri{        }*  e# Do int(input()) times:
     _34*        e#   Copy the topmost integer and multiply it by 34.
         @-      e#   Subtract the bottommost integer from the result.
           Y+    e#   Add 2.
               ; e# Discard the last result.

यह बहुत बड़े इनपुट के लिए तुरंत चलता है, लेकिन 3000 से अधिक यह ऑनलाइन इंटरप्रेटर पर एक जावास्क्रिप्ट रेंज त्रुटि देता है। Im इसे जावा कार्यान्वयन पर आजमाने जा रहा हूं।
रॉडोफाइटो

@Rodolvertice: मैंने एक पुनरावृत्त दृष्टिकोण पर स्विच किया है। यह वास्तव में छोटा है और यह कम स्मृति गहन है।
डेनिस

8

पायथन 2, 45 - 4 - 4 = 37

a=1;b=0
exec"a,b=b,34*b-a+2;"*input()
print a

पुनरावृत्ति का उपयोग कर Iterates

f(0) = 1
f(1) = 0
f(k) = 34*f(k-1)-f(k-2)+2

सिद्धांत रूप में, यह किसी भी आकार की संख्या का समर्थन करता है, लेकिन घातीय समय में चलता है, इसलिए इसे बोनस के लिए योग्य नहीं होना चाहिए। किसी भी आकार की संख्या के लिए काम करना चाहिए। उदाहरण के लिए, 100 के लिए, देता है

1185827220993342542557325920096705939276583904852110550753333094088280194260929920844987597980616456388639477930416411849864965254621398934978872054025

एक पुनरावर्ती समाधान 41 वर्णों का उपयोग करता है, लेकिन योग्य नहीं होना चाहिए क्योंकि यह घातीय समय लेता है।

f=lambda k:k>2and 34*f(k-1)-f(k-2)+2or~-k

यह काफी धोखा है, स्ट्रिंग गुणन, हाहा द्वारा एक 'लूप' है।
रॉडोफाइटो

@ रोडोल्वरिस: वास्तव में धोखा नहीं। बल्कि चालाक, और वास्तव में साइट पर काफी आम है।
एलेक्स ए।

मेरा मानना ​​है कि आपका पुनरावर्ती समाधान बोनस # 1 के लिए अर्हता प्राप्त करता है, जो इसे execसमाधान के साथ जोड़ देगा। यदि आपको पुनरावृत्ति सीमा बदलने की अनुमति है, तो यह किसी भी आकार के एक वर्ग त्रिकोण संख्या की गणना कर सकता है, इसे # 2 के लिए योग्य बनाता है। हालाँकि, मुझे यकीन नहीं है कि अगर यह (@Rodolvertice) योग्य है।
काडे

7

पायथ, 16 - 4 - 4 = 8 बाइट्स

OEIS लेख से पुनरावर्ती सूत्र का उपयोग करता है।

K1uhh-*34G~KGtQZ

यह पोस्ट-असाइन कमांड का उपयोग करता है जो बहुत नया है और वास्तव में अच्छा लगता है। n-11-आधारित अनुक्रमण के कारण उपयोग को कम करने का समय।

K1            Set K=1
u       tQ    Reduce input()-1 times
         Z    With zero as base case
 hh            +2
  -           Subtract
   *34G       34 times iterating variable
   ~K         Assign to K and use old value
    G         Assign the iterating variable.

लगता है बहुपद है क्योंकि यह n बार लूप करता है और प्रत्येक पुनरावृत्ति को गणित और असाइनमेंट करता है, लेकिन मैं एक कंप्यूटर वैज्ञानिक नहीं हूं। समाप्त होता है n = 10000 लगभग तुरंत।

इसे यहाँ ऑनलाइन प्रयास करें


मुझे लगता है कि आप इनपुट से 1 को घटाने से बच सकते हैं यदि आप 1,0 के बजाय 0,1 पर एक पुनरावृत्ति शुरू करते हैं - मेरे पायथन उत्तर को देखें।
xnor

@ xnor: मुझे लगता है कि वह पहले से ही ऐसा करता है। हालाँकि, लूप द्वारा लौटाया गया परिणाम आपका है b
डेनिस

5

ओएसिस , 7 - 4 - 4 = -1 (गैर-प्रतिस्पर्धात्मक)

34*c-»T

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

उपयोग a(0) = 0, a(1) = 1; for n >= 2, a(n) = 34 * a(n-1) - a(n-2) + 2

ओएसिस मनमाने ढंग से सटीक पूर्णांक का समर्थन करता है, इसलिए इसे किसी भी संख्या तक जाने में सक्षम होना चाहिए, जब तक कोई स्टैक अतिप्रवाह नहीं होता है। मुझे पता है कि यह ढेर अतिप्रवाह के कारण बोनस की गणना नहीं करता है। यह भी संभव है कि यह विशेष एल्गोरिथ्म गैर-बहुपद हो, और मुझे बताएं कि क्या ऐसा है।

गैर-प्रतिस्पर्धात्मक क्योंकि भाषा चुनौती को स्थगित करती है।

स्पष्टीकरण:

34*c-»T -> 34*c-»10

a(0) = 0
a(1) = 1
a(n) = 34*c-»

34*c-»
34*    # 34*a(n-1)
   c-  # 34*a(n-1)-a(n-2)
     » # 34*a(n-1)-a(n-2)+2

दूसरा तरीका:

-35*d+T

इसके बजाय उपयोग करता है a(n) = 35*(a(n-1)-a(n-2)) + a(n-3)


सवाल कहता है For n=1 return 0, लेकिन यह रिटर्न 1. यह -O विकल्प को जोड़कर ठीक करने योग्य है
ग्रिममी

4

जावास्क्रिप्ट (ईएस 6), 29-4 = 25 बाइट्स

n=>n>1?34*f(n-1)-f(n-2)+2:n|0

सहेजे गए 5 बाइट्स @IsmaelMiguel का धन्यवाद !

मुझे अनंत पुनरावृत्ति से बचने के लिए 0, 1 और नकारात्मक को हार्डकोड करना पड़ा है।

कंसोल, मैंने फ़ंक्शन का नाम दिया है f:

f(1);  // 0
f(13); // 73804512832419600
f(30); // 7.885505171090779e+42 or 7885505171090779000000000000000000000000000

EDIT : जावास्क्रिप्ट संख्या 16 (15) अंकों (कल्पना) के लिए गोल हो जाएगा क्योंकि ये संख्या बहुत बड़ी हैं जो एक अतिप्रवाह का कारण बनती हैं। 714341252076979033 अपने जावास्क्रिप्ट कंसोल में रखें और अपने लिए देखें। यह जावास्क्रिप्ट की एक सीमा से अधिक है


मुझे नहीं लगता कि यह बोनस के लिए योग्य है। f(15)लौटना चाहिए 85170343853180456676, नहीं 85170343853180450000
डेनिस

@ डेनिस जावास्क्रिप्ट को इसे छोटा किया जाना चाहिए। .-। हाँ, जावास्क्रिप्ट दौर 16 अंकों जब
Downgoat

यह एक कोशिश करें: n=>n?n<2?0:34*f(n-1)-f(n-2)+2:1(31 बाइट्स)। मैंने 5 वीं नंबर तक परीक्षा दी है।
इस्माइल मिगुएल

1
अब आपके पास एक 29-बाइट्स लंबा समाधान है n=>n>1?34*f(n-1)-f(n-2)+2:!!n:। यह रिटर्न falseपर 0, trueपर 1और 36पर 2। आप इसे एक नंबर वापस करना चाहते हैं, तो आप बदल सकते हैं !!nके साथ +!!n
इस्माइल मिगुएल

1
समस्या का समाधान किया। इस का उपयोग करें: n=>n>1?34*f(n-1)-f(n-2)+2:n|0(एक ही बाइट गिनती, अब हमेशा नंबर देता है)
इस्माइल मिगुएल

3

एक्सेल VBA - 90 बाइट्स

विकिपीडिया पृष्ठ से पुनरावृत्ति संबंध का उपयोग करना:

n = InputBox("n")
x = 0
y = 1
For i = 1 To n
Cells(i, 1) = x
r = 34 * y - x + 2
x = y
y = r
Next i

जब निष्पादित किया जाता है तो आपको n के लिए संकेत दिया जाता है, फिर n और n सहित अनुक्रम ए कॉलम ए पर आउटपुट होता है:

उत्पादन

ओवरफ्लो त्रुटि देने से पहले इसे n = 202 तक चलाया जा सकता है।


2

[प्रतिस्पर्धा नहीं] पायथ (14 - 4 - 4 = 6 बाइट्स)

K1u/^tG2~KGQ36

OEIS से पहली पुनरावृत्ति का उपयोग किया , कि 0,1,36 के बाद आप A n = (A n-1 -1) 2 / A n-2 पा सकते हैं । प्रतिस्पर्धा नहीं क्योंकि यह समाधान 36 से शुरू होता है, यदि आप शून्य से कम पर जाते हैं (तो 0 का इनपुट 36 देता है)। साथ ही 36 को हार्डकोड करना था।

इसे यहाँ आज़माएँ


2

जावा, 53 - 4 = 49 बाइट्स

यह एक और सरल पुनरावृत्ति है, लेकिन मैं अक्सर जावा को <50 स्कोर के साथ पोस्ट करने के लिए नहीं मिलता, इसलिए ...

long g(int n){return n<2?n<1?1:0:34*g(n-1)-g(n-2)+2;}

अब, गैर- कुछ के लिए , यह बहुत लंबा हो जाता है। यह दोनों लंबे समय तक (112-4 = 108) -और-धीमा है, इसलिए मुझे यकीन नहीं है कि मैं इसे पोस्ट कर रहा हूं, क्योंकि इसके बारे में कुछ पता नहीं है:

long f(int n){long a=0,b,c,d=0;for(;a<1l<<32&n>0;)if((c=(int)Math.sqrt(b=(a*a+a++)/2))*c==b){d=b;n--;}return d;}

2

जूलिया, 51 बाइट्स - 4 - 4 = 43

f(n)=(a=b=big(1);b-=1;for i=1:n a,b=b,34b-a+2end;a)

यह वर्ग त्रिकोणीय संख्याओं के लिए विकिपीडिया पृष्ठ पर सूचीबद्ध पहले पुनरावृत्ति संबंध का उपयोग करता है। यह 0.006 सेकंड में n = 1000 और 6.93 सेकंड में n = 100000 की गणना करता है । यह कुछ बाइट्स एक पुनरावर्ती समाधान से अधिक है, लेकिन यह है जिस तरह से तेजी से।

असंगठित + स्पष्टीकरण:

function f(n)
    # Set a and b to be big integers
    a = big(1)
    b = big(0)

    # Iterate n times
    for i = 1:n
        # Use the recurrence relation, Luke
        a, b = b, 34*b - a + 2
    end

    # Return a
    a
end

उदाहरण:

julia> for i = 1:4 println(f(i)) end
0
1
36
1225

julia> @time for i = 1:1000 println(f(i)) end
0
... (further printing omitted here)
elapsed time: 1.137734341 seconds (403573226 bytes allocated, 38.75% gc time)

2

PHP, 65 59 56-4 = 52 बाइट्स

while($argv[1]--)while((0|$r=sqrt($s+=$f++))-$r);echo$s;

तब तक दोहराएं जब तक कि वर्गमूल $sis है: $fयोग $s, योग , जोड़ $f;
बार $argv[1]बार।
आउटपुट योग।


1

प्रोलॉग, 70 74 - 4 - 4 = 66

n(X,R):-n(X,0,1,R).
n(X,A,B,R):-X=0,R=A;Z is X-1,E is 34*B-A+2,n(Z,B,E,R).

रनिंग n(100,R)आउटपुट:

X = 40283218019606612026870715051828504163181534465162581625898684828251284020309760525686544840519804069618265491900426463694050293008018241080068813316496

n(10000,X)मेरे कंप्यूटर पर चलने के लिए लगभग 1 सेकंड लगता है ।

संपादित करें : 66 संस्करण पूंछ-पुनरावर्ती है। पिछला गैर-पूंछ-पुनरावर्ती संस्करण निम्नलिखित है:

n(X,[Z|R]):-X>1,Y is X-1,n(Y,R),R=[A,B|_],Z is 34*A-B+2;X=1,Z=1,R=[0];Z=0.

बाइट्स में उनकी लंबाई समान है, लेकिन गैर-पूंछ-पुनरावर्ती एक निश्चित बिंदु (मेरे कंप्यूटर पर, लगभग 20500) पर पिछले ओवरफ्लो उत्पन्न करता है।


1

जावास्क्रिप्ट ईएस 6, 77 75 71 वर्ण

// 71 chars
f=n=>{for(q=t=w=0;n;++q)for(s=q*q;t<=s;t+=++w)s==t&&--n&console.log(s)}

// No multiplication, 75 chars
f=n=>{for(s=t=w=0,q=-1;n;s+=q+=2)for(;t<=s;t+=++w)s==t&&--n&console.log(s)}

// Old, 77 chars
f=n=>{for(s=t=w=0,q=-1;n;s+=q+=2){for(;t<s;t+=++w);s==t&&--n&console.log(s)}}
  • समाधान रैखिक है।
  • समाधान सभी संख्याओं को कम कर सकता है, फिर संख्याओं के कारण 2 ^ 53।
  • एल्गोरिथ्म का उपयोग स्वयं असीमित संख्याओं के लिए किया जा सकता है।

परीक्षा:

f(11)

0
1
36
1225
41616
1413721
48024900
1631432881
55420693056
1882672131025
63955431761796


1

जेली , 13 - 8 = 5 बाइट्स

यह दोनों बोनस के लिए योग्य है।

×8‘,µÆ²Ạ
0Ç#Ṫ

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

चैट में केर्ड सिक्कााहरिंग के साथ किया गया ।

व्याख्या

× 8 ', Hel ~ हेल्पर लिंक।

× × ~ 8 बार संख्या।
  '~ वृद्धि।
   , ~ वर्तमान संख्या के साथ जोड़ी।
    µ ~ एक नया मानदण्ड (1-arg) लिंक शुरू करता है।
     Ʋ ~ वेक्टरकृत "क्या स्क्वायर है?"।
       Ạ ~ सभी 1 ही लौटाएं अगर दोनों सत्य हैं।



0 Main # Ç ~ मुख्य लिंक।

0 # ~ 0 से शुरू होकर, जब लागू हो, सत्य परिणामों के साथ पहला एन पूर्णांक जमा करें:
 Ç ~ एक सनद के रूप में अंतिम कड़ी।
   Element ~ अंतिम तत्व। आउटपुट निहित है।



0

एपीएल (एनएआरएस), 67 चार्ट, 134 बाइट्स

r←f w;c;i;m
c←0⋄i←¯1⋄r←⍬
→2×⍳0≠1∣√1+8×m←i×i+←1⋄r←r,m⋄→2×⍳w>c+←1

परीक्षा:

  f 10
0 1 36 1225 41616 1413721 48024900 1631432881 55420693056 1882672131025 

f द्विघात अनुक्रम में खोज करेगा जो तत्व त्रिकोणीय संख्या भी हैं, इसलिए उन्हें एपीएल में त्रिकोणीय जांच सूत्र का पालन करना होगा: 0 = 1∣√1 + 8 × मीटर संख्या के साथ मीटर की जाँच करें।

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