पॉलीहेड्रा के यूलर-पॉइंकेरे-विशेषता


15

एक पॉलीहेड्रोन की सतह के त्रिभुज को देखते हुए p, इसके यूलर-पोनकारे-चरित्र की गणना करें χ(p) = V-E+F, जहां Vकोने Eकी संख्या, किनारों Fकी संख्या और चेहरे की संख्या है।

विवरण

कोने के रूप में enumerated हैं 1,2,...,V। त्रिकोणासन को एक सूची के रूप में दिया गया है, जहाँ प्रत्येक प्रविष्टि एक मुख के कोने की सूची है, जो दक्षिणावर्त या वामावर्त क्रम में दी गई है।

नाम के बावजूद, त्रिभुज में 3 से अधिक पक्षों के चेहरे भी हो सकते हैं। चेहरों को बस जुड़ा हुआ माना जा सकता है इसका मतलब है कि प्रत्येक चेहरे की सीमा को एक बंद गैर-स्व-प्रतिच्छेदन लूप का उपयोग करके खींचा जा सकता है।

उदाहरण

टेट्राहेड्रोन : यह टेट्राहेड्रोन उत्तल है और है χ = 2। एक संभावित त्रिकोणासन है

[[1,2,3], [1,3,4], [1,2,4], [2,3,4]]

घन : यह घन उत्तल है और है χ = 2। एक संभावित त्रिकोणासन है

[[1,2,3,4], [1,4,8,5], [1,2,6,5], [2,3,7,6], [4,3,7,8],  [5,6,7,8]]

डोनट : यह डोनट / टॉरॉयड शेप है χ = 0। एक संभावित त्रिकोणासन है

[[1,2,5,4], [2,5,6,3], [1,3,6,4], [1,2,7,9], [2,3,8,7], [1,9,8,3], [4,9,8,6], [4,5,7,9], [5,7,8,6]]

डबल डोनट : यह डबल-डोनट होना चाहिए χ = -2। इसका निर्माण डोनट की दो प्रतियों का उपयोग करके [1,2,5,4]किया गया [1,3,6,4]है और दूसरे के किनारे वाले पहले वाले पक्ष की पहचान करना ।

[[2,5,6,3], [1,3,6,4], [1,2,7,9], [2,3,8,7], [1,9,8,3], [4,9,8,6], [4,5,7,9], [5,7,8,6], [1,10,11,4], [10,11,5,2], [1,10,12,14], [10,2,13,12], [1,14,13,2], [4,14,13,5], [4,11,12,14], [11,12,13,5]]

( इस हास्केल कार्यक्रम का उपयोग करके सत्यापित किए गए उदाहरण ।)


2
क्या विभिन्न चेहरों में अलग-अलग संख्याएँ हो सकती हैं?
xnor

1
हां, उनके पास किसी भी संख्या में कोने हो सकते हैं।
दोष

जवाबों:


5

हास्केल , 49 46 बाइट्स

u=length
f x|j<-x>>=id=maximum j+u x-u j`div`2

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

मुझे चेहरे को छुपाने और अधिकतम खोजने के द्वारा कोने की संख्या मिलती है। मैं लंबाई लेकर चेहरे की संख्या का पता लगाता हूं। मुझे चेहरे की लंबाई और 2 से विभाजित करके किनारों की संख्या मिलती है।


5

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

f m=maximum(id=<<m)-sum[0.5|_:_:l<-m,x<-l]

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

पहले दो से परे एक चेहरे पर हर किनारे के लिए 0.5 घटाकर चेहरे और किनारे की शर्तों को मिलाता है।

ऑल्ट 42 बाइट्स:

f m=maximum(id=<<m)-sum(0.5<$(drop 2=<<m))

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


यह बहुत चालाक है :)
निर्दोष


4

जेली , 18 17 11 10 9 बाइट्स

1 बाइट के लिए धन्यवाद एग्री आउटलोफर, और 1 के बारे में मुझे बताने के लिए Ɗ

FṀ_FLHƊ+L

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

वास्तव में बुद्धिमान नहीं हैक-एक साथ समाधान का उपयोग करता है बाकी सब शायद उपयोग कर रहे हैं। ( केवल दूसरे समाधान के लिए @totallyhuman को श्रेय मैं इसे फिर से लागू करने के लिए पर्याप्त समझ सकता हूं।)

पुराना समाधान (17 बाइट्स)

ṙ€1FżFṢ€QL
;FQL_Ç

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

