ত্রিভুজের ক্ষেত্রফল


16

আপনার জন্য আরও একটি সহজ চ্যালেঞ্জ।

তোমার কাজ

এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা ইনপুট নেয়, এতে 3- টি জোড় x- এবং y- স্থানাঙ্ক থাকে এবং তাদের ভিতরে গঠিত ত্রিভুজটির ক্ষেত্রফল গণনা করে। যারা এটি হিসাব করবেন কীভাবে মনে করতে পারেন না, আপনি এটি এখানে খুঁজে পেতে পারেন ।

উদাহরণ:

1,2,4,2,3,7       # input as x1,y1,x2,y2,x3,y3
7.5               # output

ওল্ফ্রাম আলফা এ দেখুন

কিছু বিবেচনা:

  • ইনপুটটি ছয় বেস 10 ধনাত্মক পূর্ণসংখ্যার হবে।
  • আপনি ধরে নিতে পারেন ইনপুটটি কোনও যুক্তিসঙ্গত বিন্যাসে রয়েছে
  • পয়েন্টগুলি সর্বদা একটি বৈধ ত্রিভুজ গঠন করে।
  • আপনি ধরে নিতে পারেন ইনপুটটি ইতিমধ্যে কোনও ভেরিয়েবলে সঞ্চিত রয়েছে t
  • বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতেছে!

সম্পাদনা: কোনও বিভ্রান্তি এড়াতে আমি সরল করে দিয়েছি কীভাবে বর্তমান কোডগুলির কোনও বিপদ ছাড়াই ইনপুটটিকে কীভাবে व्यवहार করা উচিত।

মনে রাখবেন যে আপনার প্রোগ্রাম / ফাংশনটি অবশ্যই একটি বৈধ ক্ষেত্র আউটপুট করবে, সুতরাং এটি আউটপুট হিসাবে নেতিবাচক সংখ্যা দিতে পারে না


1
পুন: আপনার সম্পাদনা এর অর্থ কি এই যে আমার কাছে জোড়ার প্রকৃত অ্যারে থাকতে পারে (যেমন, [[1, 2], [4, 2], [3, 7]]) T?
ডেনিস 21

4
আমি এখনও বিভ্রান্ত পোস্টটি এখনও "3 জোড়া" এবং "ছয় ... পূর্ণসংখ্যা" উভয়ই বলেছে। নোট করুন যে কোনও একটি অপসারণ করলে কিছু উত্তর অকার্যকর হবে।
xnor

1
পোস্ট এবং উত্তর দেওয়ার পরে একটি প্রশ্ন পরিবর্তন দেখতে পছন্দ করি না। তবে এবার আমি আরও 2 টি বাইট সংরক্ষণ করতে পারি, তাই ঠিক আছে
edc65

1
যদি আমরা তাদের তিনটি জোড় হিসাবে নিতে পারি, তবে আমরা কী তাদের বহুমাত্রিক অ্যারে হিসাবে নিতে পারি? তা হল, [1 2;4 2;3 7](জুলিয়া সিনট্যাক্স ব্যবহার করে)?
গ্লেন ও

2
@ ইয়িমিনরং একটি ত্রিভুজের ক্ষেত্র সংজ্ঞা অনুসারে নেতিবাচক হতে পারে না। পয়েন্টগুলি কী অর্ডারে আছে তা
বিবেচ্য নয়

উত্তর:


16

সিজেম, 18 16 বাইট

