পাইথাগোরাস'র অন্যান্য লেগ


33

পাইথাগোরাস যুদ্ধে তাঁর পা উড়িয়ে দিয়েছিল। এটি কেটে ফেলা হয়েছিল, এবং যদিও তিনি প্রায় মারা গেছেন, তিনি টান দিয়েছিলেন এবং পুরোপুরি পুনরুদ্ধার করেছিলেন। এখন ক্রাচ নিয়ে এক বছর হাঁটার পরে তিনি কৃত্রিম পা পাওয়ার সৌভাগ্য পান! জিনিসটি হ'ল, বেশ কয়েকটি ফিট আছে তবে কোনটি?

কাজটি

ইনপুট হিসাবে ধনাত্মক পূর্ণসংখ্যা দেওয়া যা পাইথাগোরিয়ান ট্রিপলের এক পায়ে দৈর্ঘ্য, অন্য পায়ে সমস্ত সম্ভাবনা আউটপুট দেয়। উদাহরণস্বরূপ, সর্বকনিষ্ঠ পাইথাগোরিয়ান ট্রিপল (3,4,5), যা 3 এবং 4 দৈর্ঘ্যের দুটি পা এবং একটি দৈর্ঘ্যের 5 অনুমানের একটি ত্রিভুজ গঠন করে।

উদাহরণ

Leg:5
12

Leg:28
21
45
96
195

Leg:101
5100

Leg:1001
168
468
660
2880
3432
4080
5460
6468
10200
38532
45540
71568
501000

নিয়ম

  • ইনপুটটি একক ধনাত্মক পূর্ণসংখ্যা হবে n
  • আউটপুট যেকোন বেসে, যে কোনও ডিলিমিটারের সাথে, যে কোনও বেসে (যদিও এই বেসটি অবশ্যই সামঞ্জস্যপূর্ণ হতে পারে), এবং alচ্ছিক খোলার এবং বন্ধ হওয়ার ধনুর্বন্ধনী এবং alচ্ছিক ট্রেলিং হোয়াইটস্পেসের সাথে থাকতে পারে। অর্থাৎ 1 2 3, [1,2,3]আর 1,11,111এই সব আউটপুট স্পেসিফিকেশন মাপসই করা হবে।
  • আপনি ধরে নিতে পারেন যে nআপনার ভাষার সীমা (লাইব্রেরি ব্যবহার না করে) এর চতুর্থ মূলের এক চতুর্থ অংশের চেয়ে বড় কখনও হবে না। অনুশীলনে, আপনি ধরে নিতে পারেন ইনপুটটি এই বা 10,000 এর মধ্যে কম হবে, যে কোনওটিই কম।

পাইথাগোরাস আপনার জন্য অপেক্ষা করছে, তাই আপনার কোডটি দ্রুত এবং সংক্ষিপ্ত লিখুন!


18
সে আসলেই এক অদ্ভুত লোক। কম্পিউটার উদ্ভাবিত হওয়ার জন্য তিনি কয়েক হাজার বছর অপেক্ষা করতে ইচ্ছুক, তবে আরও কয়েকশো বাইট পড়তে আরও কয়েক ন্যানো সেকেন্ড নয়। খুব সূক্ষ্ম মানুষ, কমপক্ষে বলতে গেলে to
কর্সিকা

উত্তর:



11

জেলি , 8 বাইট

²R²+²Æ²O

এই উত্তরটি প্রতিযোগিতামূলক নয়, কারণ এটি এমন বৈশিষ্ট্যগুলি ব্যবহার করে যা চ্যালেঞ্জ পোস্ট হওয়ার পরে প্রয়োগ করা হয়েছে। এটি অনলাইন চেষ্টা করুন!

এই পদ্ধতিটি ভাসমান পয়েন্ট গণিত ব্যবহার করে না, সুতরাং যতক্ষণ না মধ্যবর্তী তালিকাগুলি স্মৃতিতে মাপসই করতে পারে ততক্ষণ এটি সঠিক উত্তর দেবে।

ধারণা

যদি (ক, খ, সি) পাইথাগোরিয়ান ট্রিপল হয়, তবে ক, এম, এন কঠোরভাবে ধনাত্মক পূর্ণসংখ্যার সমষ্টি {এ, বি} = {কিমি - কে , কিমিএন} ধারণ করে।

বিশেষ করে, এর অর্থ এই যে একটি <b 2 এবং খ <একটি 2 , তাই ইনপুট জন্য একটি কেবলমাত্র আমরা যদি পরীক্ষা করতে পারবেন একটি 2 + খ 2 প্রত্যেকের জন্য একটি নিখুঁত বর্গাকার হয় মধ্যে {1, ... একটি 2 }

