पूर्णांक के साथ पूर्णांक त्रिभुज n से कम है


13

परिभाषा

एक "पूर्णांक त्रिकोण" पूर्णांक निर्देशांक के साथ एक है। उदाहरण के लिए निम्नलिखित त्रिभुज एक पूर्णांक त्रिभुज है:

(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650.

कार्य

इस चुनौती का लक्ष्य n से कम परिधि के साथ सभी पूर्णांक त्रिकोण (बधाई तक) को गिनना है।

इनपुट और आउटपुट

तर्क को पूर्णांक के रूप में दिया जाएगा, और आउटपुट को परिधि के साथ त्रिकोण की संख्या होनी चाहिए जो तर्क से कम कड़ाई से हो।

उदाहरण

परिधि द्वारा सबसे छोटा पूर्णांक त्रिभुज के अनुरूप है

(0, 0), (0, 1), (1, 0) which has perimeter 2 + sqrt(2) ≈ 3.414

अगले सबसे छोटे हैं:

(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650,
(0, 0), (0, 2), (1, 1) with perimeter 2 + 2sqrt(2)          ≈ 4.828,
(0, 0), (0, 2), (1, 0) with perimeter 3 + sqrt(5)           ≈ 5.236, and
(0, 0), (1, 2), (2, 1) with perimeter sqrt(2) + 2sqrt(5)    ≈ 5.886

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

a(1) = 0
a(2) = 0
a(3) = 0
a(4) = 1
a(5) = 3
a(6) = 5
a(7) = 11
a(8) = 18
a(9) = 29
a(10) = 44
a(12) = 94
a(20) = 738
a(30) = 3756
a(40) = 11875

मेरे पास इस Gist में प्रत्येक त्रिकोण के लिए निर्देशांक हैं ।

चेतावनी

ध्यान दें कि दो गैर-सर्वांगसम त्रिभुजों में एक ही परिधि हो सकती है:

(0, 0), (0, 3), (3, 0) and (0, 0), (0, 1), (3, 4) both have perimeter 6 + 3sqrt(2).

यह भी ध्यान रखें कि असमानता सख्त है ; 3-4-5 पायथागॉरियन त्रिकोण को एक (13) से गिना जाना चाहिए, न कि (12)।

स्कोरिंग

यह -सबसे छोटा कोड जीतता है!


4
OEIS में आसानी से वर्णित अनुक्रम नहीं मिलने पर बधाई।
AdmBorkBork

1
मेरे पास OEIS को प्रस्तुत एक संबंधित अनुक्रम के लिए एक मसौदा है।
पीटर केजी

1
(0, 0), (0, 1), (1, 0) की परिधि 2 + sqrt (2)
gg

1
हां, पतित त्रिकोण जैसे (0,0), (1,1), (2,2) को गिना नहीं जाता है।
पीटर कैगी

1
क्या फ्लोटिंग-पॉइंट प्रकार में इनपुट पूर्णांक मान हो सकता है, या क्या यह भी एक अभिन्न प्रकार का होना चाहिए?
Οसुरेश

जवाबों:


7

जेली , २ 28 २elly २५ २३ बाइट्स

pḶŒcÆḊÐfḅı;I$€AṢ€QS€<¹S

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

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

pḶŒcÆḊÐfḅı;I$€AṢ€QS€<¹S  Main link. Argument: n

 Ḷ                       Unlength; yield [0,...,n-1].
p                        Take the Cartesian product of [1,...,n] and [0,...,n-1].
  Œc                     Take all combinations of the resulting pairs.
                         The result are of the form [[a, b], [c, d]].
    ÆḊÐf                 Filter by determinant; keep only pairs of pairs for which
                         the determinant (ad - bc) is non-zero, i.e., those such
                         that [0, 0], [a, b], and [c, d] are not collinear.
        ḅı               Convert each pair [a, b] from base i (imaginary unit) to
                         integer, mapping it to ai + b.
             €           For each pair of complex numbers [p, q]: 
          ;I$              append their forward differences, yielding [p, q, p-q].
              A          Take the absolute value of each resulting complex number.
               Ṣ€        Sort each resulting array of side lengths.
                 Q       Unique; remove duplicates.
                  S€     Take the sum of each array, computing the perimeters.
                    <¹   Compare them with n.
                      S  Take the sum of the resulting Booleans.

4

जेली ,  38  33 बाइट्स

-1 एक्सगर्फ़रSP¬+÷/E$ का SẠ>÷/E$उपयोग करने के ÇÐfबजाय ÇÐḟधन्यवाद ( उपयोग करने और उपयोग करने के बजाय उल्टा ) -1 श्री एक्सकोडर के लिए धन्यवाद (सॉर्ट करने से पहले समतल करने की आवश्यकता नहीं)
-2 श्री एक्सकोडर के लिए धन्यवाद ( S<¥Ðf³L-> S€<³S)
-1 से एक चाल चोरी करना डेनिस के उत्तर के पहले के संशोधन ( ṗ2’Œc-> p`⁺’- अधिक निरर्थक मामले लेकिन गोल्फर!)

SẠ>÷/E$
p`⁺’ÇÐfµ_/ṭ⁸²S€Ṣµ€Q½S€<³S

पूर्णांक एक पूर्णांक ले रहा है और परिणाम को प्रिंट कर रहा है।

इसे ऑनलाइन आज़माएं! (बहुत धीमी गति से 60 के दशक में परीक्षण के मामलों को पूरा करने के लिए)

कैसे?

SẠ>÷/E$ - Link 1, straightLineFromOrigin?: coordinates       i.e. [[a,b],[c,d]]
S       - sum                                                     [a+c,b+d]
 Ạ       - all? (0 if either of a+c or b+d are 0 otherwise 1)      all([a+c,b+d])
      $ - last two links as a monad:
   ÷/   -   reduce by division                                    [a÷c,b÷d]
     E  -   all equal?  (i.e. 1 if on a non-axial straight line)  a÷c==b÷d 
  >     - greater than? (i.e. 1 if not on any line, 0 otherwise)  all([a+c,b+d])>(a÷c==b÷d)

p`⁺’ÇÐḟµ_/ṭ⁸²S€Ṣµ€Q½S€<³S - Main link: integer, n
p`                        - Cartesian product of implicit range(n) with itself
  ⁺                       - repeat (Cartesian product of that result with itself)
   ’                      - decrement (vectorises)
                          -  - i.e. all non-negative lattice point pairs up to x,y=n-1
     Ðf                   - filter keep only if:
    Ç                     -   call last link (1) as a monad
       µ         µ€       - monadic chain for €ach:
        _/                -   reduce with subtraction i.e. [a-c,b-d]
           ⁸              -   chain's left argument, [[a,b],[c,d]]
          ṭ               -   tack                   [[a,b],[c,d],[c-a,d-b]]
            ²             -   square (vectorises)    [[a²,b²],[c²,d²],[(c-a)²,(d-b)²]]
             S€           -   sum €ach               [[a²+b²],[c²+d²],[(c-a)²+(d-b)²]]
                          -    - i.e. the squares of the triangle's edge lengths
               Ṣ          -   sort
                  Q       - de-duplicate (get one of each congruent set of triangles)
                   ½      - square root (vectorises)  - get sides from squares of sides
                    S€    - sum €ach
                       ³  - program's 3rd argument, n
                      <   - less than?
                        S -   sum (number of such triangles)
                          - implicit print

स्पष्टीकरण सुधार: [(a+c)×(b+d)]-> (a+c)×(b+d), [c÷a,d÷b]-> [a÷c,b÷d], c÷a==d÷b-> a÷c==b÷d, " c÷a==d÷b-> " a÷c==b÷dकार्य
आउटगोल्फर

का भी अच्छा दुरुपयोग करते हैं nan
आउटगॉल्फ

धन्यवाद। दुर्भाग्य से यह अभी भी जरूरत है SP¬और वास्तव में शून्य परिणामों से विभाजन का दुरुपयोग नहीं करता है (मुझे लगता है कि एक वास्तविक या के साथ स्पष्ट किया जा सकता है)
जोनाथन एलन

1
वास्तव में, आप के ¬+साथ बदल सकते हैं <। (संपादित करें: आप के Pसाथ बदलने की जरूरत नहीं है , जैसा कि आप केवल गैर-नकारात्मक निर्देशांक का उपयोग कर रहे हैं।)
एरिक आउटगोल्फर

यह काम नहीं करता है ( उदाहरण के लिए 7रिटर्न 21)
जोनाथन एलन

3

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

f=(n,i=n**4,o={})=>i--&&([p,P,q,Q]=[0,1,2,3].map(k=>i/n**k%n|0),!o[k=[a=(H=Math.hypot)(p,P),b=H(p-q,P-Q),c=H(q,Q)].sort()]&a+b+c<n&&(o[k]=P*q!=p*Q))+f(n,i,o)

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

अधिकांश जेएस इंजनों के डिफ़ॉल्ट स्टैक आकार के साथ केवल छोटे मूल्यों की गणना की जा सकती है।


गैर-पुनरावर्ती संस्करण, 165 बाइट्स

n=>[...Array(n**4)].reduce((x,_,i,o)=>x+=!o[[p,P,q,Q]=[0,1,2,3].map(k=>i/n**k%n|0),k=[a=(H=Math.hypot)(p,P),b=H(p-q,P-Q),c=H(q,Q)].sort()]&(o[k]=P*q!=p*Q)&a+b+c<n,0)

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

यह संस्करण एक (30) और ए (40) के लिए भी काम करता है , लेकिन स्निपेट के लिए बहुत अधिक समय लगेगा।


2

जूलिया 0.6 , 135 बाइट्स

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

n->(q=Set();for x=0:n,y=1:n,a=1:n,b=0:n
r=x+y*im
t=a+b*im
g=sort(abs2.([r,t,r-t]))
sum(√g)<n&&angle(r/t)>0&&push!(q,g)
end;length(q))

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

तेजी से, लंबे समय तक संस्करण के साथ अविकसितता से बचा गया। इसे ऑनलाइन आज़माएं! एलीमेंट वाइज वर्गाकार रूट के लिए sqrt.(g)पदावनत के स्थान पर उपयोग √g


1

क्लीन , 227 ... 143 बाइट्स

import StdEnv
@n#l=[0.0..n]
=sum[1\\p<-removeDup[sort(map(sqrt o\[u,v]=u*u+v*v)[[a-i,b-j],[a,b],[i,j]])\\a<-l,b<-l,i<-l,j<-l|a*j<>i*b]|sum p<n]

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

तीन मानों की तुलना करने के माध्यम से बधाई त्रिकोणों का पता लगाता है जो परिधि बनाने के लिए योग करते हैं, और कॉलिनियर बिंदुओं को यह सत्यापित करके बताता है कि दो सबसे छोटे ऐसे मान तीसरे के योग नहीं हैं।

यहां एक संस्करण है जो अधिक तेज़, अधिक मेमोरी-हेवी का उपयोग करता है, दृष्टिकोण: इसे ऑनलाइन आज़माएं!


अगर मैं बदलूं Start = @ 12.0 किसी भी आउटपुट को नहीं हूं, तो क्या मैं कुछ गलत कर रहा हूं?
भिखमंगे

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