একটি বস্তুর ভলিউম গণনা করুন


18

প্রদত্ত মাত্রাগুলির একটি সেটের ভিত্তিতে আপনি অবজেক্টের ভলিউম নির্ধারণ করতে পারেন:

  • গোলকের আয়তন একক সংখ্যা, ব্যাসার্ধ ( r) ব্যবহার করে নির্ধারণ করা যেতে পারে
  • একটি সিলিন্ডারের আয়তন দুটি সংখ্যা, ব্যাসার্ধ ( r) এবং উচ্চতা ( h) ব্যবহার করে নির্ধারণ করা যেতে পারে
  • একটি বাক্সের আয়তন তিনটি সংখ্যা, দৈর্ঘ্য ( l), প্রস্থ ( w) এবং উচ্চতা ( h) ব্যবহার করে নির্ধারণ করা যেতে পারে
  • একটি অনিয়মিত ত্রিভুজাকার পিরামিডের ভলিউম চারটি সংখ্যা, পাশের দৈর্ঘ্য ( a, b, c) এবং উচ্চতা ( h) ব্যবহার করে নির্ধারণ করা যেতে পারে ।

চ্যালেঞ্জটি হ'ল নিম্নলিখিত ইনপুটগুলির মধ্যে একটি প্রদত্ত কোনও অবজেক্টের আয়তন নির্ধারণ করা:

  • একটি একক সংখ্যা (r)বা (r, 0, 0, 0)=>V = 4/3*pi*r^3
  • দুটি সংখ্যা (r, h)বা (r, h, 0, 0)=>V = pi*r^2*h
  • তিনটি সংখ্যা (l, w, h)বা (l, w, h, 0)=>V = l*w*h
  • চার নম্বর (a, b, c, h)=> V = (1/3)*A*h, যেখানে হেরনের সূত্রA দ্বারা দেওয়া হয়েছে :A = 1/4*sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c))

বিধি এবং ব্যাখ্যা:

  • ইনপুটটি পূর্ণসংখ্যা এবং / বা দশমিক উভয় হতে পারে
  • আপনি ধরে নিতে পারেন সমস্ত ইনপুট মাত্রা ইতিবাচক হবে
  • পাই হার্ড কোডেড হয়, তাহলে এটি আপ সঠিক হতে হবে: 3.14159
  • আউটপুটে কমপক্ষে significant টি উল্লেখযোগ্য সংখ্যা থাকতে হবে, কম সংখ্যার সাথে সঠিকভাবে প্রতিনিধিত্ব করা যেতে পারে এমন সংখ্যাগুলি বাদে। আপনি আউটপুট 3/4হিসাবে এটি করতে পারেন 0.75, তবে 4/3অবশ্যই হবে 1.33333(আরও অঙ্কগুলি ঠিক আছে)
    • কীভাবে ভুল মানকে গোল করা যায় তা isচ্ছিক
  • অবৈধ ইনপুট জন্য আচরণ অপরিজ্ঞাত
  • আই / ও-র জন্য মানক নিয়ম। ইনপুট তালিকা বা পৃথক যুক্তি হতে পারে

এটি কোড গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম সমাধান win

পরীক্ষার কেস:

calc_vol(4)
ans =  268.082573106329

calc_vol(5.5, 2.23)
ans =  211.923986429533

calc_vol(3.5, 4, 5)
ans =  70

calc_vol(4, 13, 15, 3)
ans =  24

সম্পর্কিত, তবে আলাদা


1
মাত্রাগুলি ক্রম প্রশ্নে বর্ণিত আদেশ হতে হবে?
মেগো


@ মেগো, আপনি চয়ন করতে পারেন ...
স্টিভি গ্রিফিন

@ স্টিভিগ্রিফিন ভারার্গস এবং গতিশীল আকারের অ্যারেগুলি পাওয়া আমার ভাষার ব্যথা (কমপক্ষে আমার পক্ষে, এটির একটি শিক্ষানবিস)। আমি কি প্রতিটি আর্গ গণনা পরিচালনা করতে চারটি ফাংশন সরবরাহ করতে পারি?
বিড়াল