কোড

            Input: x

²           Compute x².
 R          Get get range 1 ... x².
  ²         Square each integer in that range.
   +²       Add x² to each resulting square.
     Ʋ     Check if the resulting sums are perfect squares.
       O    Get all indices of ones.

10

জুলিয়া, 35 বাইট

n->filter(i->hypot(i,n)%1==0,1:n^2)

এটি একটি বেনামে ফাংশন যা একটি পূর্ণসংখ্যা গ্রহণ করে এবং একটি অ্যারে প্রদান করে।

i1 থেকে ইনপুট স্কোয়ারের প্রত্যেকের জন্য , আমরা জুলিয়ার অন্তর্নির্মিত hypotফাংশনটি ব্যবহার করে হাইপোপেনজটি গণনা করি এবং ভগ্নাংশটি 0 হয় কিনা তা নির্ধারণ করি so তাই, আমরা এটি রাখি, অন্যথায় এটি বাদ নেই luded


6

সিজেম, 17 বাইট

{:A2#{Amh1%!},1>}

এটি একটি বেনাম ফাংশন যা স্ট্যাক থেকে একটি পূর্ণসংখ্যা পপ করে এবং বিনিময়ে একটি অ্যারে ছেড়ে দেয়।

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

ধারণা

যদি (ক, খ, সি) পাইথাগোরিয়ান ট্রিপল হয়, তবে ক, এম, এন কঠোরভাবে ধনাত্মক পূর্ণসংখ্যার সমষ্টি {এ, বি} = {কিমি - কে , কিমিএন} ধারণ করে।

বিশেষ করে, এর অর্থ এই যে একটি <b 2 এবং খ <একটি 2 , তাই ইনপুট জন্য একটি কেবলমাত্র আমরা যদি পরীক্ষা করতে পারবেন একটি 2 + খ 2 প্রত্যেকের জন্য একটি নিখুঁত বর্গাকার হয় মধ্যে {1, ... একটি 2 }

কোড

:A               Save the input in A.
  2#             Square it.
    {      },    Filter; for each B in {0, ..., A**2}:
     Amh           Calculate the hypotenuse of (A, B).
        1%!        Apply logical NOT to its fractional part.
                 Keep B if ! pushed 1.
             1>  Discard the first kept B (0).  

4

জাভাস্ক্রিপ্ট ES6, 60 62

অন্যান্য উত্তর হিসাবে একই, 1 থেকে a * a-1 এ চেক করা হচ্ছে

a=>[...Array(a*a).keys()].filter(b=>b&&!(Math.hypot(a,b)%1))

ES6- এ একটি পরিসীমা তৈরির সবচেয়ে সংক্ষিপ্ততম উপায় @ Mwr247 থেকে Thx

2 বাইট সংরক্ষণ করেছেন THX @ETH প্রোডাকশন


অসাধারণ! আমি মনে করি আপনি একটি বিল্ট-ইন দিয়ে কয়েকটি বাইট সংরক্ষণ করতে পারেন:a=>[...Array(a*a).keys()].filter(b=>b&&!(Math.hypot(a,b)%1))
ETH প্রোডাকশনগুলি

@ ইথ প্রডাকশনস থেক্স, নতুন গণিত বিল্টিনগুলি সম্পর্কে আমাকে আরও জানতে হবে
edc65

সুবিধামতভাবে তারা ইতিমধ্যে আপনার লিঙ্ক করা পৃষ্ঠায় আলোচনা করা হচ্ছে। (আমি নিজেই এই হাইপোটটি পরামর্শটি দিতাম তবে আমি তখন লগইন করিনি))
নীল

3

সি, 96 বাইট

পর্যায়ক্রমে ইনক্রিমেন্ট y(অন্য লেগ) এবং z(অনুমান) যতক্ষণ না তাদের পার্থক্যটি 1 এ নেমে আসে 1 প্রতিটি পথে আপনি যে সঠিক ম্যাচের c==0মুখোমুখি হন ( ) আউটপুট করুন।

int x,y,z;main(int c,char**a){for(x=z=atoi(a[1]);++y<z;c=x*x+y*y-z*z,c?z+=c>0:printf("%d ",y));}

সংকলিত প্রোগ্রামটিকে n দিয়ে প্যারামিটার হিসাবে কল করুন ; এটি দশমিক সংখ্যার একটি স্থান-বিভাজিত তালিকা আউটপুট দেবে।

অবশ্যই স্বল্পতম নয়; আমি দ্রুততম পেয়ে আরাম পেতে পারি।