मुझे उम्मीद है कि मुझे सब कुछ सही मिला। मान लें कि सभी चेहरों में कम से कम 3 कोने होते हैं और किसी भी दो चेहरे में समान कोने नहीं होते हैं; मैं टोपोलॉजी में इतना अच्छा नहीं हूं कि कोड को तोड़ दूं।

वैकल्पिक 17 बाइट समाधान:

ṙ€1FżFṢ€,;F$QL$€I

व्याख्या

;FQL_Ç    Main link. Argument: faces
            e.g. [[1,2,3],[1,3,4],[1,2,4],[2,3,4]]
 F          Flatten the list. We now have a flat list of vertices.
            e.g. [1,2,3,1,3,4,1,2,4,2,3,4]
;           Append this to the original list.
            e.g. [[1,2,3],[1,3,4],[1,2,4],[2,3,4],1,2,3,1,3,4,1,2,4,2,3,4]
  Q         Remove duplicates. We now have a list of faces and vertices.
            e.g. [[1,2,3],[1,3,4],[1,2,4],[2,3,4],1,2,3,4]
   L        Get the length of this list. This is equal to V+F.
            e.g. 8
     Ç      Call the helper link on the faces to get E.
            e.g. 6
    _       Subtract the edges from the previous result to get V-E+F.
            e.g. 2

ṙ€1FżFṢ€QL    Helper link. Argument: faces
                e.g. [[1,2,3],[1,3,4],[1,2,4],[2,3,4]]
ṙ€1             Rotate each face 1 position to the left.
                e.g. [[2,3,1],[3,4,1],[2,4,1],[3,4,2]]
   F            Flatten this result.
                e.g. [2,3,1,3,4,1,2,4,1,3,4,2]
     F          Flatten the original faces.
                e.g. [1,2,3,1,3,4,1,2,4,2,3,4]
    ż           Pair the items of the two flattened lists.
                e.g. [[2,1],[3,2],[1,3],[3,1],[4,3],[1,4],[2,1],[4,2],[1,4],[3,2],[4,3],[2,4]]
      Ṣ€        Order each edge.
                e.g. [[1,2],[2,3],[1,3],[1,3],[3,4],[1,4],[1,2],[2,4],[1,4],[2,3],[3,4],[2,4]]
        Q       Remove duplicates. We now have a list of edges.
                e.g. [[1,2],[2,3],[1,3],[3,4],[1,4],[2,4]]
         L      Get the length of the list to get E.
                e.g. 6

आप के ;/साथ बदल नहीं सकते F? ;-)
आउटगोल्फर

@EriktheOutgolfer लोल, जो जाहिर तौर पर एक देव संस्करण से किसी तरह के ब्रेनफार्ट के रूप में छोड़ दिया गया था
PurkkaKoodari

वास्तव में, यह खाली सरणियों के मामले में कोड त्रुटि करता है।
निकोलगफर

क्या कभी खाली एरे होंगे?
पुरकाकूदरी

ओह, और 1) आपके TIO लिंक का एक अलग कोड है और 2) नए क्विक हैं!
२१:२० बजे


2

पायथन 2 , 47 बाइट्स

-1 बाइट के लिए धन्यवाद ... user56656 (मूल रूप से गेहूं के जादूगर थे)।

lambda l:len(l)-len(sum(l,[]))/2+max(sum(l,[]))

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


1
मैंने sum(l,[])दो बार उपयोग किए जाने के लिए बचत करके अपने मूल हैस्केल उत्तर में सुधार किया। मुझे नहीं पता कि यह पायथन में भी इस्तेमाल किया जा सकता है या नहीं।
रॉक गार्फ हंटर

@ user56656 यह वास्तव में एक बाइट बचाता है, धन्यवाद!
पूरी तरह से

1

स्टैक्स , 9 बाइट्स

ÑF4╨Ω◙╜#├

ऑनलाइन रन और डीबग करें

यह पूरी तरह से अमानवीय के अजगर समाधान का एक सीधा-आगे का बंदरगाह है ।

%   length of input (a)
x$Y flatten input and store in y
%h  half of flattened length (b)
-   subtract a - b (c)
y|M maximum value in y (d)
+   add c + d and output

इसको चलाओ








0

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

a=>a.map(b=>(v=Math.max(v,...b),d+=b.length/2-1),d=v=0)&&v-d

स्पष्टीकरण: प्रत्येक चेहरे पर लूप्स, सबसे बड़े शीर्ष का ट्रैक देखते हुए vऔर किनारों की संख्या को dघटाकर @ xnor के उत्तर के अनुसार चेहरे की संख्या को ट्रैक करता है ।

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