s1, s2, s3... s_nएक सर्कल में अंकित एन-गॉन की लगातार लंबाई को देखते हुए , इसका क्षेत्र ढूंढें। आप मान सकते हैं कि बहुभुज मौजूद है। इसके अलावा, बहुभुज उत्तल होगा और स्व-प्रतिच्छेदन नहीं होगा, जो विशिष्टता की गारंटी देने के लिए पर्याप्त है। बिल्ट-इन जो विशेष रूप से इस चुनौती को हल करते हैं, साथ ही साथ अंतर्निहित कार्य जो कि परिधि या परिधि की गणना करते हैं, पर प्रतिबंध लगा दिया जाता है (यह इस चुनौती के पिछले संस्करण से अलग है)।
इनपुट: चक्रीय बहुभुज की ओर की लंबाई; एक फ़ंक्शन, स्टडिन आदि के मापदंडों के रूप में लिया जा सकता है।
आउटपुट: बहुभुज का क्षेत्र।
उत्तर 6 दशमलव स्थानों पर सटीक होना चाहिए और एक उचित लैपटॉप पर 20 सेकंड के भीतर चलना चाहिए।
यह कोड गोल्फ इतना कम कोड जीतता है!
विशिष्ट परीक्षण के मामले:
[3, 4, 5] --> 6
[3, 4, 6] --> 5.332682251925386
[3, 4, 6, 7] --> 22.44994432064365
[5, 5, 5, 5] --> 25
[6, 6, 6, 6, 6] --> 61.93718642120281
[6.974973020933265, 2.2393294197257387, 5.158285083300981, 1.4845682771595603, 3.5957940796134173] --> 21.958390804292847
[7.353566082457831, 12.271766915518073, 8.453884922273897, 9.879017670784675, 9.493366404245332, 1.2050010402321778] --> 162.27641678140589
टेस्ट केस जनरेटर:
function randPolygon(n) {
var left = 2 * Math.PI;
var angles = [];
for (var i = 0; i < n - 1; ++i) {
var r = Math.random() * left;
angles.push(r);
left -= r;
}
angles.push(left);
var area = 0;
var radius = 1 + Math.random() * 9;
for (var i = 0; i < angles.length; ++i) area += radius * radius * Math.sin(angles[i]) / 2;
var sideLens = angles.map(function(a) {
return Math.sin(a / 2) * radius * 2;
});
document.querySelector("#radius").innerHTML = radius;
document.querySelector("#angles").innerHTML = "[" + angles.join(", ") + "]";
document.querySelector("#inp").innerHTML = "[" + sideLens.join(", ") + "]";
document.querySelector("#out").innerHTML = area;
draw(angles);
}
function draw(angles) {
var canv = document.querySelector("#diagram"),
ctx = canv.getContext("2d");
var size = canv.width
ctx.clearRect(0, 0, size, size);
ctx.beginPath();
ctx.arc(size / 2, size / 2, size / 2, 0, 2 * Math.PI, true);
ctx.stroke();
ctx.beginPath();
ctx.moveTo(size, size / 2);
var runningTotal = 0;
for (var i = 0; i < angles.length; ++i) {
runningTotal += angles[i];
var x = Math.cos(runningTotal) * size / 2 + size / 2;
var y = Math.sin(runningTotal) * size / 2 + size / 2;
ctx.lineTo(x, y);
}
ctx.stroke();
}
document.querySelector("#gen").onclick = function() {
randPolygon(parseInt(document.querySelector("#sideLens").value, 10));
}
<div id="hints">
<p><strong>These are to help you; they are not part of the input or output.</strong>
</p>
Circumradius:
<pre id="radius"></pre>
Angles, in radians, of each sector (this are NOT the angles of the polygon):
<pre id="angles"></pre>
</div>
<hr>
<div id="output">
Input:
<pre id="inp"></pre>
Output:
<pre id="out"></pre>
</div>
<hr>
<div id="draw">
Diagram:
<br />
<canvas id="diagram" width="200" height="200" style="border:1px solid black"></canvas>
</div>
Number of side lengths:
<input type="number" id="sideLens" step="1" min="3" value="3" />
<br />
<button id="gen">Generate test case</button>