मेरे आयाम क्या हैं?


18

टास्क: एक त्रिकोण के क्षेत्र को देखते हुए, उस क्षेत्र के साथ एक हेरोइन त्रिकोण को खोजें। निर्दिष्ट क्षेत्र के साथ किसी भी हेरोइन त्रिकोण की अनुमति है।

एक हेरोनियन त्रिकोण पूर्णांक पक्षों और पूर्णांक क्षेत्र के साथ एक त्रिकोण है । हेरॉन के फार्मूले के अनुसार, पक्षों की लंबाई वाला एक त्रिकोण a,b,cक्षेत्र है

sqrt(s*(s-a)*(s-b)*(s-c))

जहां s=(a+b+c)/2त्रिभुज की आधी परिधि है। यह भी लिखा जा सकता है

sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c)) / 4

यदि ऐसा कोई त्रिभुज मौजूद नहीं है, तो एक सुसंगत फाल्सी मूल्य के साथ आउटपुट।

इनपुट: एक एकल, सकारात्मक पूर्णांक त्रिभुज के क्षेत्र का प्रतिनिधित्व करता है।

आउटपुट: ऐसे त्रिभुज के लिए किसी भी तीन तरफ की लंबाई या गलत तरीके से मूल्य।

उदाहरण:

Input -> Output
6 -> 3 4 5
24 -> 4 15 13
114 -> 37 20 19
7 -> error

मानक खामियां लागू होती हैं

यह कोड गोल्फ है, बाइट्स जीत में सबसे छोटा जवाब है।


6
क्या आप अपनी चुनौती में एक हेरोइन त्रिकोण की अपेक्षाकृत संक्षिप्त परिभाषा लिख ​​सकते हैं?
ओकेक्स

1
@ ओएक्सएक्स: क्या यह स्पष्ट नहीं है कि यह पूर्णांक पक्षों और पूर्णांक क्षेत्र के साथ एक त्रिकोण है?
नील ए।

@ ऑक्स: यह विचार है। यदि आप मौजूद हैं, तो आपको दिए गए क्षेत्र के लिए ऐसा एक उदाहरण ढूंढना होगा।
नील ए।

विकिपीडिया लिंक से: "एक हेरोनियन त्रिभुज एक त्रिभुज है जिसकी भुजाएँ लंबाई और क्षेत्रफल सभी पूर्णांक हैं।"
नील ए।

5
क्या आप कृपया बता सकते हैं कि प्रश्न में परिभाषा के बारे में क्या भ्रम है?
नील ए।

जवाबों:


6

जेली , 16 १६ बाइट्स

-1 बाइट धन्यवाद करने के लिए एरिक outgolfer (जल्दी का उपयोग करें, ¥)

SHð;_P
ṗ3Ç⁼¥Ðf²Ḣ

बगुला के सूत्र के जानवर बल आवेदन।

इसे ऑनलाइन आज़माएं! (114 परीक्षण के मामले के लिए 60 के समय तक पहुंच जाता है। स्थानीय स्तर पर 3m 30s लेता है - यह 114 की जांच करता है 3 = 1,481,544 त्रिगुणों की )

कैसे?

एक सच्चा गोल्फ समाधान - एक ऐसा क्षेत्र दिया गया है जिसमें तीन पूर्णांकों के सभी tuples aमिलते हैं और (यहां तक ​​कि बार-बार त्रिकोण और बिना क्षेत्र के लोगों के साथ), अपने क्षेत्र और वांछित क्षेत्र वाले लोगों के लिए फ़िल्टर प्राप्त करता है (यह जितनी जल्दी बंद नहीं होता है एक पाया जाता है, यह उन सभी के माध्यम से प्रतिज्ञा करता है और बाद में पहला परिणाम पॉप करता है)। पैदावार अगर कोई नहीं है।1a0

SHð;_P - Link 1, get the square of the area of a triangle: list of sides
S      - sum the sides (get the perimeter)
 H     - halve
  ð    - dyadic chain separation (call that p)
    _  - subtraction (vectorises) =    [p-side1,  p-side2,  p-side3]
   ;   - concatenate              = [p, p-side1,  p-side2,  p-side3]
     P - product                  =  p*(p-side1)*(p-side2)*(p-side3)
                                  = the square of Heron's formula = area squared

