ত্রিভুজগুলির সংখ্যা গণনা করুন


22

ধনাত্মক পূর্ণসংখ্যার একটি তালিকা দেওয়া হয়েছে, আমরা এমন ত্রিভুজগুলির সংখ্যাটি সন্ধান করুন যেগুলি তাদের দৈর্ঘ্যের ইনপুট তালিকার তিনটি স্বতন্ত্র এন্ট্রি দ্বারা প্রতিনিধিত্ব করে।

(অনুপ্রেরণা সিআর থেকে আসে ))

বিস্তারিত

  • A তিনটি বাহুর দৈর্ঘ্যের সমস্ত ক্রম কঠোর ত্রিভুজ বৈষম্য পূরণ করলে একটি ত্রিভুজ গঠিত হতে পারে(এর অর্থ হ'ল , a + c> b এবং b + c> এ অবশ্যই সমস্ত কিছু রাখা উচিত))a,b,c
    a+b>c.
    a+b>ca+c>bb+c>a
  • তিন, পাশের দৈর্ঘ্য a,b,c অবশ্যই অবশ্যই তালিকার পৃথক অবস্থানে উপস্থিত থাকতে হবে, তবে অগত্যা জোড়ের মতো পৃথক হতে হবে না।
  • ইনপুট তালিকার তিনটি সংখ্যার ক্রম কোনও ব্যাপার নয়। যদি আমরা একটি তালিকা aএবং তিনটি সংখ্যা a[i], a[j], a[k](যেখানে i,j,kজোড়ায় পৃথক পৃথক) বিবেচনা করি, তবে (a[i],a[j],a[k]), (a[i],a[k],a[j]), (a[j], a[i], a[k])ইত্যাদি সমস্তকে একই ত্রিভুজ হিসাবে বিবেচনা করা হয় ।
  • ইনপুট তালিকায় কমপক্ষে 3 টি এন্ট্রি থাকতে পারে বলে ধরে নেওয়া যেতে পারে।
  • আপনি ধরে নিতে পারেন যে ইনপুট তালিকাটি ক্রমবর্ধমান ক্রমে সাজানো হয়েছে।

উদাহরণ

অনলাইনে চেষ্টা করে দেখুন এখানে একটি ছোট পরীক্ষা প্রোগ্রাম পাওয়া যাবে !

Input, Output:
[1,2,3]  0
[1,1,1]  1
[1,1,1,1] 4
[1,2,3,4] 1
[3,4,5,7] 3
[1,42,69,666,1000000] 0
[12,23,34,45,56,67,78,89] 34
[1,2,3,4,5,6,7,8,9,10] 50

এর ইনপুট [1,2,3,...,n-1,n]জন্য A002623

এর ইনপুট করতে [1,1,...,1](দৈর্ঘ্য n) এই হল A000292

প্রথম nফিবোনাচি সংখ্যার ইনপুট ( A000045 ) এটি A000004


4
আমি মনে করি একটি স্বতন্ত্র ত্রিভুজ হিসাবে গণনা করা সম্পর্কে চ্যালেঞ্জটি আরও পরিষ্কার হতে পারে। থেকে A000292 লিঙ্ক, আমি তা গ্রহণ [1,1,1,1]4 "ভিন্ন" ত্রিভুজ অনুমতি দেয়, সব [1,1,1], কোনো তিনটি 1 এর ব্যবহার মনোনীত হবে? তবে, এটি 24 নয় কারণ তিনটি 1 জনকে নিরবচ্ছিন্নভাবে বেছে নেওয়া হয়েছে, অর্থাত এটি আদেশিত তালিকার চেয়ে তিনটি সূচকের উপসেট?
xnor

2
এটি নির্দেশ করার জন্য @ এক্সনর থ্যাঙ্কস, যা সমস্ত সঠিক বলে মনে হচ্ছে - আমি কেবল বিশদে একটি পয়েন্ট যুক্ত করেছি। আমি আশা করি এটি এখন আরও স্পষ্ট করে তোলে।
flawr

উত্তর:


10

আর , 62 52 40 34 বাইট

sum(c(1,1,-1)%*%combn(scan(),3)>0)

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

পোর্ট অফ লুইস মেন্ডোর অক্টাভা সমাধান

যেহেতু a<=b<=c, ত্রিভুজ অবস্থা সমান a+b-c>0a+b-cSuccinctly ম্যাট্রিক্স পণ্য দ্বারা বন্দী করা হয় [1,1,-1] * X, যেখানে Xইনপুট অ্যারের 3-সমন্বয় নেই।

মন্তব্যগুলিতে 3 জন ভিন্ন ভিন্ন ব্যক্তির দ্বারা উন্নতি করার জন্য প্রচুর পরামর্শ ছিল:

আর , 40 বাইট

y=combn(scan(),3);sum(y[3,]<y[1,]+y[2,])

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



3
x[3]<x[1]+x[2]সমতুল্য 2*x[3]<sum(x): 51 বাইট
রবিন রাইডার

4
আসলে, 45 বাইট তৈরি করুন । একাধিক মন্তব্যের জন্য দুঃখিত!
রবিন রাইডার

1
@ রবিনরাইডার যে উরফটি [চটজলদি, সত্যিই এই পদ্ধতিটি পরিষ্কার করে দেয়।
ক্রিমিনালিভালগার


9

স্ট্যাক্স , 8 7 বাইট

-1 এর জন্য পুনরাবৃত্তিকে ধন্যবাদ !

é═rê÷┐↨

এটি চালান এবং এটি স্ট্যাক্সএল.এক্সজে ডিবাগ করুন!

প্যাকযুক্ত (8 বাইট) এবং ব্যাখ্যা:

r3SFE+<+
r           Reverse
 3S         All length-3 combinations
   F        For each combination:
    E         Explode: [5,4,3] -> 3 4 5, with 3 atop the stack
     +        Add the two shorter sides
      <       Long side is shorter? 0 or 1
       +      Add result to total

এটি একটি ঝরঝরে কৌশল। আপনার কাছে যদি নির্দেশের ক্রম থাকে যা সর্বদা 0 বা 1 এর ফলাফল দেয় এবং আপনার অ্যারে থেকে আইটেমগুলি গণনা করা দরকার যা আপনার প্রোগ্রামের শেষে সত্যবাদী ফলাফল দেয়, F..+তার চেয়ে কম বাইট কম {..f%

প্রাথমিক তালিকাটি আরোহণের অনুসারে বাছাই করা হয়েছে বলে ধরে নেওয়া হয়। এই অনুমান ব্যতীত, o8 বাইটের জন্য শুরুতে একটি আটকে দিন ।


1
r3SFE+<+7 এ প্যাক করে It এটি ফিল্টার ফলাফল যুক্ত করতে একটি ফোরচ লুপ ব্যবহার করে। সংযোজন হ'ল অপারেশনগুলির মধ্যে একটি যা কেবলমাত্র একটি একক উপাদান উপস্থিত থাকে-
পুনরাবৃত্তি

6

হাস্কেল , 49 বাইট

([]%)
[c,b,a]%l|a+b>c=1
p%(h:l)=(h:p)%l+p%l
_%_=0

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

পুনরাবৃত্তভাবে l(বিপরীত) এর সমস্ত অনুচ্ছেদ উত্পন্ন করে , এবং কোন দৈর্ঘ্য -3 ত্রিভুজ গঠন করে তা পরীক্ষা করে।

50 বাইট

f l=sum[1|[a,b,c]<-filter(>0)<$>mapM(:[0])l,a+b>c]

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

একই ধারণাটি, mapMপ্রতিটি মানকে lনিজের মধ্যে (অন্তর্ভুক্ত) বা 0(বাদ দিন) ম্যাপিংয়ের মাধ্যমে উপসর্গগুলি তৈরি করে ।

50 বাইট

([]%)
p%(b:t)=sum[1|c<-t,a<-p,a+b>c]+(b:p)%t
_%_=0

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

মধ্যবর্তী উপাদানটি নিতে প্রতিটি বিভাজন বিন্দু চেষ্টা করে b

51 বাইট

f(a:t)=f t+sum[1|b:r<-scanr(:)[]t,c<-r,a+b>c]
f _=0

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

ফাংশন q=scanr(:)[]প্রত্যয়গুলির তালিকা তৈরি করে। সমান উপাদানগুলিকে সঠিক সময় হিসাবে অন্তর্ভুক্ত করার বিষয়টি বিবেচনা করার প্রয়োজন থেকে প্রচুর ঝামেলা আসে।

52 বাইট

q=scanr(:)[]
f l=sum[1|a:r<-q l,b:s<-q r,c<-s,a+b>c]

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

সহায়ক ফাংশন q=scanr(:)[]প্রত্যয়ের তালিকা তৈরি করে।

57 বাইট

import Data.List
f l=sum[1|[a,b,c]<-subsequences l,a+b>c]

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


4

ব্র্যাচল্যাগ , 11 বাইট

{⊇Ṫ.k+>~t}ᶜ

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

আমি আমার পুরানো সমাধানে বাছাই করা ইনপুটটির সুবিধা নিতে ভুলে থাকতে পারি:

ব্র্যাচল্যাগ , 18 17 15 বাইট

{⊇Ṫ¬{p.k+≤~t}}ᶜ

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

{            }ᶜ    The output is the number of ways in which
 ⊇                 a sublist of the input can be selected
  Ṫ                with three elements
   ¬{       }      such that it is not possible to show that
     p             for some permutation of the sublist
       k+          the sum of the first two elements
         ≤         is less than or equal to
      .   ~t}      the third element.

4

পার্ল 6 , 35 বাইট

+*.combinations(3).flat.grep(*+*>*)

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

ব্যাখ্যা

এটি যে কোনও কোড, ল্যাম্বডা ফাংশনের জন্য সংক্ষিপ্ত স্বরলিপি (এটি কেবল খুব সাধারণ ক্ষেত্রে কাজ করে)। প্রতিটিই *একটি যুক্তির জন্য স্থানধারক। সুতরাং আমরা দৈর্ঘ্যের তালিকাটি নিই (এটি প্রথমটিতে প্রদর্শিত হবে *), 3 টি উপাদানের সমস্ত সংমিশ্রণ তৈরি করুন (তারা সর্বদা মূল তালিকার মতো একই ক্রমে বেরিয়ে আসে, যার অর্থ সংমিশ্রণগুলিও খুব সাজানো হয়), তালিকাটি সমতল করুন, এবং তারপরে 3-বাই -3 তালিকাটি নিয়ে যান এবং ফিল্টার করুন ( grep) কেবলমাত্র ত্রিপলগুলি সন্তুষ্ট হয় *+*>*, অর্থাৎ প্রথম দুটি আর্গুমেন্টের যোগফল তৃতীয়টির চেয়ে বেশি। এটি সমস্ত ট্রিপল্ট দেয় এবং শেষ পর্যন্ত আমরা এগুলি দিয়ে সংখ্যার প্রসঙ্গ জোর করে তাদের গণনা করি +

(অবশ্যই আমাদের এটি কেবল "দুটি ছোট ছোট> বৃহত্তম" যোগফলের ক্ষেত্রে পরীক্ষা করা দরকার this এটি যদি ধরে থাকে তবে অন্যটি তুচ্ছভাবে ধরে রাখে, যদি এটি না হয় তবে ত্রিভুজটি সঠিক ত্রিভুজের দৈর্ঘ্যকে বোঝায় না এবং আমরাও করি না আরও তাকাতে হবে।)


4

রেটিনা , 55 বাইট

\d+
*
L$`_+
$<'
%L$w`(,_+)\b.*\1(_*)\b(?<=^_+\2,.*)
_
_

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেসগুলি অন্তর্ভুক্ত রয়েছে তবে 5 তম ক্ষেত্রে মানগুলি হ্রাস পেয়ে আজ এটি শেষ করার অনুমতি দেয়। সাজানো ইনপুট ধরে নিই। ব্যাখ্যা: রেজেক্সেসগুলি একের বেশি জিনিস মেলাতে পছন্দ করে না। একটি সাধারণ রেজেক্স ত্রিভুজের একটি সংক্ষিপ্ততম স্তর হতে পারে এমন সমস্ত মান সন্ধান করতে সক্ষম হবে। অক্ষিপট এর vবিকল্প এখানে সাহায্য না, একটি lookahead এড়াতে ছাড়া। তবে রেটিনার wবিকল্পটি কিছুটা সহায়ক, কারণ এটি একই সাথে সংক্ষিপ্ততম এবং দীর্ঘতম উভয় পা খুঁজে পেতে সক্ষম হবে। যদিও এই চ্যালেঞ্জের পক্ষে এটি যথেষ্ট নয়, কারণ একাধিক মাঝারি পা থাকতে পারে।

\d+
*

ইনপুটটি আনারিতে রূপান্তর করুন।

L$`_+

প্রতিটি ইনপুট নম্বর ...

$<'

... একটি লাইন তৈরি করুন যা আসল অ্যারেটি সংখ্যায় শুরু করার জন্য কাটা হয়েছে। $'ম্যাচের পরে স্ট্রিংটি সাধারণত বোঝায় তবে <আগের বিভাজকের পরে স্ট্রিং বোঝাতে এটি পরিবর্তন করে 2 বাইট অপসারণ এড়িয়ে চলেন $&। প্রতিটি লাইন সংক্ষিপ্ত লেগ হিসাবে সেই সংখ্যাটি ব্যবহার করে সমস্ত সম্ভাব্য সমাধানের প্রতিনিধিত্ব করে।

%L$w`(,_+)\b.*\1(_*)\b(?<=^_+\2,.*)
_

এই প্রতিটি লাইনের জন্য, সমস্ত সম্ভাব্য মাঝারি এবং দীর্ঘতম পাগুলি সন্ধান করুন তবে এটি নিশ্চিত করে যে পার্থক্যটি প্রথম পায়ের চেয়ে কম less _প্রতিটি পায়ে মিলে মিশ্রণের জন্য আউটপুট এ ।

_

প্রাপ্ত ত্রিভুজগুলির মোট সংখ্যা গণনা করুন।




3

05 এ বি 1 ই , 12 10 9 বাইট

আমার প্রথমবারের মত 05AB1E! [গ্রিমি] -1 এর জন্য ধন্যবাদ!

3.Æʒ`α›}g

এটি অনলাইন চেষ্টা করুন! বা পরীক্ষার স্যুট

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

3.Æʒ`α›}g
3.Æ          List of length-3 combinations
   ʒ   }g    Count truthy results under operation:
    `          Push the two shorter sides, then the long one
     α         Absolute difference (negated subtraction in this case)
      ›        Remaining short side is longer?

2
আমি নিশ্চিত যে গ্রেমি আরও ছোট কিছু নিয়ে আসবে, যেহেতু তিনি সাধারণত আমার উত্তরগুলিতে করেন। ;) তবে আপনার উত্তরটি আমার মনে যা ছিল তা মোটামুটি মিলে যায়। কেবলমাত্র পার্থক্য হ'ল আমি ফিল্টারটির ভিতরে (ট্রিপল সোয়াপ) ìপরিবর্তে ফিল্টারের আগে (প্রতিটি বিপরীত) ব্যবহার করেছি Š। বিকল্পভাবে, আপনি এর ε...}Oপরিবর্তে এছাড়াও ব্যবহার করতে পারেন ʒ...}g, তবে বাইট-গণনা একই রয়েছে। পিএস: আপনার বাইট গণনা 10 এবং টিআইও সঠিক, তবে আপনার প্রকৃত উত্তরে এখনও একটি অপ্রয়োজনীয় স্পষ্টতা রয়েছে yযা মুছে ফেলা যায়। :) যদিও প্রথম প্রথম উত্তর, তাই আমার কাছ থেকে +1।
কেভিন ক্রুইজসেন

@ কেভিন ক্রুজেসেনকে হতাশ করার জন্য দুঃখিত, আমার 3.ÆʒRÆd_}gযা কিছু আছে তা হ'ল এটি একই বাইকউন্ট।
গ্রিমি

2
@KevinCruijssen ওহ আসলে আমি অনুমান 3.Æʒ`α›}g9. হয়
Grimmy

