पैकिंग सर्किलों


21

इस छवि पर एक नज़र डालें। विशेष रूप से, छोर पर छेद कैसे व्यवस्थित किए जाते हैं।

यहाँ छवि विवरण दर्ज करें

( छवि स्रोत )

ध्यान दें कि इस छवि में पाइप एक हेक्सागोनल पैटर्न में कैसे पैक किए जाते हैं। यह ज्ञात है कि 2 डी में, एक हेक्सागोनल जाली सर्कल की घनी पैकिंग है। इस चुनौती में, हम हलकों की पैकिंग की परिधि को कम करने पर ध्यान केंद्रित करेंगे। परिधि की कल्पना करने का एक उपयोगी तरीका यह है कि मंडलियों के संग्रह के चारों ओर एक रबर बैंड लगाने की कल्पना करें।

काम

nइनपुट के रूप में एक सकारात्मक पूर्णांक को देखते हुए , nकसकर संभव के रूप में पैक किए गए मंडलियों का एक संग्रह दिखाएं ।

नियम और स्पष्टीकरण

  • मान लें कि मंडलियों का व्यास 1 इकाई है।
  • कम से कम किया जाने वाला चर परिधि की लंबाई है, जिसे समूह में हलकों के केंद्रों के उत्तल हल के रूप में परिभाषित किया गया है । इस छवि पर एक नज़र डालें:

यहाँ छवि विवरण दर्ज करें

एक सीधी रेखा में तीन वृत्तों में 4 की परिधि होती है (उत्तल हल एक 2x0 आयत है, और 2 को दो बार गिना जाता है), 120 डिग्री के कोण में व्यवस्थित होने वालों की परिधि लगभग 3.85 होती है, और त्रिभुज की परिधि होती है। केवल 3 इकाइयों की। ध्यान दें कि मैं अतिरिक्त पाई इकाइयों को अनदेखा कर रहा हूं कि वास्तविक परिधि होगी क्योंकि मैं केवल उनके किनारों को नहीं बल्कि मंडलियों के केंद्रों को देख रहा हूं।

  • किसी भी दिए गए समाधान के लिए (और लगभग निश्चित रूप से) कई समाधान हो सकते हैं n। आप अपने विवेक से इनमें से किसी का भी उत्पादन कर सकते हैं। ओरिएंटेशन कोई मायने नहीं रखता।
  • वृत्त एक षट्कोणीय जाली पर होना चाहिए।
  • मंडलियों का व्यास कम से कम 10 पिक्सेल होना चाहिए, और भरा जा सकता है या नहीं।
  • आप या तो एक कार्यक्रम या एक समारोह लिख सकते हैं।
  • इनपुट को एसटीडीआईएन के माध्यम से फ़ंक्शन तर्क या निकटतम समकक्ष के रूप में लिया जा सकता है।
  • आउटपुट किसी फ़ाइल में प्रदर्शित या आउटपुट किया जा सकता है।

उदाहरण

नीचे मेरे पास 1 से 10 तक के लिए वैध और अमान्य आउटपुट उदाहरण हैं (केवल पहले पांच के लिए वैध उदाहरण)। वैध उदाहरण बाईं ओर हैं; दाईं ओर के प्रत्येक उदाहरण में संबंधित मान्य उदाहरण की तुलना में अधिक परिधि है।

यहाँ छवि विवरण दर्ज करें

इस चुनौती को लिखने के लिए मदद के लिए स्टीववे्रिल का बहुत धन्यवाद। खुश पैकिंग!


3
हेक्सागोनी पर प्रतीक्षा कर रहा हूं, मैं शर्त लगा रहा हूं। ; घ
एडिसन क्रम्प

@VoteToClose: मुझे नहीं लगता कि हेक्सागोनी में ग्राफिकल आउटपुट है, लेकिन मैन, यह भयानक होगा!
एल'एंडिया स्ट्रोमैन

@ El'endiaStarman खैर, आप एक SVG को stdout लिख सकते हैं , लेकिन मुझे नहीं लगता कि मैं जा रहा हूँ ...: P
मार्टिन Ender

1
वाह, किसी ने पहले सैंडबॉक्स में मेरी टिप्पणियों के लिए बोल्ड में मुझे धन्यवाद नहीं दिया। मैं शरमा रहा हूं: - बेशक मैंने टिप्पणी की क्योंकि मुझे चुनौती पसंद थी, हालांकि मुझे यकीन नहीं है कि मैं इसका जवाब देने के लिए समय लेने जा रहा हूं।
लेवल रिवर सेंट

उपयोगकर्ता81655 के उत्तर पर रेटो कोराडी के साथ मेरी चर्चा के अनुसार, मुझे लगता है कि सबसे बड़ा हेक्सागोन जिसे हम तेज कोनों के साथ देखेंगे, 7 डी (8 सर्कल) है। यह एन = 169 सर्कल है। आप समस्या को उस संख्या तक सीमित रखने पर विचार कर सकते हैं, जो एक सही उत्तर प्राप्त करने का अधिक मौका देगा (वर्तमान में कोई भी नहीं है) और जाँच करने में सक्षम होने के कारण। दूसरी ओर, मनमाने ढंग से एन को खोलने में समस्या को छोड़ना अधिक दिलचस्प हो सकता है।
लेवल रिवर सेंट

जवाबों:


4

गणितज्ञ 295 950 बाइट्स

नोट: यह अभी भी होने वाली गोल्फ संस्करण मेरे पहले प्रयासों के बारे में स्टीव मेरिल द्वारा उठाए गए मुद्दों को संबोधित करता है।

