আমার মাত্রা কি?


18

কার্য: একটি ত্রিভুজটির ক্ষেত্রফল দেওয়া, সেই অঞ্চলটির সাথে একটি হেরোনিয়ান ত্রিভুজ খুঁজে find নির্দিষ্ট অঞ্চল সহ যে কোনও হেরোনিয়ান ত্রিভুজ অনুমোদিত।

একটি হেরোনিয়ান ত্রিভুজটি পূর্ণসংখ্যার দিক এবং পূর্ণসংখ্যার ক্ষেত্র সহ একটি ত্রিভুজ । হেরনের সূত্রে, পাশের দৈর্ঘ্যের একটি ত্রিভুজটির ক্ষেত্রফল 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
আপনি কি নিজের চ্যালেঞ্জে হেরোনিয়ান ত্রিভুজটির তুলনামূলক সংক্ষিপ্ত সংজ্ঞা লিখতে পারেন?
Okx

1
@ অক্স: এটি কি পরিষ্কার নয় যে এটি পূর্ণসংখ্যার দিক এবং পূর্ণসংখ্যার ক্ষেত্র সহ একটি ত্রিভুজ?
নিল এ।

@ অক্স: এটি ধারণা। আপনাকে যা করতে হবে তা দেওয়া ক্ষেত্রের জন্য যদি এর উপস্থিত থাকে তবে এর জন্য একটি উদাহরণ খুঁজে বার করুন।
নিল এ।

উইকিপিডিয়া লিঙ্ক থেকে: "একটি হেরোনিয়ান ত্রিভুজটি এমন একটি ত্রিভুজ যা এর দৈর্ঘ্য এবং ক্ষেত্রফল যা সমস্ত পূর্ণসংখ্যার হয়" "
নিল এ।

5
আপনি দয়া করে ব্যাখ্যা করতে পারেন যে প্রশ্নে সংজ্ঞাটি সম্পর্কে বিভ্রান্তিকর কী?
নিল এ।

উত্তর:


6

জেলি , 17 16 বাইট

-1 বাইট ধন্যবাদ আউটগল্ফার এরিককে ধন্যবাদ (দ্রুত ব্যবহার করুন, ¥)

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

হেরনের সূত্রটি বর্বর বল প্রয়োগ।

এটি অনলাইন চেষ্টা করুন! (১১৪ টি পরীক্ষার ক্ষেত্রেs০এর দশকের সময় পৌঁছে। স্থানীয়ভাবে 3 মি 30s লাগে - এটি 114 3 = 1,481,544 ট্রিপলচেক করে)

কিভাবে?

সত্যিকারের গল্ফ সমাধান - এমন একটি অঞ্চল দেওয়া হয়েছে যা এর মধ্যে তিনটি পূর্ণসংখ্যার সমস্ত টিপল 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। আমি কল্পনা করেছি যে বেশিরভাগ গল্ফ জমা দেওয়া এই চ্যালেঞ্জের জন্য শক্তিশালী হবে - তবে কেউ কেউ এর চেয়ে কম হাস্যকরভাবে অদক্ষ হয়েও গল্ফ হতে পারে।
জোনাথন অ্যালান

আপনি প্রতিস্থাপন করতে পারেন çসঙ্গে Ç⁼¥এবং সম্পূর্ণরূপে দ্বিতীয় লাইন মুছে ফেলুন।
এরিক দ্য আউটগল্ফার

@ এরিকথ আউটগলফার ওহ, ধন্যবাদ, আমি কীভাবে এটি সম্পর্কে ভাবছিলাম ...
জোনাথন অ্যালান

5

জাভাস্ক্রিপ্ট (ES7), 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(+২ বাইট) প্রতিস্থাপন করতে হবে যা কিছু না পাওয়া গেলে বা খালি তালিকা তৈরি করবে বাList.tryFind (+3 বাইট) , কোনও ত্রিভুজ না পাওয়া অবস্থায় ফিরে আসবে না।

আমি সর্বদা দেখতে পাই যে একটি গল্ফ এফ # সংস্করণটি এখনও যুক্তিসঙ্গত leg


1
আমি এফ # জানি না, তবে আমি ধারণা করি আপনি ফলাফলটির সাথে System.Math.Sqrtমূল্যায়ন করতে এবং ফলাফলটির সাথে তুলনা করতে পারবেন A * A?
শন

@ সান অবশ্যই! টিপটির জন্য ধন্যবাদ :)
ব্রুনার

প্রতিস্থাপন করা হচ্ছে 1.0..A [...] 1.0..A [...] 1.0..Aসঙ্গে 1.0..A [...] a..A [..] b..Aআপনি একটি দম্পতি বাইট এবং আপনার গতি একটু সংরক্ষণ করা উচিত (যদি এটি কাজ করে আমি খুব সংক্ষিপ্ত এফ # অভিজ্ঞতা থাকতে)।
CAD97

@ CAD97 এটি করে! যে ইশারা জন্য ধন্যবাদ।
ব্রুনার

2

পাইথন 2 (পাইপাই) , 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

এটি অনলাইন চেষ্টা করুন!

এটি সিপিথনেও কাজ করে, পাইপাই অনেক দ্রুত এবং এটি টিআইওর সময়সীমাতে 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

যা সমস্ত সম্ভাব্য সমাধানগুলি মুদ্রণ করে এবং বড় ইনপুটগুলির জন্য মারাত্মকভাবে ধীর হয়। শুরুতে 'এইচ' রাখুন কেবল একটি মুদ্রণ করতে।

ব্যাখ্যা:

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 ব্যবহার করে those দিকগুলির সাথে ত্রিভুজের ক্ষেত্রফল সমান হয় ।

দেওয়া কোড ব্লকের মধ্যে first:

  • $_ট্রিপলেট হয়। এটি (x, y, z)এখানে কল করুন।
  • (0,|$_)একই ত্রয়ী কিন্তু সাথে আছেন 0prepended: (0, x, y, z)
  • .sum / 2অর্ধ পরিধি ( sহেরনের সূত্রের প্রকাশের অভিব্যক্তিতে এমন একটি পরিমাণের নাম দেওয়া হয়েছে)।
  • .sum / 2 «-« (0, |$_) এর সাথে বিয়োগের হাইপারোপরেটর sবামে এবং ডানে বামদিকে(0, x, y, z) giving(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
গণিতের কোনও বিল্টিন নেই? বিস্ময়কর.
নীল এ।

@ ওভস আপনি এটির সাথে একটি বাইটও সংরক্ষণ করতে পারেন 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 বাইট ।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.