প্রয়োজনে শূন্যে সেট করা শেষ উপাদানগুলির সাথে আপনার কাছে একটি স্থির আকারের অ্যারে থাকতে পারে। আমার কি মনে হয় এটা কি এটিকে আবরণ করা উচিত? অথবা আপনি হাস্কেল উত্তরের মতো ফাংশনগুলি ওভারলোড করতে পারেন। বিভিন্ন নামের সাথে আপনার আলাদা আলাদা ফাংশন থাকতে পারে না।
স্টিভি গ্রিফিন

উত্তর:


4

এমএটিএল , 57 53 51 44 বাইট

3^4*3/YP*GpG1)*YP*GpG0H#)ts2/tb-p*X^3/*XhGn)

ইনপুটটি 1, 2, 3 বা 4 সংখ্যা সহ একটি অ্যারে।

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

ব্যাখ্যা

নেস্টেড ifলুপগুলি ব্যবহার করার পরিবর্তে , যা বাইটগুলির ক্ষেত্রে ব্যয়বহুল, এটি কোনও ইনপুটটির জন্য চারটি সম্ভাব্য ফলাফলের গণনা করে এবং তারপরে ইনপুট দৈর্ঘ্যের উপর নির্ভর করে উপযুক্ত ফলাফল বাছাই করে।

ফলাফলগুলি গণনা করার সময়, তাদের মধ্যে কেবল একটির বৈধ হওয়া প্রয়োজন হলেও অন্যরা ত্রুটি দিতে পারে না। এর অর্থ উদাহরণস্বরূপ যে ইনপুটটির চতুর্থ উপাদানটি সূচীকরণের অনুমতি নেই, কারণ ইনপুটটিতে চারটিরও কম উপাদান থাকতে পারে।

                    % take input implicitly
3^4*3/YP*           % compute a result which is valid for length-1 input:
                    % each entry is raised to 3 and multiplied by 4/3*pi
G                   % push input
pG1)*YP*            % compute a result which is valid for length-2 input:
                    % product of all entries, times first entry, times pi
G                   % push input
p                   % compute a result which is valid for length-3 input:
                    % product of all entries
G                   % push input
0H#)ts2/tb-p*X^3/*  % compute a result which is valid for length-4 input:
                    % shorter version of Heron's formula applied on all
                    % entries except the last, times last entry, divided by 3
Xh                  % collect all results in a cell array
G                   % push input
n)                  % pick appropriate result depending on input length
                    % display implicitly

আপনি হেরনের সূত্রটি কী ব্যবহার করছেন?
অ্যাডিসন ক্র্যাম্প

কুলিস্টওয়েটো সেমিপ্রিমিটার সহ একটি এখান
লুইস মেন্ডো

ভাল হয়েছে @ ডোনমুসলি। আমি এটি " ম্যাটল্যাব = 34" আরও বেশি বাইট ব্যবহার করে পরিচালনা করেছি
স্টিভি গ্রিফিন

9

ভিটসি, 49 বাইট

আমি ভেবেছিলাম আপনি এটিকে আমার কাছে একটি প্লেটে তুলে দিয়েছেন তবে আমি চারপাশে কাজ করার জন্য একটি অমীমাংসিত বাগ পেয়েছি। যদিও আমাকে কষ্ট দেয়নি।

