वर्टेक्स कनेक्शंस को योग करें


14

मान लीजिए कि आपके पास एक धनात्मक पूर्णांक N है । सबसे पहले, एक नियमित बहुभुज का निर्माण करें , जिसमें एन कोने हैं, पड़ोसी के बीच की दूरी के बीच की दूरी 1. है। फिर प्रत्येक शीर्ष से, हर दूसरे शीर्ष पर लाइनों को कनेक्ट करें। अंत में, सभी रेखाओं की लंबाई की गणना करें।

उदाहरण

इनपुट N = 6 को देखते हुए , प्रत्येक वर्टेक्स को अन्य कोने से जोड़ने वाली लाइनों के साथ एक षट्भुज का निर्माण करें ।

षट्कोण

जैसा कि आप देख सकते हैं, कुल 6 सीमा रेखाएं (लंबाई = 1) हैं, 3 रेखाएं जिनकी सीमा लंबाई (लंबाई = 2) और 6 अन्य रेखाएं हैं जिन्हें हम, पाइथागोरस प्रमेय का उपयोग करके, लंबाई की गणना कर सकते हैं , जो है

यदि हम एक साथ मिलने वाली रेखाओं की लंबाई जोड़ते हैं (6 * 1) + (3 * 2) + (6 * 1.732) = 22.392

अतिरिक्त जानकारी

जैसा कि 2 या उससे कम लम्बाई वाले ढांचे को बहुभुज नहीं माना जा रहा है, आउटपुट 0 (या NaN, चूंकि एकल वर्टेक्स के बीच की दूरी का कोई मतलब नहीं है) एन = 1 के लिए, क्योंकि एक ही कोने को दूसरे कोने से नहीं जोड़ा जा सकता है, और 1 के लिए 1 एन = 2, चूंकि दो कोने एक लाइन द्वारा जुड़े हुए हैं।

इनपुट

किसी भी उचित प्रारूप में एक पूर्णांक एन।

उत्पादन

सभी रेखाओं की लंबाई एक साथ सम्‍मिलित होती है, जो कम से कम 3 दशमलव स्थानों पर सटीक होती है, या तो एक फ़ंक्शन रिटर्न के रूप में या सीधे मुद्रित होती है stdout

नियम

  • मानक खामियों को मना किया जाता है।
  • यह , इसलिए किसी भी भाषा में बाइट्स में सबसे छोटा कोड है, जीतता है।

सौभाग्य!

परीक्षण के मामलों

(Input) -> (Output)
1 -> 0 or NaN
2 -> 1
3 -> 3
5 -> 13.091
6 -> 22.392

1
क्या हमें वास्तव में संभालना चाहिए 1? मेरी वर्तमान प्रविष्टि nanउदाहरण के लिए शून्य के बजाय वापस आएगी , और इसके लिए केवल विशेष आवरण की आवश्यकता होगी।
जोनाथन एलन

1
@JonathanAllan मैंने आपके उत्तर को देखने के बाद इसके बारे में सोचा, nanयह भी ठीक है, क्योंकि एक एकल शीर्ष के बीच की दूरी बहुत अधिक समझ में नहीं आती है।
इयान एच।

6
आपको शायद त्रुटियों को n=1मुझे सोचने के लिए भी फेंकने की अनुमति देनी चाहिए ।
जोनाथन एलन

यह बताना कठिन है कि सटीकता के 3 दशमलव स्थानों के लिए ऊपरी सीमा के बिना क्या मतलब है N, क्योंकि आउटपुट बड़े होते हैं और फ्लोट कम सटीक होते हैं।
xnor

@xnor जब तक यह किसी भी उचित इनपुट N के लिए 3 दशमलव स्थानों तक सटीक है , तब तक इसका परिणाम भारी संख्या के लिए कम सटीक है।
इयान एच।

जवाबों:


13

पायथन 3 ( सिम्पी के साथ ) ,  61 60 58 54  48 बाइट्स

-6 (हो सकता है कि -10 भी अगर हमें संभालने की आवश्यकता नहीं है n=1) xnor के लिए धन्यवाद (आगे त्रिकोणमितीय सरलीकरण प्लस 1 के किनारे के मामले को संभालने के लिए आगे गोल्फिंग और एक (अब अनावश्यक) floatडाली को स्थानांतरित करके कोष्ठक को बचाने के लिए )।

उम्मीद है कि कोई 3 पार्टी पुस्तकालयों के साथ हरा करने योग्य नहीं है ? हाँ!! लेकिन चलो रोलिंग चीजें मिल ...

lambda n:1%n*n/2/(1-cos(pi/n))
from math import*

इसे ऑनलाइन आज़माएं!