$ time ./pyth 9999
200 2020 13332 13668 16968 44440 45360 54540 55660 137532 164832 168168 413080 494900 504900 617120 1514832 1851468 4544540 5554440 16663332 49990000 
real    0m0.846s
user    0m0.800s
sys     0m0.000s


3

ওল্ফ্রাম ভাষা (ম্যাথমেটিকা) , 40 বাইট

b/.Solve[#^2+b^2==c^2,PositiveIntegers]&

আমি এর একটি অননুমোদিত ফর্ম ব্যবহার করছি Solve: যখন ভেরিয়েবলের তালিকা বাদ দেওয়া হয়, তারপরে Solveএক্সপ্রেশনটিতে সমস্ত চিহ্নগুলির সমাধান করার জন্য ডিফল্ট হয়। আমরা আরও নিয়মিত 6 টি বাইট সংরক্ষণ করি Solve[#^2+b^2==c^2,{b,c},PositiveIntegers]

PositiveIntegersগাণিতিকের 12 সংস্করণে নতুন এবং এটি টিআইওতে উপলব্ধ নয় । ডেস্কটপে ম্যাথমেটিকায়, আমরা পাই

F = b/.Solve[#^2+b^2==c^2,PositiveIntegers]& ;

F[5]
(*    {12}    *)

F[28]
(*    {21, 45, 96, 195}    *)

F[101]
(*    {5100}    *)

F[1001]
(*    {168, 468, 660, 2880, 3432, 4080, 5460, 6468, 10200, 38532, 45540, 71568, 501000}    *)

2

পাইথন 2, 53 বাইট

lambda n:[i for i in range(1,n*n)if abs(i+n*1j)%1==0]

absঅনুমানের দৈর্ঘ্য গণনা করার জন্য জটিল ব্যবহার করে একটি সরল সমাধান । এটি n*nঅন্য লেগের জন্য উপরের সীমা হিসাবে ব্যবহার করা নিরাপদ কারণ এটি (n*n)^2 + n^2 < (n*n+1)^2। আমি পরিবর্তে পুনরাবৃত্তি ব্যবহার করার চেষ্টা করেছি তবে ছোট কিছু পাই নি।


2

গুরুতরভাবে, 20 বাইট

,;╗ªDR;`╜@ÇA1@%Y`M@░

এক্সনোর পাইথন উত্তর হিসাবে একই কৌশল: i in range(1,n*n)কোথায় মানগুলি পরীক্ষা abs(i+nj) % 1 == 0করে তালিকাটি আউটপুট করুন। এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

,;╗    get input and save a copy in register 0
ªDR;   push two copies of range(1,n*n)
`╜@ÇA1@%Y`M    map the function across one of the ranges:
    ╜@ÇA         compute abs(i+nj)
    1@%Y         push 1 if result % 1 is 0, else 0
M@░    swap the two lists, take values in the original range where the corresponding values in the second range are truthy


2

এপিএল (এনএআরএস), 373 চর, 746 বাইট

C←{h←{0=k←⍺-1:,¨⍵⋄(k<0)∨k≥i←≢w←⍵:⍬⋄↑,/{w[⍵],¨k h w[(⍳i)∼⍳⍵]}¨⍳i-k}⋄1≥≡⍵:⍺h⍵⋄⍺h⊂¨⍵}⋄P←{1≥k←≢w←,⍵:⊂w⋄↑,/{w[⍵],¨P w[a∼⍵]}¨a←⍳k}⋄d←{∪×/¨{k←≢b←1,π⍵⋄∪{b[⍵]}¨↑∪/101 1‼k k}⍵}⋄t←{(-/k),(×/2,⍵),+/k←⍵*2}⋄b←{⍬≡a←3 C d w←⍵:(⊂1,⍵,1)⋄(⊂1,⍵,1),a/⍨{⍵[2]>⍵[3]}¨a←↑∪/P¨,a/⍨{w=×/⍵}¨a}⋄u←{(↑⍵),2÷⍨(+/a),-/a←1↓⍵}⋄t1←{(↑¨⍵)×t¨1↓¨⍵}⋄f1←{0=2∣⍵:↑¨t1 b⍵÷2⋄{2⊃⍵}¨t1 u¨b⍵}⋄f←{m←⎕ct⋄⎕ct←0⋄r←f1⍵⋄⎕ct←m⋄r}

মন্তব্য:

C: ⍺ combination in ⍵ list
P: permutations  in ⍵ list
d: divisors of ⍵ unsigned
t: Pythagorian triple from ⍵ list 2 unsigned
b: if argument ⍵ is one unsigned it would return the list of (k,i,j) where 
   k,i,j are all divisors of ⍵, and ⍵=k×i×j and i>j
u: from one triple (k,i,j) return (k,(i+j)/2,(i-j)/2)
t1: apply (k,i,j) to t in the way  k×t i,j 
f: the function of this exercise

সম্ভাব্য মি, এন, যা সমস্ত পাইথাগরিয়ান ট্রিপল টি হিসাবে লেগ হিসাবে ইনপুট রয়েছে তা ব্যবহার করে উত্পন্ন করার জন্য ধারণাটি ইনপুট হবে। টেস্ট:

  f 18298292829831839x
167413760243137645229428509060960 15219432749376149566311682641900 99808869980900940 
  1383584795397831778755607512840 
  f 5
12
  f 28
195 96 21 45 
  f 101
5100
  f 1001
501000 6468 38532 2880 468 660 168 5460 45540 4080 71568 3432 10200 
  ≢f 1001
13
  f 1663481166348349x
1383584795397831778755607512900 
  f 198820182831x
19764732550476133587280 346749693868002343608 5664631173992 6083327962596530720 613900915408 115583231289334114460 
  18249983887789596492 1883559626820 1040249081604007030900 54749951663368790920 6588244183492044529092 
  265093577108 2196081394497348176360 

2

এপিএল (ডায়ালগ প্রসারিত) , 15 14 বাইট এসবিসিএস

বেনামে ট্যাসিট প্রিফিক্স ফাংশন।

(⍸⊢(+∊⊢)⍳×⍳)×⍨

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

×⍨ বর্গ (লিটার। গুণনের সেলফি) যুক্তি

() নিম্নলিখিত বেনামে tacit ফাংশন প্রয়োগ করুন:

argument n আর্গুমেন্টের মাধ্যমে 1 টি

 সংখ্যাবৃদ্ধি দ্বারা ɩ যুক্তি মাধ্যমে ntegers 1 (অর্থাত বর্গ)

⊢() আর্গুমেন্টের সাথে বাম আর্গুমেন্ট হিসাবে নিম্নলিখিত বেনামী ট্যাসিট ফাংশনটি প্রয়োগ করুন:

  + যোগফল

   একজন সদস্য

   এটা?

s n সত্যের সূত্র


1

পার্ল 5, 43 বাইট

$i=<>;{sqrt(++$_**2+$i**2)!~/\./&&say;redo}

আপনি যদি স্ক্রিপ্টটি সমাপ্ত করতে চান, তবে এক্সনোরের ব্যাখ্যা অনুসারে আমরা অন্যান্য পা কেবলমাত্র এনও পর্যন্ত পরিদর্শন করতে পারি , সুতরাং আমাদের কাছে 48 বাইট রয়েছে:

map{sqrt(++$_**2+$i**2)!~/\./&&say}1..($i=<>)**2



1

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

nDLn+Ųƶ0K

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

nDLʒnIn+Ų

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

ব্যাখ্যা:

n           # Take the square of the (implicit) input-integer
 D          # Duplicate it
  L         # Create a list in the range [1, input^2]
   n        # Square each value in this list
    +       # Add the input^2 we duplicated to each
     Ų     # Check for each of these if it's a square (1 if truthy; 0 if falsey)
       ƶ    # Multiply each value by its 1-based index
        0K  # Remove all 0s from the list
            # (after which the result is output implicitly)

nDL         # Same as above
   ʒ        # Filter this list by:
    n       #  Get the square of the current number
     In+    #  Add the squared input to it
        Ų  #  And check if it's a square
            # (after the filter, implicitly output the result)

1

ম্যাথগল্ফ , 9 বাইট

²╒gƲk²+°

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

²3/9 বাইট নেয় এমন কোনও গুলি মুছে ফেলার জন্য কোনও দুর্দান্ত উপায় খুঁজে পাওয়া যায়নি । অন্যথায় এটি বেশ সোজা-এগিয়ে

ব্যাখ্যা

²           square input
 ╒          range(1,n+1)
  gÆ        filter list using next 5 operators
    ²       square list element
     k²     push input squared
       +    pop a, b : push(a+b)
        °   is perfect square

1

জাভা 8, 72 বাইট

n->{for(int i=0;++i<n*n;)if(Math.hypot(i,n)%1==0)System.out.println(i);}

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

ব্যাখ্যা:

n->{                           // Method with integer as parameter and no return-type
  for(int i=0;++i<n*n;)        //  Loop `i` in the range (0, n²)):
    if(Math.hypot(i,n)         //   If sqrt(i² + n²)
       %1==0)                  //   has no decimal digits after the comma (so is an integer)
      System.out.println(i);}  //    Output `i` with trailing newline
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.