किर्कमैन की छात्रा समस्या का विस्तार करें


22

आप में से जो अपरिचित हैं, उनके लिए किर्कमैन की छात्रा समस्या निम्नानुसार है:

एक स्कूल में पंद्रह युवा महिलाओं ने उत्तराधिकार में सात दिनों के लिए तीन बार सैर की: उन्हें रोजाना व्यवस्थित करना आवश्यक है ताकि कोई भी दो बार नहीं चल सके।

हम इसे नेस्टेड 3 बाय 5 लिस्ट (या मैट्रिक्स) की तरह देख सकते हैं:

[[a,b,c]
 [d,e,f]
 [g,h,i]
 [j,k,l]
 [m,n,o]]

मूल रूप से, मूल समस्या का लक्ष्य उपरोक्त मैट्रिक्स को व्यवस्थित करने के लिए 7 अलग-अलग तरीकों का पता लगाना है ताकि दो अक्षर कभी एक पंक्ति को एक से अधिक बार साझा न करें । MathWorld (उपरोक्त लिंक) से, हमें यह समाधान मिलता है:

[[a,b,c]   [[a,d,h]   [[a,e,m]   [[a,f,i]   [[a,g,l]   [[a,j,n]   [[a,k,o]
 [d,e,f]    [b,e,k]    [b,h,n]    [b,l,o]    [b,d,j]    [b,i,m]    [b,f,g]
 [g,h,i]    [c,i,o]    [c,g,k]    [c,h,j]    [c,f,m]    [c,e,l]    [c,d,n]
 [j,k,l]    [f,l,n]    [d,i,l]    [d,k,m]    [e,h,o]    [d,o,g]    [e,i,j]
 [m,n,o]]   [g,j,m]]   [f,j,o]]   [e,g,n]]   [i,k,n]]   [f,h,k]]   [h,l,m]]

अब, अगर स्कूली छात्राओं की संख्या अलग होती तो क्या होता? क्या कोई आठवां दिन हो सकता है? Challenge यह हमारी चुनौती है।

इस मामले में कोई †† , लेकिन जरूरी नहीं कि अन्य सरणी आयामों के लिए
†† हम आसानी से इस दिखा सकते हैं, के बाद से aहर दूसरे पत्र के साथ एक पंक्ति में दिखाई देता है।


चुनौती:

स्कूली छात्राओं (यानी की एक सरणी के आयाम का एक इनपुट (पंक्तियाँ, कॉलम से) को देखते हुए 3 x 5, 4 x 4या [7,6], [10,10], आदि), उत्पादन 'दिन' है कि आवश्यकताओं को ऊपर निर्दिष्ट फिट के सबसे बड़े संभव सेट।

इनपुट:
छात्रा सरणी के लिए आयाम (आपकी इच्छानुसार कोई भी उचित इनपुट फॉर्म)।

आउटपुट:
उपरोक्त आवश्यकताओं (किसी भी उचित रूप) को फिटिंग करने वाले सरणियों की सबसे बड़ी संभावित श्रृंखला।

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

Input:  [1,1]
Output: [[a]]

Input:  [1,2]
Output: [[a,b]]

Input:* [2,1]
Output: [[a]
         [b]]

Input:  [2,2]
Output: [[a,b]  [[a,c]  [[a,d]
         [c,d]]  [b,d]]  [b,c]]

Input:  [3,3]
Output: [[a,b,c]  [[a,d,g]  [[a,e,i]  [[a,f,h]
         [d,e,f]   [b,e,h]   [b,f,g]   [b,d,i]
         [g,h,i]]  [c,f,i]]  [c,d,h]]  [c,e,g]]

Input:  [5,3]
Output: [[a,b,c]   [[a,d,h]   [[a,e,m]   [[a,f,i]   [[a,g,l]   [[a,j,n]   [[a,k,o]
         [d,e,f]    [b,e,k]    [b,h,n]    [b,l,o]    [b,d,j]    [b,i,m]    [b,f,g]
         [g,h,i]    [c,i,o]    [c,g,k]    [c,h,j]    [c,f,m]    [c,e,l]    [c,d,n]
         [j,k,l]    [f,l,n]    [d,i,l]    [d,k,m]    [e,h,o]    [d,o,g]    [e,i,j]
         [m,n,o]]   [g,j,m]]   [f,j,o]]   [e,g,n]]   [i,k,n]]   [f,h,k]]   [h,l,m]]

There may be more than one correct answer. 

* टेस्ट केस 3 को सही करने के लिए @Frozenfrank का धन्यवाद : यदि केवल एक कॉलम है, तो केवल एक दिन हो सकता है, क्योंकि पंक्ति क्रम कोई फर्क नहीं पड़ता।

यह प्रतियोगिता है - सबसे छोटी उत्तर जीत।


क्या यह किसी भी तरह से परिमित विमानों से संबंधित है या क्या मैं एक अलग समस्या के बारे में सोच रहा हूं?
नील

@ नील मेरा कोई सुराग नहीं है। मुझे डर है कि मैं इसका जवाब देने के योग्य नहीं हूं। ;-)
स्कॉट मिलनर