यह लंबाई के योग के लिए एक सूत्र का उपयोग करता है यदि एक बहुभुज एक इकाई सर्कल के अंदर खुदा हुआ है, n*cot(pi/2/n)/2और उस कॉर्ड लंबाई के पाप से विभाजित करके साइड की लंबाई के लिए एक को परिणाम समायोजित करता है sin(pi/n)

पहला सूत्र n-1एक कोने से निकलने वाले सभी विकर्णों की नाल की लंबाई पर विचार करके हासिल किया जाता है जो लंबाई sin(pi/n)(फिर से) sin(2*pi/n), ...,, के होते हैं sin((n-1)pi/n)। इस का योग है cot(pi/2/n), वहाँ nकोने हैं जिससे हम गुणा करते हैं n, लेकिन फिर हमने सभी डोरियों की गिनती की है, इसलिए हम दो से विभाजित करते हैं।

परिणामस्वरूप n*cot(pi/2/n)/2/sin(pi/n)तब xnor द्वारा सरल किया गया था n/2/(1-cos(pi/n))(के लिए पकड़ n>1)

... यह (जब तक सटीकता स्वीकार्य है) अब sympyअंतर्निहित mathमॉड्यूल ( math.pi=3.141592653589793) पर आवश्यकता नहीं है ।


2
हाँ! 11 बाइट्स बचाए। शांत सूत्र!
1942 में J42161217

1
ऐसा लगता है कि सूत्र सरल हो गया है n/2/(1-cos(pi/n))
xnor

अच्छा स्थान @xnor (इतने लंबे समय हम उत्पादन कर सकते हैं के रूप में 0.25के लिए n=1- लेकिन विशेष आवरण भी कम हो सकता है ...)
जोनाथन एलन

@JonathanAllan Huh, अजीब है 1/4जिसके लिए परिणाम है n=1। इसके साथ पैचअप किया जा सकता है 1%n*। इसके अलावा, floatअंदर तक ले जाकर पार्न्स को बचाया जा सकता है float(1-cos(pi/n))। मैं सहानुभूति ज्यादा नहीं जानता, लेकिन शायद एक फ्लोट को मजबूर करने के लिए एक अंकगणितीय तरीका है।
xnor

@xnor धन्यवाद! (मुझे इस floatकदम पर ध्यान देना चाहिए था )। सिम्पी एक अभिव्यक्ति का उत्पादन करती है - उदाहरण के लिए n=6एक प्रतिनिधित्व के साथ कोई भी कास्ट परिणाम नहीं है 3.0/(-sqrt(3)/2 + 1)- एक अच्छा तरीका हो सकता है लेकिन मुझे अभी तक इसका पता नहीं है।
जोनाथन एलन

7

पायथन , 34 बाइट्स

lambda n:1%n*n/abs(1-1j**(2/n))**2

इसे ऑनलाइन आज़माएं!

जोनाथन एलन सेn/2/(1-cos(pi/n)) सरलीकृत सूत्र का उपयोग करता है । नील ने 10 बाइट्स को यह देखते हुए बचाया कि पायथन एकता की जड़ों को कम्प्यूटेशनल शक्तियों के रूप में गणना कर सकता है ।1j

बिना आयात के पायथन में अंतर्निहित त्रिकोणमितीय कार्य नहीं होते हैं pi, या e। के बजाय n=1देने के लिए , हम प्रस्तुत करते हैं ।00.251%n*

केवल प्राकृतिक-संख्या शक्तियों का उपयोग करके एक लंबा संस्करण:

lambda n:1%n*n/abs(1-(1+1e-8j/n)**314159265)**2

इसे ऑनलाइन आज़माएं!


1
ककड़ी की तरह शांत।
जोनाथन एलन

37 बाइट्स:lambda n:1%n*n/(1-(1j**(2/n)).real)/2
नील

@ नील वाह, अजगर सिर्फ एकता की जड़ों की गणना कर सकता है।
xnor

खैर, यह आसान सा था। मैं नहीं जानता कि क्या abs()करता है।
नील

@ इसे पूर्ण मान प्राप्त होता है, इसलिए मानदंड, अर्थात मूल से दूरी।
जोनाथन एलन

6

MATL , 16 15 बाइट्स

t:=ZF&-|Rst2)/s

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

यह FFT (फास्ट फूरियर ट्रांसफॉर्म) फ़ंक्शन को पेश करने वाली एक कमिट का उपयोग करता है , और जो 8 दिनों की चुनौती से पहले होता है।

व्याख्या

कोड एकता की जड़ों को उत्पन्न करने के लिए इस ट्रिक (MATL के अनुकूल) का उपयोग करता है। ये शीर्ष संख्याओं की स्थिति को जटिल संख्याओं के रूप में देते हैं, सिवाय इसके कि लगातार शीर्षों के बीच की दूरी को सामान्य नहीं किया जाता है। 1. इसे हल करने के लिए, सभी युग्मक दूरियों की गणना करने के बाद, कार्यक्रम उन्हें लगातार शीर्षों के बीच की दूरी से विभाजित करता है।

