পরিধির সাথে পূর্ণসংখ্য ত্রিভুজগুলি n এর চেয়ে কম


13

সংজ্ঞা

একটি "পূর্ণসংখ্যার ত্রিভুজ" হল পূর্ণসংখ্যা স্থানাঙ্ক সহ। উদাহরণস্বরূপ নিম্নলিখিত ত্রিভুজটি একটি পূর্ণসংখ্যার ত্রিভুজ:

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

কার্য

এই চ্যালেঞ্জের লক্ষ্য হ'ল এন এর চেয়েও কম পরিধি সহ সমস্ত পূর্ণসংখ্যার ত্রিভুজ (একত্রিত হওয়া) গণনা করা।

ইনপুট এবং আউটপুট

আর্গুমেন্টটি একটি পূর্ণসংখ্যা হিসাবে দেওয়া হবে এবং আউটপুটটি আর্গুমেন্টের চেয়ে পরিধির সাথে ত্রিভুজগুলির সংখ্যা হওয়া উচিত।

উদাহরণ

পরিধি দ্বারা ক্ষুদ্রতম পূর্ণসংখ্যার ত্রিভুজটি একত্রিত cong

(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

এই গিস্টটিতে প্রতিটি ত্রিভুজটির জন্য আমার সমন্বয় রয়েছে ।

সতর্কবাণী

লক্ষ্য করুন যে দুটি অ-সংগৃহীত ত্রিভুজ একই ঘের হতে পারে:

(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
ওইআইএস-এ নয় এমন একটি সহজে বর্ণিত ক্রম সন্ধানের জন্য অভিনন্দন।
অ্যাডমবর্কবার্ক

1
ওইআইএস-এ জমা দেওয়া সম্পর্কিত অনুক্রমের জন্য আমার কাছে একটি খসড়া রয়েছে।
পিটার কেজি

1
(0, 0), (0, 1), (1, 0) পরিধি 2 +
বর্গক্ষেত্র

1
হ্যাঁ, (0,0), (1,1), (2,2) এর মতো ডিজাইনারেট ত্রিভুজগুলি গণনা করা হয় না।
পিটার কেজি

1
ভাসমান-পয়েন্ট ধরণের ইনপুটটি কি পূর্ণসংখ্যা মান হতে পারে, বা এটিও একটি অবিচ্ছেদ্য ধরণের হতে পারে?
ousurous

উত্তর:


7

জেলি , 28 27 25 23 বাইট

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 বাইট

-১ এরিক দ্য আউটগোল্ফারকে ( পরিবর্তে ব্যবহার SP¬+÷/E$করে SẠ>÷/E$ব্যবহারের ÇÐfপরিবর্তে উল্টানো ÇÐḟ) -১ জনাব এক্সকোডারকে (সাজানোর আগে চ্যাপ্টা করার দরকার নেই)
ধন্যবাদ -২ জনাব এক্সকোডারকে ( S<¥Ðf³L-> S€<³S)
-১ ধন্যবাদ একটি কৌশল থেকে চুরি করেছেন ডেনিসের উত্তরটির পূর্ববর্তী সংশোধন ( ṗ2’Œc-> p`⁺’- আরও বেশি রিলান্ড্যান্ট মামলা তবে গল্ফায়ার!)

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

একটি পূর্ণ প্রোগ্রাম একটি পূর্ণসংখ্যা গ্রহণ করে ফলাফল মুদ্রণ করে।

এটি অনলাইন চেষ্টা করুন! (60 বছরের কম বয়সী 20+ পরীক্ষার কেসগুলি সম্পূর্ণ করতে খুব ধীর)

কিভাবে?

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

জাভাস্ক্রিপ্ট (ES7), 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কোনও আউটপুট না পাই, আমি কি কিছু ভুল করছি?
gggg

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