@ গ্রিমি হাহা, এটি জানতেন। এক্সডি প্রটিটি সোজা-ফরোয়ার্ড গল্ফ এখন আমি এটি দেখতে পেয়েছি .. তবে আপনি সাধারণত এই জাতীয় গল্ফগুলি (বা সাধারণভাবে গল্ফ ..) নিয়ে আসার চেয়ে ভাল, যেমনটি আমি আমার প্রথম মন্তব্যে উল্লেখ করেছি। ; পি
কেভিন ক্রুইজসেন



2

Zsh , 66 বাইট

for a;z=$y&&for b (${@:2+y++})for c (${@:3+z++})((t+=c<a+b))
<<<$t

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

তুলনামূলকভাবে সোজা, সাজানো ইনপুটটির সুবিধা গ্রহণ করে এবং forশিরোনামে ইনক্রিমেন্টিং ( পিতামাতার লুপের জন্য একবার বৃদ্ধি হয় )।

for a;{
  z=$y
  for b (${@:2+y++});{   # subarray starting at element after $a
    for c (${@:3+z++})   # subarray starting at element after $b
      ((t+=c<a+b))
  }
}

2

এক্সেল ভিবিএ, 171 164 152 বাইট

-26 বাইটস টেলরস্কটকে ধন্যবাদ