हालांकि यह पहले संस्करण पर एक सुधार है, यह घनीभूत संभाल विन्यास नहीं मिलेगा जहां एक हेक्सागोनल, समग्र आकार के बजाय एक परिपत्र की तलाश करेगा।

यह एक पूर्ण आंतरिक षट्भुज (n> = 6 के लिए) का निर्माण करके समाधान ढूंढता है, और फिर शेष गोले के साथ बाहरी शेल को पूरा करने के लिए सभी कॉन्फ़िगरेशन की जांच करता है।

दिलचस्प बात यह है कि जैसा कि स्टीव मेरिल ने टिप्पणी में कहा है, n+1हलकों का समाधान हमेशा n हलकों के समाधान के साथ नहीं होता है, जिसमें एक और चक्र जोड़ा जाता है। दिए गए घोल की 30 हलकों के लिए दी गई घोल की 31 हलकों से तुलना करें। (नोट: 30 सर्किलों के लिए एक अनूठा समाधान है।)

m[pts_]:={Show[ConvexHullMesh[pts],Graphics[{Point/@pts,Circle[#,1/2]&/@ pts}], 
ImageSize->Tiny,PlotLabel->qRow[{Length[pts],"  circles"}]],
RegionMeasure[RegionBoundary[ConvexHullMesh[pts]]]};
nPoints = ((#+1)^3-#^3)&;pointsAtLevelJ[0] = {{0,0}};
pointsAtLevelJ[j_]:=RotateLeft@DeleteDuplicates@Flatten[Subdivide[#1, #2, j] &@@@
Partition[Append[(w=Table[j{Cos[k Pi/3],Sin[k Pi/3]},{k,0,5}]), 
w[[1]]], 2, 1], 1];nPointsAtLevelJ[j_] := Length[pointsAtLevelJ[j]]
getNPoints[n_] := Module[{level = 0, pts = {}},While[nPoints[level]<=n, 
pts=Join[pointsAtLevelJ[level],pts];level++];Join[Take[pointsAtLevelJ[level],n-Length[pts]],
pts]];ns={1,7,19,37,61,91};getLevel[n_]:=Position[Union@Append[ns,n],n][[1, 1]]-1;
getBaseN[n_] := ns[[getLevel[n]]];pack[1]=Graphics[{Point[{0,0}], Circle[{0, 0}, 1/2]}, 
ImageSize->Tiny];pack[n_]:=Quiet@Module[{base = getNPoints[getBaseN[n]], 
outerRing = pointsAtLevelJ[getLevel[n]], ss},ss=Subsets[outerRing,{n-getBaseN[n]}];
SortBy[m[Join[base,#]]&/@ss,Last][[1]]]

कुछ चेकों ने एन के एकल मान (समरूपता सहित) के लिए एक लाख से अधिक मामलों की तुलना की। कुल 34 परीक्षण मामलों को चलाने में लगभग 5 मिनट का समय लगा। कहने की जरूरत नहीं है, n'sइस बड़े बल के साथ दृष्टिकोण जल्द ही अव्यावहारिक साबित होगा। अधिक कुशल दृष्टिकोण मौजूद हैं।

प्रत्येक पैकिंग के दाईं ओर की संख्या संबंधित नीले उत्तल पतवारों की परिधि है। नीचे के लिए आउटपुट है 3 < n < 35। लाल वृत्त वे होते हैं जिन्हें एक नियमित षट्भुज के चारों ओर जोड़ा जाता है।

डिस्क



1
जैसा कि मैंने उपयोगकर्ता 81655 के उत्तर पर उल्लेख किया है, 22 (और 17, 25, 28, 31, 34) पर उभरे हुए एकल वृत्त को उन हलकों की पंक्ति के मध्य में बेहतर ढंग से रखा जाएगा, जिन पर वह बैठता है।
स्तर नदी सेंट

मैंने भी ऐसा सोचा था, लेकिन फिर मैंने नोट किया कि 9, जिसमें एक फैला हुआ वृत्त भी है, सही माना जाता है। जब मेरे पास कुछ समय होगा, तो मैं उत्तल पतवारों (केंद्रों) के मापों की तुलना करूँगा।
डेविडक

9 में उभरे हुए वृत्त समतल पंक्ति के साथ या तो 1/4 या 3/4 होते हैं, इसलिए इससे कोई अंतर नहीं पड़ता है। 17, 22, 25, 28, 31 में फैलाव चक्र 1/6, 3/6 या 5/6 है, इसलिए मध्य स्थिति बेहतर है (एक स्ट्रिंग बग़ल में खींचने के बारे में सोचें: यह बीच से खींचना आसान है क्योंकि जिस तरह से स्ट्रिंग को करने के लिए कम विस्तार है। 34 (और 35) में हमारे पास 1/8, 3/8, 5/8 और 7/8 फ्लैट साइड हैं। इसलिए इन के लिए हमें 3/8 और 5/8 का चयन करना चाहिए। 1/8 और 7/8 से पहले।
लेवल रिवर सेंट

आप बिल्कुल सही हैं और इसकी पुष्टि माप द्वारा की जाती है।
2

यह कमाल का है! संक्रमण 30-> 31 से पता चलता है कि हम केवल पिछले आकार को नहीं ले सकते हैं और बाहर के लिए एक सर्कल जोड़ सकते हैं (जो कि 16.464 की परिधि देगा।) कम से कम एक मामला है जहां आप सिर्फ एक सर्कल जोड़ सकते हैं। बाहर, लेकिन एक अलग व्यवस्था का चुनाव किया: 12-> 13
लेवल रिवर सेंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.