ṗ3Ç⁼¥Ðf²Ḣ - Main link: number a (area)
ṗ3        - third Cartesian power (all triples of [1,area] : [[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,1],[2,1,2],[2,2,1],[2,2,2], ... ,[a,a,a]]
       ²  - square a
     Ðf   - filter keep if:
    ¥     -   last two links as a dyad:
  Ç       -     call last link (1) as a monad f(list of sides)
   ⁼      -     left (that result) equals right (square of a)?
        Ḣ - head - get the first one (an empty list yields 0, perfect for the falsey case)

मुझे लगा कि कोई इसे जबरदस्ती दबाने की कोशिश करेगा, अच्छा!
नील ए।

@NeilA। मुझे लगता है कि अधिकांश गोल्फ सबमिशन इस चुनौती के लिए क्रूर बल होंगे - लेकिन कुछ इस से कम हास्यास्पद होने पर भी गोल्फ का प्रबंधन कर सकते हैं।
जोनाथन एलन

आप बदल सकते हैं çके साथ Ç⁼¥और पूरी तरह से दूसरी पंक्ति को हटा दें।
द एग्री द आउटग्राफर

@EriktheOutgolfer ओह, धन्यवाद, मैं सोच रहा था कि इस बारे में कैसे जाना है ...
जोनाथन एलन

5

जावास्क्रिप्ट (ईएस 7), 109 102 100 98 बाइट्स

या तो 3 पूर्णांक की एक सरणी देता है या false। जैसा जेली जवाब , इस जानवर हीरोन का सूत्र के लिए मजबूर है।

A=>[...Array(A**3)].some((_,a)=>A*A/(r=[b=a/A%A|0,c=a/A/A|0,a%=A],p=a+b+c>>1)/(p-a)/(p-b)==p-c)&&r

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


पुनरावर्ती संस्करण, 83 बाइट्स

3 पूर्णांक की एक सरणी लौटाता है या एक पुनरावृत्ति त्रुटि फेंकता है। अफसोस की बात है, यह केवल छोटे इनपुट के लिए काम करता है।

f=(A,n)=>A*A/(r=[a=n%A,b=n/A%A|0,c=n/A/A|0],p=a+b+c>>1)/(p-a)/(p-b)==p-c?r:f(A,-~n)

डेमो


4

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

f a=take 1[t|t<-mapM(\_->[1..a])":-)",a*a==product[sum t/2-x|x<-0:t]]

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

जैसे तीन त्रिभुज पक्षों की सूची का एक सिंगलटन आउटपुट करता है [[3.0,4.0,5.0]]। असंभव इनपुट्स देते हैं []। तकनीकी रूप से केवल Falseहास्केल के लिए फाल्सी है, लेकिन क्योंकि हास्केल को एक ही प्रकार के सभी संभावित आउटपुट की आवश्यकता होती है, इसलिए इसका उपयोग नहीं किया जा सकता है। यदि कोई त्रुटि फ़ॉसी के रूप में उपयोग की जा सकती है, [...]!!0तो 3 बाइट्स बचाएगीtake 1[..]

क्षेत्र tसे लेकर प्रत्येक संभावित लम्बाई के सभी त्रिभुज की कोशिश 1करता है a। यह देखने के लिए कि क्षेत्र (s-0)(s-x)(s-y)(s-z)==a*aकहाँ s=(x+y+z)/2है के माध्यम से मेल खाता है, बगुला के सूत्र का उपयोग किया जाता है sum t/2। उत्पाद (s-0)(s-x)(s-y)(s-z)को productतत्वों से लिया गया है 0:t, अर्थात ट्रिपल के साथ-साथ 0 के रूप में भी व्यक्त किया गया है ।


स्माइली चेहरे के लिए +1, भले ही यह एक नोपा है
जूलियन वुल्फ

2

एफ #, 170 156 152 बाइट्स

let f(a,b,c)=
 let s=(a+b+c)/2.0
 s*(s-a)*(s-b)*(s-c)
let g A=[for a in 1.0..A do for b in a..A do for c in b..A do yield a,b,c]|>List.find(f>>(=)(A*A))

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

"Ungolfed"

let calculateArea (a, b, c) =
    let s = (a+b+c)/2.0
    s*(s-a)*(s-b)*(s-c)

let getTriangle A =
    [  for a in 1.0..A do
       for b in a..A do
       for c in b..A do yield a,b,c
    ]
    |> List.find(calculateArea>>(=)(A * A))

यदि कोई परिणाम नहीं मिले, तो प्रोग्राम में खराबी होगी। यदि यह वांछित नहीं है, तो मुझे List.findया तो List.filter(+2 बाइट्स) के साथ प्रतिस्थापित करना होगा जो कुछ भी नहीं पाए जाने पर या किसी खाली सूची का उत्पादन करेगाList.tryFind (+3 बाइट्स) के , किसी भी मामले में कोई त्रिकोण नहीं मिला।

मुझे हमेशा लगता है कि एक गोल्फ F # संस्करण अभी भी उचित है।


1
मुझे F # नहीं पता है, लेकिन मुझे लगता है कि आप इसके साथ वितरण कर सकते हैं System.Math.Sqrtऔर परिणामी मूल्य की तुलना कर सकते हैं A * A?
शॉन

@ निश्चित रूप से! टिप के लिए धन्यवाद :)
ब्रूनर