Sub z
t=[A:A]
u=UBound(t)
For i=1To u-2
For j=i+1To u-1
For k=j+1To u
a=t(i,1):b=t(j,1):c=t(k,1)
r=r-(a+b>c)*(b+c>a)*(c+a>b)
Next k,j,i
Debug.?r
End Sub

ইনপুটটি A:Aসক্রিয় শীটের সীমার মধ্যে রয়েছে। আউটপুট তাত্ক্ষণিক উইন্ডোতে।

যেহেতু এটি একটি কলামের প্রতিটি কক্ষের প্রতিটি সংমিশ্রণের দিকে তাকিয়ে যা 2 20 টি সেল লম্বা (যা প্রায় 260 টি সংমিশ্রণ), তাই এই কোডটি দ্রুত নয়। আপনি এটিকে আরও দ্রুত তৈরি করতে পারেন তবে বাইটস ব্যয়ে।


আপনি ()সাব স্টেটমেন্টে স্পেসটি রেখে Debug.? rদিতে পারেন এবং ড্রপ Next:Next:Nextকরতে পারেন Next k,j,i। এটি থেকে আলাদা - এটি এখনও 2 ** 60 টি সমন্বয় করছে তবে এটি কাজ করে
টেলর স্কট

ওহ ওহে, আপনি যদি আইএফ লাইনটি প্রতিস্থাপন করে আরও কিছু বাদ দিতে পারেনr=r-(a+b>c)*(b+c>a)*(c+a>b)
টেলর স্কট

