Mathematica 186 (açgözlü) ve 224 (tüm kombinasyonlar)
Açgözlü Çözüm
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]
Bu gereksiz ışıkları tek tek kapatır. Işık söndüğünde ışık kapsamı azalmazsa, bu ışık ortadan kaldırılabilir. Açgözlü yaklaşım çok hızlıdır ve 15x15 ve daha büyük matrisleri kolayca işleyebilir (aşağıya bakın). Tek bir çözüm döndürür, ancak bunun optimal olup olmadığı bilinmemektedir. Her iki yaklaşım da golf versiyonlarında kullanılmayan ışıkların sayısını döndürür. Golfsiz yaklaşımlar da aşağıdaki gibi ızgaraları gösterir.
Önce:

Sonra:

Tüm ışık kombinasyonlarını kullanan Optimal Çözümler (224 karakter)
@ Clément sayesinde.
Tüm ışık kombinasyonlarını kullanan hareketsiz versiyon
fHerhangi bir morfolojik dönüşüm fonksiyonu sameCoverageQ, her ışığın içinde bulunduğu 3 x3 kareyi aydınlatılmış (sıfır yerine değer = 1) olarak davranır. bir ışık çiftliğin kenarına yakın olduğunda, çiftlik sayılır. Fazla sayma yok; Birden fazla lamba ile aydınlatılan bir kare basit bir şekilde yanar.Program her ışığı kapatır ve çiftlikte toplam aydınlatma kapsamının azaltılıp azaltılmadığını kontrol eder.
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]bayraklı hücre sayısını sayar. Işıkları saymak ve ayrıca yanan hücreleri saymak için kullanılır
sameCoverageQ[mat1, mat2] mat1'deki yanan hücrelerin mat2'deki yanan hücrelerin sayısına eşit olup olmadığını test eder. MortolojikTransform [[mat] bir ışık matrisi alır ve aydınladıkları hücrelerin bir matrisini döndürür.
c[m1]m1'den gelen tüm ışık kombinasyonlarını alır ve kapsama alanı için test eder. Maksimum kapsama sahip olanlar arasında, en az ampule sahip olanları seçer. Bunların her biri en uygun çözümdür.
Örnek 1:
6x6 kurulumu
(*all the lights *)
m=Array[RandomInteger[4]&,{6,6}]/.{2-> 0,3->0,4->0}
h[m]

Tüm optimum çözümler.
(*subsets of lights that provide full coverage *)
h/@(ReplacePart[Array[0&,Dimensions[m]],#/.{{j_Integer,k_}:> {j,k}-> 1}]&/@(c[m]))

Tüm ışık kombinasyonlarını kullanarak golf versiyonu.
Bu sürüm kullanılmayan ışıkların sayısını hesaplar. Izgaraları göstermez.
c kullanılmayan ışıkların sayısını döndürür.
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]bayraklı hücre sayısını sayar. Işıkları saymak ve ayrıca yanan hücreleri saymak için kullanılır
s[mat1, mat2] mat1'deki yanan hücrelerin mat2'deki yanan hücrelerin sayısına eşit olup olmadığını test eder. [[mat] bir ışık matrisi alır ve aydınladıkları hücrelerin bir matrisini döndürür.
c[j]j'den tüm ışık kombinasyonlarını alır ve kapsama alanı için test eder. Maksimum kapsama sahip olanlar arasında, en az ampule sahip olanları seçer. Bunların her biri en uygun çözümdür.
ÖRNEK 2
m=Array[RandomInteger[4]&,{6,6}]/.{2-> 0,3->0,4->0};
m//Grid

Aynı aydınlatma kapsamına sahipken iki ışık kaydedilebilir. santimetre]
2