क्या कोई समय सीमा है?
19

@Artyer नहीं, लेकिन मैं कोड का परीक्षण करने में सक्षम होना चाहूंगा ...
स्कॉट मिलनर

2
@ नील जो एक मजेदार विकिपीडिया पढ़ा गया था।
मैजिक ऑक्टोपस यूरन

जवाबों:


12

गणितज्ञ, 935 बाइट्स

Inp={5,4};L=Length;T=Table;ST[t_,k_,n_]:=Binomial[n-1,t-1]/Binomial[k-1,t-1];H=ToExpression@Alphabet[];Lo=Inp[[1]]*Inp[[2]];H=H[[;;Lo]];Final={};ST[2,3,12]=4;ST[2,4,20]=5;If[Inp[[2]]==1,Column[Partition[H,{1}]],CA=Lo*Floor@ST[2,Inp[[2]],Lo];While[L@Flatten@Final!=CA,Final={};uu=0;S=Normal[Association[T[ToRules[H[[Z]]==Prime[Z]],{Z,L@H}]]];PA=Union[Sort/@Permutations[H,{Inp[[2]]}]];PT=Partition[H,Inp[[2]]];While[L@PA!=0,AppendTo[Final,PT];Test=Flatten@T[Times@@@Subsets[PT[[X]],{2}]/.S,{X, L@PT}];POK=T[Times@@@Subsets[PA[[Y]],{2}]/.S,{Y,L@PA}];Fin=Select[POK,L@Intersection[Test,#]==0&];Facfin=T[FactorInteger[Fin[[V]]],{V,L@Fin}];end=T[Union@Flatten@T[First/@#[[W]],{W,L@#}]&[Facfin[[F]]],{F,L@Facfin}]/.Map[Reverse,S];PA=end;PT=DeleteDuplicates[RandomSample@end,Intersection@##=!={}&];If[L@Flatten@PT<L@H,While[uu<1000,PT=DeleteDuplicates[RandomSample@end,Intersection@##=!={}&];If[L@Flatten@PT==L@H,Break[],uu++]]]]];Grid@Final]


यह अधिकतम 26 महिलाओं के लिए है

संपादित करें
मैंने कुछ बदलाव किए हैं और मुझे लगता है कि यह काम करता है! अभी कोड [5,4] को हल करने के लिए सेट किया गया है (जो "सोशल गोल्फर्स की समस्या है") और कुछ ही सेकंड में परिणाम प्राप्त करता है। हालाँकि [५,३] समस्या कठिन है और आपको १०-२० मिनट इंतजार करना होगा लेकिन आपको सभी दिनों के लिए एक सही संयोजन मिलेगा । आसान मामलों के लिए यह बहुत जल्दी है।

वैसे भी आप इसे कोशिश करते हैं और परिणाम देखने के लिए कर सकते हैं
यह ऑनलाइन का प्रयास करें यहाँ
कॉपी और Ctrl-V का उपयोग करके पेस्ट
shift + कोड को चलाने के लिए प्रवेश
आप कोड की शुरुआत में इनपुट को बदल सकते हैं -> Inp = {5,4}
चलाने कोड कई बार विभिन्न क्रमपरिवर्तन प्राप्त करने के लिए


हालांकि यह प्रभावशाली है, और समस्या को हल करने की दिशा में बहुत प्रगति करता है, यह अभी भी अधूरा है। हालांकि यह छोटे परीक्षण मामलों के लिए काम करता है, यह किसी भी बड़े लोगों को हल नहीं कर सकता है, [5,3]परीक्षण मामले सहित यह पूरी समस्या बंद है। इसके अलावा, यह अधिक गोल्फ हो सकता है; ऐसे कई चर नाम हैं जो उनके होने की तुलना में बड़े हैं, और कुछ कार्यों को @या प्रत्यय संकेतन के साथ छोटा किया जा सकता है। मुझे आशा है कि आप काम करते रहेंगे, हालाँकि!
स्कॉट मिलनर

इसे जाँचने के लिए धन्यवाद। मैं इस काम को पहले करने की कोशिश करूंगा और फिर इसे गोल्फ ...
J42161217

1
आपको अपने चर नामों को एकल अक्षर बनाकर बहुत सारे बाइट्स को बचाने में सक्षम होना चाहिए, और कुछ कार्य जिन्हें आप एक से अधिक बार चर के लिए उपयोग करते हैं और उन चर के साथ कार्यों की जगह लेते हैं :)
संख्यात्मक

2
@numbermaniac केवल चर नामों को बदलने से, मैं इसे नीचे लाने में सक्षम था 914। यह लगभग 850 तक नीचे होना चाहिए।
स्कॉट मिलनर

3
मैंने परीक्षण का मामला तय किया। सबसे पहले मैं यह काम करना चाहता हूं। यही कारण है कि मैंने इसे अभी तक गोल्फ नहीं किया है। आपकी सभी टिप्पणियों के लिए धन्यवाद। मुझे लगता है कि अब यह तैयार है।
J42161217
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.