1

কাঠকয়লা , 17 বাইট

IΣ⭆θ⭆…θκ⭆…θμ›⁺νλι

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সাজানো ইনপুট ধরে নিই। ব্যাখ্যা:

   θ                Input array
  ⭆                 Map over elements and join
      θ             Input array
     …              Truncated to length
       κ            Outer index
    ⭆               Map over elements and join
          θ         Input array
         …          Truncated to length
           μ        Inner index
        ⭆           Map over elements and join
              ν     Innermost value
             ⁺      Plus
               λ    Inner value
            ›       Is greater than
                ι   Outer value
 Σ                  Take the digital sum
I                   Cast to string for implicit print





1

পার্ল 5 ( -p), 55 52 বাইট

রিজেক্স ব্যাকট্র্যাকিং ব্যবহার করে, -3 বাইটগুলি ব্যর্থ এবং ব্যাকট্র্যাকের ^পরিবর্তে @ কউজ কোয়্যাককে ধন্যবাদ জানায় (?!)

$d='(\d++)';$_=/$d.* $d.* $d(?{$n++if$1+$2>$3})^/+$n

অথবা

$_=/(\d++).* (\d++).* (\d++)(?{$n++if$1+$2>$3})^/+$n

Tio


হতে (?!)পারে ^?
ক্রিটসি লিথোস

ধন্যবাদ এটি ব্যর্থ / ব্যাকট্র্যাক ভালভাবে
নাহুয়েল ফুইলুল

1

জেলি , 9 বাইট

œc3+>ƭ/€S

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

একটি মোনাডিক লিঙ্কটি তার যুক্তি হিসাবে পূর্ণসংখ্যার বাছাই করা তালিকা গ্রহণ করে এবং ত্রিভুজগুলির সংখ্যা ফেরত দেয়।

ব্যাখ্যা

œc3       | Combinations of length 3
     ƭ/€  | Reduce each using each of the following in turn:
   +      | - Add
    >     | - Greater than
        S | Sum (counts the 1s)

বিকল্প 9s:

œc3Ṫ€<§ƊS
œc3Ṫ<SƊ€S




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