t       % Implicit input, n. Duplicate
:       % Range: [1 2 ... n-1 n]
=       % Isequal, element-wise. Gives [0 0 ... 0 1]
ZF      % FFT. Gives the n complex n-th roots of unity
&-|     % Matrix of pairwise absolute differences
R       % Upper triangular matrix. This avoids counting each line twice.
s       % Sum of each column. The second entry gives the distance between
        % consecutive vertices
t2)/    % Divide all entries by the second entry
s       % Sum. Implicit display

1
यह सुंदर है
योना

@ जोना कॉम्प्लेक्स नंबर FTW :-)
लुइस

5

ग्रासहॉपर, 25 आदिम (11 घटक, 14 तार)

मैं GH और LabVIEW में कार्यक्रमों के बारे में एक मेटा पोस्ट पढ़ता हूं, और एक दृश्य भाषा को मापने के लिए इसी तरह के निर्देशों का पालन करता हूं।

टिड्डी कार्यक्रम

<null>N = के लिए प्रिंट करें 0, 1, 2, क्योंकि Polygon Primitive2 या उससे कम किनारों वाले बहुभुज नहीं बना सकते हैं और आपको लाइनों की एक खाली सूची मिल जाएगी।

बाएं से दाएं घटक:

  • Side count स्लाइडर: इनपुट
  • बहुभुज आदिम: कैनवास पर एक बहुभुज बनाएं
  • विस्फोट: विस्फोट और कोने में एक पॉलीलाइन विस्फोट
  • क्रॉस संदर्भ: सभी कोने के बीच समग्र क्रॉस संदर्भ बनाएँ
  • पंक्ति: सभी जोड़ों के बीच एक रेखा खींचें
  • डुप्लिकेट लाइनें हटाएं
  • वक्र की लंबाई
  • (ऊपरी) सम
  • (निचला) प्रभाग: क्योंकि Polygon Primitiveत्रिज्या के आधार पर बहुभुज खींचता है, हमें आकार को स्केल करने की आवश्यकता है
  • Multipication
  • पैनल: आउटपुट

राइनो स्क्रीनशॉट



2

हास्केल , 27 बाइट्स

f 1=0
f n=n/2/(1-cos(pi/n))

इसे ऑनलाइन आज़माएं!

मैं बस हास्केल में कबूतर हूं, इसलिए यह एक निष्पक्ष शुरुआत वाला गोल्फ बन जाता है (अर्थात, अन्य उत्तरों से सूत्र की नकल करना)।

मैंने भी $कहीं न कहीं कोशिश की है लेकिन कंपाइलर मुझ पर चिल्लाता रहता है, इसलिए यह मेरे लिए सबसे अच्छा है। : पी


2

जेली , 13 12 11 बाइट्स

जोनाथन एलन के फार्मूले का उपयोग करता है (और 2 बाइट बचाने के लिए उन्हें धन्यवाद)

ØP÷ÆẠCḤɓ’ȧ÷

इसे ऑनलाइन आज़माएं!

मैं हमेशा जेली के साथ बहुत रोमांचित रहा हूं, लेकिन इसका ज्यादा इस्तेमाल नहीं किया है, इसलिए यह सबसे सरल रूप नहीं हो सकता है।


"तर्क स्वैपिंग डाइएडिक चेन सेपरेशन" का उपयोग करके एक बाइट को सहेजें ɓ, अपने हेल्पर लिंक को इनलाइन को इनलाइन करें:ØP÷ÆẠCḤɓn1×÷
जोनाथन एलन

@JonathanAllan ओह धन्यवाद, मैं अभी भी एक शुरुआत कर रहा हूं और जानता था कि शायद एक नई श्रृंखला होने की तुलना में एक बेहतर तरीका था, लेकिन यह नहीं जानता कि यह कैसे करना है
जेफमैगमा

ओह, हम एक और कमी, और तार्किक और , का उपयोग करके बचा सकते हैं ȧ: ØP÷ÆẠCḤɓ’ȧ÷:) :
जोनाथन एलन

ओह वाह धन्यवाद मैं उस के बारे में नहीं सोचा था
Jeffmagma

1

जावास्क्रिप्ट (ईएस 6), 36 बाइट्स

n=>1%n*n/2/(1-Math.cos(Math.PI/n))

पोर्ट ऑफ @ जोनाथनअल्लन के पायथन 3 का जवाब

f=n=>1%n*n/2/(1-Math.cos(Math.PI/n))
<input id=i type=number oninput="o.innerText=f(i.value)" /><pre id=o>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.