गणितज्ञ 186 (लालची) और 224 (सभी संयोजन)
लालची समाधान
t=MorphologicalTransform;n@w_:=Flatten@w~Count~1
p_~w~q_:=n[p~t~Max]==n[q~t~Max]
g@m_:=Module[{l=m~Position~1,r,d=m},While[l!={},If[w[m,r=ReplacePart[d,#-> 0]&
[l[[1]]]],d=r];l=Rest@l];n@m-n@d]
यह एक के बाद एक शानदार रोशनी बंद कर देता है। यदि प्रकाश के जाने पर प्रकाश का कवरेज कम नहीं होता है, तो उस प्रकाश को समाप्त किया जा सकता है। लालची दृष्टिकोण बहुत तेज है और आसानी से 15x15 के मैट्रिक्स को संभाल सकता है और बहुत बड़ा (नीचे देखें)। यह एक एकल समाधान लौटाता है, लेकिन यह अज्ञात है कि क्या यह इष्टतम है या नहीं। दोनों दृष्टिकोण, गोल्फ संस्करणों में अप्रयुक्त रोशनी की संख्या वापस करते हैं। गैर-गोल्फ दृष्टिकोण भी नीचे के रूप में ग्रिड प्रदर्शित करता है।
इससे पहले:

उपरांत:

प्रकाश के सभी संयोजनों का उपयोग कर इष्टतम समाधान (224 चार्ट)
@ क्लेमेंट के लिए धन्यवाद के साथ।
रोशनी के सभी संयोजनों का उपयोग करते हुए अनप्लग्ड संस्करण
एफ। रूपात्मक sameCoverageQव्यवहार फ़ंक्शन का उपयोग लिट के रूप में किया जाता है (शून्य के बजाय मूल्य = 1) 3 x3 वर्ग जिसमें प्रत्येक प्रकाश रहता है। जब एक प्रकाश खेत के किनारे के पास होता है, केवल चौकों (9 से कम) सीमाओं के भीतर खेत गिने जाते हैं। एक से अधिक लैंप जलाया हुआ एक वर्ग बस जलाया जाता है। कार्यक्रम प्रत्येक प्रकाश को बंद कर देता है और यह देखने के लिए जांच करता है कि क्या खेत पर समग्र प्रकाश कवरेज कम हो गया है। यदि ऐसा नहीं है, तो प्रकाश समाप्त हो जाता है।
nOnes[w_]:=Count[Flatten@w,1]
sameCoverageQ[m1_,m2_]:=nOnes[MorphologicalTransform[m1,Max]]==
nOnes[MorphologicalTransform[m2,Max]]
(*draws a grid with light bulbs *)
h[m_]:=Grid[m/.{1-> Style[\[LightBulb],24],0-> ""},Frame-> All,ItemSize->{1,1.5}]
c[m1_]:=GatherBy[Cases[{nOnes[MorphologicalTransform[ReplacePart[Array[0&,Dimensions[m1]],
#/.{{j_Integer,k_}:> {j,k}-> 1}],Max]],#,Length@#}&/@(Rest@Subsets[Position[m1,1]]),
{nOnes[MorphologicalTransform[m1,Max]],_,_}],Last][[1,All,2]]
nOnes[matrix]ध्वजांकित कोशिकाओं की संख्या को गिना जाता है। इसका उपयोग रोशनी को गिनने के लिए और जली हुई कोशिकाओं को गिनने के लिए भी किया जाता है
sameCoverageQ[mat1, mat2] परीक्षण करता है कि क्या मैट 1 में जलाई गई कोशिकाएं चटाई 2 में जलाई गई कोशिकाओं की संख्या के बराबर हैं। मॉर्फोलॉजिकल ट्रान्सफॉर्म [[चटाई] रोशनी का एक मैट्रिक्स लेती हैं और उन कोशिकाओं के एक मैट्रिक्स को वापस लौटाती हैं जिन्हें वे प्रकाश करते हैं।
c[m1]एम 1 से रोशनी के सभी संयोजन लेता है और कवरेज के लिए उनका परीक्षण करता है। अधिकतम कवरेज वाले लोगों में, यह उन लोगों का चयन करता है जिनके पास सबसे कम प्रकाश बल्ब हैं। इनमें से प्रत्येक एक इष्टतम समाधान है।
उदाहरण 1:
एक 6x6 सेटअप
(*all the lights *)
m=Array[RandomInteger[4]&,{6,6}]/.{2-> 0,3->0,4->0}
h[m]

सभी इष्टतम समाधान।
(*subsets of lights that provide full coverage *)
h/@(ReplacePart[Array[0&,Dimensions[m]],#/.{{j_Integer,k_}:> {j,k}-> 1}]&/@(c[m]))

रोशनी के सभी संयोजनों का उपयोग कर गोल्फ संस्करण।
यह संस्करण अप्रयुक्त रोशनी की संख्या की गणना करता है। यह ग्रिड प्रदर्शित नहीं करता है।
c अप्रयुक्त रोशनी की संख्या लौटाता है।
n@w_:=Flatten@w~Count~1;t=MorphologicalTransform;
c@r_:=n@m-GatherBy[Cases[{n@t[ReplacePart[Array[0 &,Dimensions[r]],#
/.{{j_Integer,k_}:> {j,k}-> 1}],Max],#,Length@#}&/@(Rest@Subsets[r~Position~1]),
{n[r~t~Max],_,_}],Last][[1,1,3]]
n[matrix]ध्वजांकित कोशिकाओं की संख्या को गिना जाता है। इसका उपयोग रोशनी को गिनने के लिए और जली हुई कोशिकाओं को गिनने के लिए भी किया जाता है
s[mat1, mat2] यह परीक्षण करता है कि क्या मैट 1 में जलाई गई कोशिकाएं mat2.t में जलाई गई कोशिकाओं की संख्या के बराबर होती हैं [[चटाई] रोशनी का एक मैट्रिक्स लेती हैं और उन कोशिकाओं के एक मैट्रिक्स को लौटा देती हैं जिन्हें वे प्रकाश करते हैं।
c[j]जम्मू से रोशनी के सभी संयोजन लेता है और कवरेज के लिए उनका परीक्षण करता है। अधिकतम कवरेज वाले लोगों में, यह उन लोगों का चयन करता है जिनके पास सबसे कम प्रकाश बल्ब हैं। इनमें से प्रत्येक एक इष्टतम समाधान है।
उदाहरण 2
m=Array[RandomInteger[4]&,{6,6}]/.{2-> 0,3->0,4->0};
m//Grid

एक ही प्रकाश कवरेज होने पर दो रोशनी को बचाया जा सकता है। से। मी]
2