lmN
3^43/*P*
2^*P*
**
v:++2/uV3\[V}-]V3\*12/^v*3/

মূলত, ইনপুটটি বিভিন্ন ফাংশনের জন্য নির্দিষ্ট দৈর্ঘ্য হওয়ার সাথে সাথে আপনি এই জিনিসটি করার জন্য আমাকে আমার পদ্ধতি সিনট্যাক্সটি খাওয়ান। তাই, হ্যাঁ, সাফল্য!

ব্যাখ্যা, একবারে একটি লাইন:

lmN
l   Get the length of the stack.
 m  Go to the line index specified by the top item of the stack (the length).
  N Output as a number.

3^43/*P*
3^
          Put to the power of 3.
  43/*    Multiply by 4/3.
      P*  Multiply by π

2^*P*
2^     Put to the second power.
  *    Multiply the top two items.
   P*  Multiply by π

**
**     Multiply the top three items of the stack.

v:++2/uV3\[V}-]V3\*12/^v*3/
v                            Save the top item as a temp variable.
 :                           Duplicate the stack.
  ++                         Sum the top three values.
    2/                       Divide by two.
      u                      Flatten the top stack to the second to top.
       V                     Capture the top item of the stack (semiperimeter) 
                             as a permanent variable.
        3\[   ]              Do the stuff in the brackets 3 times.
           V}-               Subtract the semiperimeter by each item.
               V             Push the global var again.
                3\*          Multiply the top 4 items.
                   12/^      Square root.
                       v*    Multiply by the temp var (the depth)
                         3/  Divide by three.

ইনপুটটি কোনও ঠিক পিছনের জিরো না রেখে প্রশ্নটিতে উপস্থিত হওয়ার সাথে সাথে ঠিক উল্টো ক্ষেত্রে কমান্ড লাইন আর্গুমেন্ট হিসাবে স্বীকৃত হয়।

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

সরাইয়া হিসাবে, এখানে এমন কিছু যা বর্তমানে বিকাশে রয়েছে।

জাভা ডাব্লু / ভিটি প্যাকেজ

নোট করুন যে এই প্যাকেজটির কাজ চলছে; এটি কেবল ভবিষ্যতে এটি কীভাবে কাজ করবে তা দেখানোর জন্য (এটির জন্য ডকুমেন্টেশনগুলি এখনও আপলোড করা হয়নি) এবং এটি গল্ফ করা হয়নি এবং এটি একটি আক্ষরিক অনুবাদ:

import com.VTC.vitsy;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;

public class Volume {
    public static void main(String[] args) {
        Vitsy vitsyObj = new Vitsy(false, true);
        vitsyObj.addMethod(new Vitsy.Method() {
            public void execute() {
                vitsyObj.pushStackLength();
                vitsyObj.callMethod();
                vitsyObj.outputTopAsNum();
            }
        });
        vitsyObj.addMethod(new Vitsy.Method() {
            public void execute() {
                vitsyObj.push(new BigDecimal(3));
                vitsyObj.powerTopTwo();
                vitsyObj.push(new BigDecimal(4));
                vitsyObj.push(new BigDecimal(3));
                vitsyObj.divideTopTwo();
                vitsyObj.multiplyTopTwo();
                vitsyObj.pushpi();
                vitsyObj.multiplyTopTwo();
            }
        });
        vitsyObj.addMethod(new Vitsy.Method() {
            public void execute() {
                vitsyObj.push(new BigDecimal(2));
                vitsyObj.powerTopTwo();
                vitsyObj.multiplyTopTwo();
                vitsyObj.pushpi();
                vitsyObj.multiplyTopTwo();
            }
        });
        vitsyObj.addMethod(new Vitsy.Method() {
            public void execute() {
                vitsyObj.multiplyTopTwo();
                vitsyObj.multiplyTopTwo();
            }
        });
        vitsyObj.addMethod(new Vitsy.Method() {
            public void execute() {
                vitsyObj.tempVar();
                vitsyObj.cloneStack();
                vitsyObj.addTopTwo();
                vitsyObj.addTopTwo();
                vitsyObj.push(new BigDecimal(2));
                vitsyObj.divideTopTwo();
                vitsyObj.flatten();
                vitsyObj.globalVar();
                vitsyObj.push(new BigDecimal(3));
                vitsyObj.repeat(new Vitsy.Block() {
                    public void execute() {
                        vitsyObj.globalVar();
                        vitsyObj.rotateRight();
                        vitsyObj.subtract();
                    }
                });
                vitsyObj.globalVar();
                vitsyObj.push(new BigDecimal(3));
                vitsyObj.repeat(new Vitsy.Block() {
                    public void execute() {
                        vitsyObj.multiplyTopTwo();
                    }
                });
                vitsyObj.push(new BigDecimal(1));
                vitsyObj.push(new BigDecimal(2));
                vitsyObj.divideTopTwo();
                vitsyObj.powerTopTwo();
                vitsyObj.tempVar();
                vitsyObj.multiplyTopTwo();
                vitsyObj.push(new BigDecimal(3));
                vitsyObj.divideTopTwo();
            }
        });
        vitsyObj.run(new ArrayList(Arrays.asList(args)));
    }
}

1
কাজের জন্য অবশ্যই সঠিক সরঞ্জাম
মেগো

5

সি, 100 97 বাইট

#define z(a,b,c,d) d?d*sqrt(4*a*a*b*b-pow(a*a+b*b-c*c,2))/12:c?a*b*c:3.14159*(b?a*a*b:4/3.*a*a*a)

সম্পাদনা 1: অপ্রয়োজনীয় দশমিক অপসারণ ., ধন্যবাদ ইমিবিস!


2
4./3.শুধু হতে পারে না 4/3.? এবং 2.এবং 12.শুধু হতে পারে 2এবং 12?
ব্যবহারকারী 253751

আপনি একেবারে সঠিক। ধন্যবাদ!
জোশ

4

জাভাস্ক্রিপ্ট ES6, 129 126 125 116 114 90 বাইট

স্টিভি গ্রিফিনকে ধন্যবাদ একটি দুর্দান্ত সূত্রের সাহায্যে প্রচুর বাইট (9) সঞ্চয় করেছেন! যেহেতু ইনপুটটি অবশ্যই ননজারো হওয়া উচিত, এটি variable?একটি সংজ্ঞা-পরীক্ষার জন্য যথেষ্ট।

with(Math){(a,b,c,h,Z=a*a)=>h?sqrt(4*Z*b*b-(D=Z+b*b-c*c)*D)/4:c?a*b*c:b?PI*Z*b:4/3*PI*Z*a}

এটি পরীক্ষা!

with(Math){Q = (a,b,c,h,Z=a*a)=>h?sqrt(4*Z*b*b-(D=Z+b*b-c*c)*D)/4:c?a*b*c:b?PI*Z*b:4/3*PI*Z*a}
console.log = x => o.innerHTML += x + "<br>";

testCases = [[4], [5.5, 2.23], [3.5, 4, 5], [4, 13, 15, 3]];
redo = _ => (o.innerHTML = "", testCases.forEach(A => console.log(`<tr><td>[${A.join(", ")}]` + "</td><td> => </td><td>" + Q.apply(window, A) + "</td></tr>")));
redo();
b.onclick = _ => {testCases.push(i.value.split(",").map(Number)); redo();}
*{font-family:Consolas,monospace;}td{padding:0 10px;}
<input id=i><button id=b>Add testcase</button><hr><table id=o></table>


5
গণিত দিয়ে? বৈধ মনে হয়।
অ্যাডিসন ক্র্যাম্প

ক্রোম 48-এ এই ত্রুটিগুলি, Uncaught SyntaxError: Unexpected token =(উল্লেখ করে Z=a*a)
প্যাট্রিক রবার্টস

@ পেট্রিকরবার্টস ফায়ারফক্স ব্যবহার করুন। এটি ল্যাম্বডাসের অভ্যন্তরে ডিফল্ট পরামিতিগুলির অনুমতি দেয়।
কনার ও'ব্রায়ান

আমি 4-আরগ সংস্করণটি কাজ করতে পারি বলে মনে হয় না ... এবং আপনি কখনই এর মান ব্যবহার করেন না hযা কিছুটা তদারকি বলে মনে হয়।
নীল

@ নীল হু, সত্য আমাকে আবার সেই সূত্রটি দেখতে হবে, স্টিও তার মন্তব্য মুছে দিয়েছেন ...
কনর ওব্রায়ান

3

হাস্কেল, 114 109 107 101 99 বাইট

v[r]=4/3*pi*r^3
v[r,h]=pi*r^2*h
v[x,y,z]=x*y*z
v[a,b,c,h]=h/12*sqrt(4*a^2*b^2-(a^2+b^2-c^2)^2)

সংখ্যার একটি তালিকা নেয় এবং একটি ভলিউম প্রদান করে। এটিকে কল করুন

v[7]

একটি গোলক ইত্যাদির জন্য ইত্যাদি ফাংশনটি যে কোনও ধরণের প্রয়োগকারী sqrt(তাই, মূলত Floatবা Double) এর বহুবিধ ।

এটি ব্রাভিটির জন্য কোনও প্রতিযোগিতা জিততে পারে না। তবে এটি কতটা পাঠযোগ্য তা লক্ষ্য করুন। এমনকি যদি আপনি হাস্কেলকে সত্যিই না জানেন তবে আপনি এটি সহজেই কী করতে পারেন তা বলতে পারেন। হাস্কেলের প্যাটার্নের সাথে মিলে যাওয়া সিনট্যাক্সটি আশ্চর্যজনক ফাংশনগুলি সংজ্ঞায়িত করা সত্যিই সহজ করে তোলে যা ইনপুটটির আকারের উপর নির্ভর করে সম্পূর্ণ ভিন্ন কিছু করে।


1
(1/3)*(1/4)*h,,, কেন না h/12? আপনাকে অনেকটা বাইট বাঁচায়!
স্টিভি গ্রিফিন

1
এছাড়াও, কনর যে হেরনের ইকের বৈকল্পিকটি ব্যবহার করে তা অনেক কম মনে হয়।
স্টিভি গ্রিফিন

@ স্টিভিগ্রিফিন স্পষ্টতই হ্যাঁ। : -}
ম্যাথমেটিক্যালআরচিড

হাস্কেল কেবল ইনফিক্স গণিতের জন্য পঠনযোগ্য, যা আমি পঠনযোগ্য পাই না। তারপর আপনি ঢোকা .এবং #এবং $এবং এটি ম্যাথামেটিকাল স্যুপ হয়ে যায়।
বিড়াল

3

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

param($a,$b,$c,$h)((($h/12)*[math]::Sqrt(($a+$b+$c)*(-$a+$b+$c)*($a-$b+$c)*($a+$b-$c))),(($a*$b*$c),((($p=[math]::PI)*$b*$a*$a),($p*$a*$a*$a*4/3))[!$b])[!$c])[!$h]

সুতরাং ... অনেক ... ডলার ... (161 টি অক্ষরের মধ্যে 31 টি $কোডের 19.25% এর জন্য) ... তবে, স্টিভি গ্রিফিনের জন্য 4 বাইট সংরক্ষণ করে!

আমরা চারটি ইনপুট নিই এবং তারপরে বিপরীত ক্রমের ভিত্তিতে ক্রমবর্ধমানভাবে ছদ্ম-ত্রয়ী বিবৃতিতে সূচি রাখি। উদাহরণস্বরূপ, (..., ...)[!$h]চতুর্থ ইনপুট উপস্থিত কিনা বাইরের পরীক্ষা করে। যদি তা হয় তবে উইলটি !$hসমান হবে 0এবং প্রথমার্ধটি কার্যকর করা হবে (একটি অনিয়মিত ত্রিভুজ পিরামিডের ভলিউম)। অন্যথায়, (যেমন এটি অবিচ্ছিন্ন) এর !$hসাথে $h = $nullসমান হবে 1, তাই এটি দ্বিতীয়ার্ধে যায় যা নিজেই সিউডো-টের্নারি [!$c]এবং এর উপর ভিত্তি করে।

এটি সম্ভবত সর্বোত্তমের কাছাকাছি, যেহেতু অনুমিত-সংক্ষিপ্ত সূত্রটি (উদাঃ) সি ও ওবিই ব্যবহার করছে ^অপারেটরের অভাবের জন্য পাওয়ারশেলটিতে আসলে 2 বাইট বেশি দীর্ঘ ... একমাত্র আসল সঞ্চয় (1/3)*(1/4)*A*$hগল্ফিং থেকে আসে A*$h/12, এবং $pদীর্ঘ [math]::PIকলের পরিবর্তে একটি দম্পতি বাইট সংরক্ষণের জন্য পরে সেটিংস setting



1

সিরিয়াসলি, 65 59 55 বাইট

`kd@;Σ½╗"╜-"£Mπ╜*√*3@/``kπ``ª*╦*``3;(^/4*╦*`k,;lD(E@i(ƒ

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

ব্যাখ্যা

এই এক ধূসর। আমি ব্যাখ্যা একাধিক অংশে বিভক্ত করতে যাচ্ছি।

আসল অংশ:

`...``...``...``...`k,;lD(E@i(ƒ
`...``...``...``...`k            push 4 functions to a list
                     ,;lD        push input, len(input)-1
                         (E      get the function at index len(input)-1
                           @i(   flatten the input list
                              ƒ  execute the function

ফাংশন 0:

3;(^/4*╦*
3;(^       push 3, r^3
    /      divide (r^3/3)
     4*    multiply by 4 (4/3*r^3)
       ╦*  multiply by pi (4/3*pi*r^3)

ফাংশন 1:

ª*╦*
ª     r^2
 *    multiply by h (r^2*h)
  ╦*  multiply by pi (pi*r^2*h)

ফাংশন 2:

kπ  listify, product (l*w*h)

ফাংশন 3 (21 বাইট; প্রোগ্রামের দৈর্ঘ্যের প্রায় অর্ধেক!)

kd@;Σ½╗"╜-"£Mπ╜*√*3@/
kd@                    listify, dequeue h, bring [a,b,c] back on top
   ;Σ½                       dupe, sum, half (semiperimeter)
      ╗                push to register 0
       "╜-"£M          map: push s, subtract (s-x for x in (a,b,c))
             π         product
              ╜*√      multiply by s, sqrt (Heron's formula for area of the base)
                 *3@/  multiply by h, divide by 3 (1/3*A*h)

1

মতলব, 78 বাইট

@(a,b,c,d)pi*a^2*(4/3*a*~b+b*~c)+a*b*c*~d+d/12*(4*a^2*b^2-(a^2+b^2-c^2)^2)^.5;

বেশ নিশ্চিত যে এটি এর চেয়ে আরও ছোট হতে পারে না। ~b, ~cএবং ~d, 0যদি প্রতিটি মাত্রা শূন্য হয় না। একটি শূন্য মাত্রা সহ একটি সূত্র কেবল শূন্য দেবে। এইভাবে, প্রতিটি সূত্রকে কেবল সংক্ষেপে বলা যেতে পারে। না ifএবং elseপ্রয়োজনীয়।

এটিকে কল করুন (বা এখানে এটি অনলাইনে চেষ্টা করুন ):

g=@(a,b,c,d)pi*a^2*(4/3*a*~b+b*~c)+a*b*c*~d+d/12*(4*a^2*b^2-(a^2+b^2-c^2)^2)^.5;

g(4,0,0,0)
ans =  268.082573106329

g(5.5,2.23,0,0)
ans =  211.923986429533

g(3.5,4,5,0)
ans =  70

g(4,13,15,3)
ans =  24

1
ভেরিয়েবলের কী পাগলামি :-) হ্যাঁ, এটি আরও ছোট করা শক্ত বলে মনে হচ্ছে
লুইস মেন্ডো

এটি অনলাইন চেষ্টা করার জন্য একটি লিঙ্ক যুক্ত করতে পারেন? ideone.com/6VZF9z
লুইস মেন্ডো

0

পাইথন 3 2, 127 119 116 বাইট

গল্ফিংয়ে তাদের সমস্ত সহায়তার জন্য কারও এবং মেগোকে কৃতিত্ব । সি ও'বাজোশের কাছেও আমি তাদের উত্তরগুলির কিছু অংশ ধার করেছিলাম বলে Creditণ

def v(a,b,c,d):z=a*a;P=3.14159;print filter(int,[max(0,(4*z*b*b-(z+b*b-c*c)**2))**.5*d/12,a*b*c,P*z*b,P*z*a*4/3])[0]

Ungolfed:

def v(a, b, c, d):
    z = a*a
    p = 3.14159
    s = filter(int,[max(0,(4*z*b*b-(z+b*b-c*c)**2))**.5*d/12,a*b*c,P*z*b,P*z*a*4/3])
    print s[0]

আরও গল্ফড:, def v(a,b,c,d):z=a*a;p=355/113;return[x for x in[(4*z*b*b-(z+b*b-c*c)**2)**.5*d/12,a*b*c,p*z*b,p*z*a*4/3]if x][0]ধরে নিচ্ছি ইনপুটটি প্যাডযুক্ত 0
ASCII- কেবল

এছাড়াও, আপনি যদি এর পরিবর্তে পাইথন 2 ব্যবহার করেন তবে আপনি এটি করতে পারেনdef v(a,b,c,d):z=a*a;P=3.14159;return filter(int,[(4*z*b*b-(z+b*b-c*c)**2)**.5*d/12,a*b*c,P*z*b,P*z*a*4/3])[0]
ASCII- কেবল

0

গণিত, 114 (103)

খাঁটি ফাংশন: 114

Which[(l=Length@{##})<2,4.Pi/3#1^3,l<3,#1^2.Pi#2,l<4,#1#2#3,l<5,(4#1^2#2^2-(#1^2+#2^2-#3^2)^2)^.5#4/12]~Quiet~All&

Ungolfed:

fun = Which[
  (l = Length@{##}) < 2,
    4. Pi/3 #1^3,
  l < 3,
    #1^2 Pi #2, 
  l < 4,
    #1 #2 #3, 
  l < 5,
    (4 #1^2 #2^2 - (#1^2 + #2^2 - #3^2)^2)^.5 #4/12
]~Quiet~All &

ব্যবহার:

fun[4]
268.083
fun[5.5, 2.23]
211.924
fun[3.5, 4, 5]
70.
fun[4, 13, 15, 3]
24.

যদি নামযুক্ত ফাংশন অনুমোদিত হয়: 103

f[r_]:=4.Pi/3r^3
f[r_,h_]:=r^2.Pi h
f[l_,w_,h_]:=l w h
f[a_,b_,c_,h_]:=(4a^2b^2-(a^2+b^2-c^2)^2)^.5h/12

ব্যবহার:

f[4]
268.083
f[5.5, 2.23]
211.924
f[3.5, 4, 5]
70.
f[4, 13, 15, 3]
24.

1
#1==#, আমি মনে করি Quiet[x_]:=Quiet[x,All]এবং π (একটি ম্যাকের আল্ট-পি) প্রসারিত ASCII- এ ফিট করে।
ক্যালকুলেটরলাইন 21

আপনি কি #1 #2 #3সাথে প্রতিস্থাপন করতে পারবেন না 1##? ভুলে যাবেন না#==#1
ক্যালকুলেটরফ্লাইন

0

ফ্যাক্টর, 783 বাইট

ঠিক আছে, এটি চিরকালের জন্য গ্রহণ করেছে।

USING: arrays combinators io kernel locals math math.constants math.functions quotations.private sequences sequences.generalizations prettyprint ;
: 1explode ( a -- x y ) dup first swap 1 tail ;
: 3explode ( a -- b c d ) 1explode 1explode 1explode drop ;
: spr ( r -- i ) first 3 ^ 4 3 / pi * swap * ;
: cyl ( r -- i ) 1explode 1explode drop 2 ^ pi swap * * ; : cub ( v -- i ) 1 [ * ] reduce ;
: A ( x a -- b d ) reverse dup dup dup 0 [ + ] reduce -rot 3explode neg + + -rot 3explode - + 3array swap 3explode + - 1array append 1 [ * ] reduce sqrt .25 swap * ;
: ilt ( a -- b c  ) V{ } clone-like dup pop swap A 1 3 / swap pick * * ;
: volume ( v -- e ) dup length { { [ 1 = ] [ spr ] } { [ 2 = ] [ cyl ] } { [ 3 = ] [ cub ] } { [ 4 = ] [ ilt ] } [ "bad length" throw ] } cond print ;

কল করুন { array of numbers } volume


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