के 1.0..A [...] 1.0..A [...] 1.0..Aसाथ बदलने से 1.0..A [...] a..A [..] b..Aआपको एक युगल बाइट्स को बचाना चाहिए और आपको थोड़ा गति देना चाहिए (यदि यह काम करता है, तो मेरे पास बहुत कम एफ # अनुभव है)।
सीएडी97

@ CAD97 यह करता है! यह बात बताने के लिए धन्यवाद।
ब्रूनर

2

पायथन 2 (PyPy) , 131 123 118 बाइट्स

n=input()
t=n*3;r=i=c=0
while c<t:
 i+=1;a,b,c=i%t,i/t%t,i/t/t;s=a+b+c>>1
 if(s-a)*s*(s-b)*(s-c)==n**2:r=a,b,c
print r

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

हालांकि यह CPython पर भी काम करता है, PyPy बहुत तेज़ है और TIO पर समय सीमा में 114 के लिए त्रिकोण की गणना करने में सक्षम है।

मेरी मशीन से समय:

$ echo 114 | time pypy2 d.py
        0.55 real         0.52 user         0.02 sys
$ echo 114 | time python2 d.py
       52.46 real        51.76 user         0.27 sys

1

पायथ - 23 बाइट्स

/mu*G-/sd2Hd/sd2^UQ3^Q2

जो एक सत्य / झूठे मूल्य को प्रिंट करता है, या

fq^Q2u*G-/sT2HT/sT2^UQ3

जो सभी संभव समाधानों को प्रिंट करता है, और बड़े इनपुट के लिए बहुत धीमा है। शुरुआत में 'h' को केवल एक प्रिंट करें।

स्पष्टीकरण:

fq^Q2u*G-/sT2HT/sT2^UQ3
                    UQ    # List of numbers from 0 to input-1
                   ^  3   # All triples of these numbers
f                         # Filter this by the following test (on variable T, based on Hero's formula)
     u*G-/sT2HT/sT2       # s*(s-a)*(s-b)*(s-c), where s is the sum of the triple over 2 (calclated as /sT2 )
 q^Q2                     # Test if equal to input ^2

कोशिश करो


1

पर्ल 6 , 54 बाइट्स

->\a{first {a*a==[*] .sum/2 «-«(0,|$_)},[X] ^a xx 3}

aइनपुट क्षेत्र की तुलना में एक से कम सभी पक्षों के ब्रूट बल की खोज ।

  • ^a0 से संख्या की सीमा है a - 1
  • [X] ^a xx 3क्रॉस उत्पाद द्वारा, उस श्रेणी की तीन प्रतियां, से (0, 0, 0)लेकर सभी ट्रिपल तक का उत्पादन घटाता है (a - 1, a - 1, a - 1)
  • हम firstट्रिपल की तलाश करते हैं जैसे कि उन पक्षों के साथ त्रिकोण का क्षेत्र बराबरी करता है a, हेरॉन के सूत्र का उपयोग करते हुए ।

दिए गए कोड ब्लॉक के भीतर first:

  • $_त्रिकालज्ञ है। (x, y, z)यहाँ बुलाओ ।
  • (0,|$_)एक ही त्रिक लेकिन साथ है 0prepended: (0, x, y, z)
  • .sum / 2आधा परिधि है (एक मात्रा जिसे sहेरॉन के सूत्र की सामान्य अभिव्यक्ति में नाम दिया गया है)।
  • .sum / 2 «-« (0, |$_)sबाईं ओर और (0, x, y, z)दायीं ओर, के साथ घटाव अतिपरजीविता है (s - 0, s - x, s - y, s - z)
  • [*] फिर उस चौगुनी को गुणा के साथ घटाता है, जिससे क्षेत्रफल का वर्ग मिलता है।
  • a * a == दिए गए क्षेत्र के वर्ग के बराबर एक वर्ग क्षेत्र की तलाश करता है।

यदि कोई ट्रिपलेट नहीं मिला है, Nil(जो कि गलत है) वापस आ गया है।


1

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

f s=[[a,b,c]|a<-[1..s],b<-[1..a],c<-[1..b],a*a*c*c-(a*a+c*c-b*b)^2/4==4*s*s]

यह उन सभी संभावित अभिन्न आकारों वाली सूचियों की सूची का उत्पादन करता है, जो ब्रूट फोर्स के माध्यम से सही क्षेत्र उत्पन्न करते हैं (यदि कोई नहीं है तो खाली सूची का उत्पादन)। बीच में उस विभाजन की वजह से यह होने वाला गुहा युगल के रूप में उन्हें आउटपुट करता है लेकिन उनका आंशिक हिस्सा हमेशा 0 होता है।

यदि आप किसी कारण से ऐसा नहीं कर सकते,

f s=[[a,b,c]|a<-[1..s],b<-[1..a],c<-[1..b],4*a*a*c*c-(a*a+c*c-b*b)^2==16*s*s]

यह 89 77 बाइट्स कुल या 13 1 अतिरिक्त बाइट्स के लिए पूर्णांक सूचियों की सूची के रूप में उत्तरों को आउटपुट करेगा । (नील को धन्यवाद)

अगर आपको जरूरत है / केवल पहले तत्व को केवल !!0अंत में रखना है, तो आपको केवल पहला तत्व मिलेगा यदि संख्याएं हैं जो लागू होती हैं और एक त्रुटि है यदि 3 और बाइट्स के लिए कोई नहीं है और take 1शुरुआत में पहले तत्व को बाहर ले जाने के बिना ले जाएगा। 6 और बाइट्स।

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


यदि आप युगल से बचना चाहते हैं तो क्या आप हर तरफ समीकरण को 4 से गुणा नहीं कर सकते हैं?
नील

0

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

Prompt A
For(B,1,A
For(C,1,B
For(D,1,C
(B+C+D)/2
If A2=Ansprod(Ans-{B,C,D
Then
Disp B,C,D
Return
End
End
End
End
/

यदि त्रिभुज है तो तीन तरफ की लंबाई प्रदर्शित करता है, अगर वहाँ ( /अंत में धन्यवाद नहीं है) तो सिंटैक्स त्रुटि फेंकता है ।

-1 बाइट एक अलग जवाब पर शॉन की टिप्पणी के लिए धन्यवाद


0

गणितज्ञ, 77 बाइट्स

गणितज्ञ के हल के साथ

s=(a+b+c)/2;d=Sqrt[s(s-a)(s-b)(s-c)];Solve[d==#&&0<a<b<c<#,{a,b,c},Integers]&

मैथेमेटिका, 117 बाइट्स

पाशविक बल

s=(a+b+c)/2;l="error";(For[a=1,a<#,a++,For[b=1,b<a,b++,For[c=1,c<b,c++,If[Sqrt[s(s-a)(s-b)(s-c)]==#,l={a,b,c}]]]];l)&

1
Mathematica में एक बिल्डिन नहीं है? चौंका देने वाला।
नील ए।

@ आप उस के साथ एक बाइट Area@SSSTriangle[a,b,c]भी बचा सकते हैं।
नंबरमैन

0

दरअसल , 22 बाइट्स

;╗R3@∙⌠;Σ½;)♀-π*╜²=⌡░F

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

स्पष्टीकरण:

;╗R3@∙⌠;Σ½;)♀-π*╜²=⌡░F  (implicit input: A)
;╗                      store a copy of A in register 0
  R                     range(1, A+1)
   3@∙                  ternary Cartesian product (all triples with values in [1, A])
      ⌠;Σ½;)♀-π*╜²=⌡░   filter: take triples where function returns truthy
       ;Σ½                make a copy of the triple, compute s = (a+b+c)/2
          ;)              make a copy of s, move it to the bottom of the stack
            ♀-            subtract each value in the triple from s
              π*          product of those values and s (s*(s-a)*(s-b)*(s-c))
                ╜²        A*A
                  =       compare equality (does area of triangle with given dimensions equal input?)
                     F  take first triple that satisfies the filter (or empty list if none)

0

कैसियो बेसिक, 123 बाइट्स

For 1⇒a To n
For 1⇒b To n
For 1⇒c To n
If(s*(s-a)*(s-b)*(s-c)|s=(a+b+c)/2)=n^2
Then
Print{a,b,c}
Stop
IfEnd
Next:Next:Next

मानक जानवर बल समाधान। कोड के लिए 122 बाइट्स, nपैरामीटर के रूप में निर्दिष्ट करने के लिए 1 बाइट ।


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