T(f.-~(+.*:-z.5*

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

ধারণা

উইকিপিডিয়ায় উল্লিখিত হিসাবে , ত্রিভুজের ক্ষেত্রফল [[0 0] [x y] [z w]]হিসাবে গণনা করা যেতে পারে |det([[x y] [z w]])| / 2 = |xw-yz| / 2

জেনেরিক ত্রিভুজটির জন্য [[a b] [c d] [e f]], আমরা এর প্রথম শীর্ষটি মূলটির সাথে অনুবাদ করতে পারি, ত্রিভুজটি অর্জন করে [[0 0] [c-a d-b] [e-a f-b]], যার ক্ষেত্রফল উপরের সূত্র ধরে গণনা করা যায়।

কোড

T                  e# Push T.
                   e# [[a b] [c d] [e f]]
   (               e# Shift out the first pair.
                   e# [[c d] [e f]] [a b]
    f.-            e# For [c d] and [e f], perform vectorized
                   e# subtraction with [a b].
                   e# [[c-a d-b] [e-a f-b]]
       ~           e# Dump the array on the stack.
                   e# [c-a d-b] [e-a f-b]
        (+         e# Shift and append. Rotates the second array.
                   e# [c-a d-b] [f-b e-a]
          .*       e# Vectorized product.
                   e# [(c-a)(f-b) (d-b)(e-a)]
            :-     e# Reduce by subtraction.
                   e# (c-a)(f-b) - (d-b)(e-a)
              z    e# Apply absolute value.
                   e# |(c-a)(f-b) - (d-b)(e-a)|
               .5* e# Multiply by 0.5.
                   e# |(c-a)(f-b) - (d-b)(e-a)| / 2

10

গণিত, 27 বাইট

Area@Polygon@Partition[t,2]

17
আমি পছন্দ করি এটি কীভাবে বিল্ট-ইন ব্যবহার করে এবং সিজাম উত্তরের চেয়ে আরও দীর্ঘ।
কারডিজিনিকেট

2
@ কারসিজেনিকেট আসল সমস্যাটি হ'ল Partition[t,2], যা 2/সিজেএম- এর সাথে মিলে যায়। ;)
মার্টিন এন্ডার

10

জাভাস্ক্রিপ্ট (ES6) 42 .44।

সম্পাদনা ইনপুট ফর্ম্যাট পরিবর্তন করা হয়েছে, আমি 2 বাইট সংরক্ষণ করতে পারি

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

(a,b,c,d,e,f)=>(a*(d-f)+c*(f-b)+e*(b-d))/2

নীচে স্নিপেট চলমান পরীক্ষা করুন একমাস্ক্রিপ্ট l অনুবর্তী ব্রাউজারে।

f=(a,b,c,d,e,f)=>(a*(d-f)+c*(f-b)+e*(b-d))/2

function test()
{
  var v=I.value.match(/\d+/g)
  I.value = v
  R.innerHTML=f(...v)
}
<input id=I onchange="test()"><button onclick="test()">-></button><span id=R></span>


1
আপনি কি মানকে মানক প্যারামিটার হিসাবে নিতে পারছেন না এবং অ্যারে তৈরিতে নিজেকে 2 টি অক্ষর সংরক্ষণ করতে পারেন?
Mwr247

@ এমডব্লিউ 247 চ্যালেঞ্জটি বলেছেThe input will be a vector with six base 10 positive integers.
edc65

আহা। আমি প্রথমে ব্যাখ্যা করেছিলাম যে অর্থ হিসাবে প্রতিটি জুটি একটি সমন্বিত ভেক্টর তৈরি করে (যেমন ওল্ফ্রাম উদাহরণ হিসাবে), ইনপুট নিজেই একটি অ্যারেতে সীমাবদ্ধ থাকার বিপরীতে, এবং এর ফলে অন্যান্য ফর্ম্যাটগুলি ব্যবহার করতে পারে। এখন আরও বোধগম্যতা তৈরি করে।
Mwr247

@ Mwr247 এখন আপনি ঠিক বলেছেন
edc65

8

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

abs(det(t[1:2].-t[[3 5;4 6]]))/2

ক্রস প্রোডাক্টের উপযুক্ত পদগুলির একটি ম্যাট্রিক্স তৈরি করে, detফলস্বরূপ মান পেতে ব্যবহার করে, নেতিবাচক মোকাবেলা করার জন্য নিখুঁত মান নেয় এবং তারপরে 2 দ্বারা বিভক্ত হয় কারণ এটি একটি ত্রিভুজ এবং একটি সমান্তরাল নয়।


7

মতলব / অক্টাভা, 26 বাইট

আমি এখনও পর্যন্ত এটি নির্মিত সম্পর্কে জানতাম না))

polyarea(t(1:2:5),t(2:2:6))

6

জাভা, 79 88 বাইট

float f(int[]a){return Math.abs(a[0]*(a[3]-a[5])+a[2]*(a[5]-a[1])+a[4]*(a[1]-a[3]))/2f;}

কেবলমাত্র বেসিক সূত্রটি ব্যবহার করে, বিশেষ কিছু নয়।

সম্পাদনা: নিখুঁত মান নিতে ভুলে গেছেন :(


আপনি এটি রান রানযোগ্য করতে হবে না?
ডাউনরেপ_নেশন

3
উদাহরণটি কেবল একটি ফাংশন কল দেখায় এবং এটি এখানে তুলনামূলকভাবে স্বাভাবিক ডিফল্ট।
জিওবিটস 14:25

2
প্রশ্ন অনুসারে, আপনি ধরে নিতে পারেন ইনপুটটি ইতিমধ্যে 't' এর মতো কোনও ভেরিয়েবলে সঞ্চিত রয়েছে। সুতরাং, return(t[0]*(t[3]...না যথেষ্ট?
অ্যাডমবর্কবার্ক

@ টিমিডি এটি করতে বাজে মনে হচ্ছে তবে এটি 62 বাইটে নামিয়ে আনবে। হুমম .... আমি এটিকে এখনই কমপক্ষে রেখে যাব।
জিওবিটস

5

মিনকোল্যাং 0.8 , 34 বাইট

ndndn0g-n1g-n0g-n0g-1R*1R*-$~2$:N.

কেউ কিছু ডিম চান n0g?

ব্যাখ্যা

খুব সোজা। সূত্র ব্যবহার করে |(x2-x1)(y3-y1) - (x3-x1)(y2-y1)|/2

nd      x1, x1
nd      x1, x1, y1, y1
n0g-    x1, y1, y1, x2-x1
n1g-    x1, y1, x2-x1, y2-y1
n0g-    y1, x2-x1, y2-y1, x3-x1
n0g-    x2-x1, y2-y1, x3-x1, y3-y1
1R*     y3-y1, x2-x1, (y2-y1)(x3-x1)
1R*     (y2-y1)(x3-x1), (y3-y1)(x2-x1)
-       (y2-y1)(x3-x1) - (y3-y1)(x2-x1)
$~      |(y2-y1)(x3-x1) - (y3-y1)(x2-x1)|
2$:     |(y2-y1)(x3-x1) - (y3-y1)(x2-x1)|/2 (float division)
N.      Output as integer and quit.

3

জাইস্ক্রিপ্ট , 58 বাইট

একটি বেনামী ফাংশন ঘোষণা:

function(a,b,c,d,e,f){return (a*(d-f)+c*(f-b)+e*(b-d))/2};

উদাহরণ:

var nFunct = function(a,b,c,d,e,f){return (a*(d-f)+c*(f-b)+e*(b-d))/2};
print(nFunct(1,2,4,2,3,7));

জি কি করে?
স্তর নদী সেন্ট

@ স্টিভেরিলিল কিছুই না, আমি কেবল বোকা। স্থির করা হচ্ছে ...
mınxomaτ


3

পিএইচপি - 68 88 89 বাইট

মার্টজিনকে কিছু দুর্দান্ত পয়েন্টারের জন্য ধন্যবাদ!

<?=.5*abs(($t[1]-$t[5])*($t[4]-$t[2])-($t[1]-$t[3])*($t[6]-$t[2]))?>

এটি ব্যবহার করতে, area.phpএই বিষয়বস্তু দিয়ে একটি ফাইল তৈরি করুন , অতিরিক্ত লাইনটি একটি ভেরিয়েবলে ডেটা সংরক্ষণ করা হয়েছে বলে ধরে নেয় meetst অনুমিত হয় যে ডেটাগুলি চশমার অংশে এবং শেষে a একটি ক্যারেজ রিটার্ন যুক্ত করে যাতে আউটপুটটি সুন্দর এবং পৃথক হয়:

<?php $t = $argv; ?>
<?=.5*abs(($t[1]-$t[5])*($t[4]-$t[2])-($t[1]-$t[3])*($t[6]-$t[2]))?>
␍

তারপরে কমান্ড লাইনে স্থানাঙ্কগুলি x₁ y₁ x₂ y₂ x₃ y₃যেমন প্রদান করুন

$ php area.php 1 2 4 2 3 7
7.5

"আপনি ধরে নিতে পারেন ইনপুটটি ইতিমধ্যে কোনও চলকতে সঞ্চিত রয়েছে t।" $a-> $t, $a=$argv;9 বাইট সাশ্রয় সরান
মার্টিজেন

এর পরে, আপনি আরও 7 বাইট সংরক্ষণ করে এর <?php echoসাথে প্রতিস্থাপন করতে পারেন<?=
মারটিজন

আপনি বলতে পারেন যে এটি পিএইচপি 4.1 register_globals=Onআপনার php.iniফাইলে রয়েছে (ডিফল্ট)। Php.net/manual/en/security.globals.php-
ইসমাইল মিগুয়েল


2

আর, 37 বাইট

cat(abs(det(rbind(matrix(t,2),1))/2))

স্থানাঙ্কের ভেক্টরকে ম্যাট্রিক্সে রূপান্তর করে এবং 1 এর এক সারিতে ট্যাকগুলি।
নির্ধারক গণনা করে এবং 2 দ্বারা ভাগ করে
নিখুঁত ফলাফল প্রদান করে। যদি অর্ডারটি সর্বদা ঘড়ির কাঁটার দিকে থাকে তবে এটির absপ্রয়োজন হবে না।

> t = c(1,2,4,2,3,7)
> cat(det(rbind(matrix(t,2),1))/2)
7.5

2

পাইথন 2, 48 47 50 বাইট

খুব সহজ; মান সমীকরণ অনুসরণ করে:

lambda a,b,c,d,e,f:abs(a*(d-f)+c*(f-b)+e*(b-d))/2.

অন্যান্য, একইভাবে সহজ পদ্ধতির দীর্ঘতর:

def a(a,b,c,d,e,f):return abs(a*(d-f)+c*(f-b)+e*(b-d))/2. # 57
lambda t:abs(t[0]*(t[3]-t[5])+t[2]*(t[5]-t[1])+t[4]*(t[1]-t[3]))/2. # 67
def a(t):return abs(t[0]*(t[3]-t[5])+t[2]*(t[5]-t[1])+t[4]*(t[1]-t[3]))/2. # 74

নির্ধারিত ফাংশনে পাইথনের অ্যাক্সেস অলস মাধ্যমে

ধন্যবাদ muddyfish 1 বাইট এবং জন্য xnor একটি ত্রুটি ধরার জন্য।


আপনি অপসারণ করতে পারেন 0থেকে 2.0ছুটি2.
নীল

বেশ সত্য, @ মুডিফিশ, ধন্যবাদ!
সেলেলো

এই পাইথন 2 বা 3? বিভাগটি সংস্করণটির উপর নির্ভর করে আলাদাভাবে কাজ করে ...
mbomb007

স্পষ্ট করা হয়েছে, @ এমবম্ব007।
সেলেও

1
absউত্তরটি ইতিবাচক করার জন্য আপনার একটি দরকার ।
এক্সএনওর

2

পিএইচপি, 77

@ ইয়ামিন রংয়ের উত্তরের ভিত্তিতে, আমি অনুভব করেছি যে আমি কিছু বাইটের সাহায্যে কিছু ভেরিয়েবল সংক্ষেপে সংক্ষিপ্ত বিবরণ list()না করে ব্যবহার $argvকরতে পারি। এছাড়াও echoএকটি স্থান প্রয়োজন নেই যদি সেখানে প্রতিধ্বনি এবং জিনিস মধ্যে বিভেদক প্রতিধ্বনিত হচ্ছে।

echo$variable;,, echo(4+2);এবং echo'some string';সমানভাবে বৈধechofunction($variable) পিএইচপি বিভ্রান্ত ।

অন্যদিকে, আমিও abs()গাণিতিকভাবে নির্ভুল হিসাবে যুক্ত করেছি, যেহেতু কিছু অংশের সংযোগগুলি "নেতিবাচক অঞ্চল" পেয়েছে

list($t,$a,$b,$c,$d,$e,$f)=$argv;echo.5*abs(($a-$e)*($d-$b)-($a-$c)*($f-$b));

আপনি এটি সি এল এলির মাধ্যমে চালাতে পারেন

php -r "list($t,$a,$b,$c,$d,$e,$f)=$argv;echo.5*abs(($a-$e)*($d-$b)-($a-$c)*($f-$b));" 1 2 4 2 3 7
7.5

2

এডাব্লুকে - 51 42 বাইট

এডব্লিউকে তেমন বিল্ট-ইন absব্যবহার করে নেইsqrt(x^2) বিকল্প জন্য ।

{print sqrt((($1-$5)*($4-$2)-($1-$3)*($6-$2))^2)/2}

রূপে সংরক্ষণ area.awkএবং ব্যবহারের হিসাবে echo x₁ y₁ x₂ y₂ x₃ y₃ | awk -f area.awk, যেমন

$ echo 1 2 4 2 3 7 | awk -f area.awk
7.5

1

পাওয়ারশেল, 70 বাইট

[math]::Abs(($t[0]-$t[4])*($t[3]-$t[1])-($t[0]-$t[2])*($t[5]-$t[1]))/2

অন্যান্য সমাধানের মতো একই স্ট্যান্ডার্ড সূত্র ব্যবহার করে। প্রশ্ন অনুসারে, ধরে নেওয়া হচ্ছে অ্যারেটি প্রাক-জনবহুল, যেমন $t=(1,2,4,2,3,7)। কিন্তু ooof , আছে $এবং []বাক্য গঠন এই এক হত্যা ...


ব্যবহার থেকে জরিমানা সম্পর্কে আপনার মন্তব্য $এবং []আমাকে AWK সমাধানের চেষ্টা করতে অনুপ্রাণিত করেছিল যা দৈর্ঘ্যে, আপত্তিজনক নয়!

1

ডিসি , 52 বাইট

অনুমান ইনপুট রেজিস্টার রয়েছে t যেমন: x1 y1 x2 y2 x3 y3সঙ্গে x1উপরের t'র স্ট্যাকের।

1kLtLtsaLtsbLtdscLtltrlalclbltla-*sd-*se-*leld++2/p

1 2 4 2 3 7stStStStStSt #puts coordinates into register t (closest thing dc has to variables) 1kLtLtsaLtsbLtdscLtltrlalclbltla-*sd-*se-*leld++2/p 7.5

এটি ক্ষেত্রের জন্য নিম্নলিখিত সূত্র ব্যবহার করে:

(x1(y2-y3) + x2(y3-y1) + x3(y1 - y2))/2

এবং প্রক্রিয়াটির দ্রুত ভাঙ্গনের জন্য:

  • 1k Lt Lt sa Lt sb Lt d sc Lt lt r: দশমিক সুস্পষ্টতা 1 স্থানে সেট করুন, স্ট্যাকের অংশগুলি tপ্রধান স্ট্যাকের মধ্যে সরিয়ে রাখুন এবং মূল স্ট্যাকের বিভিন্ন অংশগুলিকে স্টোরেজের জন্য অন্যান্য রেজিস্টারে সরিয়ে দিন ( dমূল স্ট্যাকের rশীর্ষটিকে নকল করুন, মূল স্ট্যাকের শীর্ষ দুটি উপাদানকে বিপরীত করুন, L/lসরান / প্রদত্ত রেজিস্টার থেকে কপি,s , প্রধান স্ট্যাকের উপরে প্রদত্ত নিবন্ধটিতে সরানো হবে)

    প্রধান: y3 x3 y2 x1

    উত্তর: y1 :, বি :, x2সি y2:, টি:y3

  • la lc lb lt la: রেজিস্টারগুলিতে স্ট্যাকের শীর্ষটি অনুলিপি করুন a , c, b, t, এবং aযাতে প্রধান স্ট্যাকে

    প্রধান: y1 y3 x2 y2 y1 y3 x3 y2 x1

    উত্তর: y1 :, বি :, x2সি y2:, টি:y3

  • - * sd: গণনা ((y3-y1)*x2)এবং ফলাফল করাd (রেজিস্টার a, b, c, এবংt আর ব্যবহার করা হয়, তাই আমি এখন স্ট্যাকগুলি তালিকা থেকে তাদের ড্রপ করব)

    প্রধান: y2 y1 y3 x3 y2 x1

    ঘ:((y3-y1)*x2)

  • - * se - *: গণনা ((y1-y2)*y3) এবং ((y2-x3)*x1); প্রাক্তন সংরক্ষণ করুনe এবং পরে দ্বিতীয়টিকে প্রধান স্ট্যাকের উপর রেখে দিন

    প্রধান: ((y2-x3)*x1)

    ডি:, ((y3-y1)*x2)ই:((y1-y2)*y3)

  • le ld + +: রেজিস্টার উপরে কপি e এবং dপ্রধান স্ট্যাকের , শীর্ষ 2 স্ট্যাকের মানগুলির সমষ্টি গণনা করুন (ফলাফলটিকে মূল স্ট্যাকের দিকে ধাক্কা দিয়ে) দুবার

    প্রধান: (((y3-y1)*x2)+((y1-y2)*y3)+((y2-x3)*x1))

    ডি:, ((y3-y1)*x2)ই:((y1-y2)*y3)

  • 2 /: প্রধান স্ট্যাকের উপর 2 টিপুন, 1 ম দ্বারা স্ট্যাকের উপর দ্বিতীয় মানগুলি ভাগ করুন (d এবং eএটি আর ব্যবহৃত হবে না, এগুলি স্ট্যাকের তালিকা থেকে বাদ দিন)

    প্রধান: (((y3-y1)*x2)+((y1-y2)*y3)+((y2-x3)*x1))/2

স্ট্যাকের মানটি পুনরায় সাজানো আমরা দেখতে পাচ্ছি এটি এই ব্যাখ্যার শীর্ষে সূত্রের সমতুল্য: (x1(y2-y3) + x2(y3-y1) + x3(y1 - y2))/2

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