Flow Free, üst üste binmeyen yılanlar aracılığıyla element çiftlerini birbirine bağlamak ve tüm ızgarayı doldurmak zorunda olduğunuz bağımlılık yapan bir android oyunudur. Bir açıklama için buraya bakın:
https://play.google.com/store/apps/details?id=com.bigduckgames.flow&hl=en
Sadece birkaç kural olan bir ASP (yanıt kümesi programlama) çözümü var ve aynı çözümü neredeyse bir SAT örneği kadar kısaca ifade etmenin mümkün olduğunu düşünmüyorum, ancak yanlış kanıtlanmakla ilgileniyorum.
Herhangi bir dil iyi, ama bir tür çözücü çalıştırmadan kısaca yapılabileceğinden şüpheliyim, bu yüzden ASP / Prolog / SAT olarak etiketledim
Kazanan en az karakter.
Sorunun tahminleri kullanarak tanımlandığını varsayabilirsiniz:
v(V). % A vertex
a(V,W). % V and W are adjacent
c(C). % A color
s(V,C). % V is an endpoint of color C
Ayrıca, girdi
a(W,V) :- a(V,W) % Adjacencies are bidirectional
2{s(V,C) : v(V)}2 :- c(C). % Every color has exactly two endpoints
Çözüm yüklemi formda olacaktır
e(V,W,C).
C renginin V ve W arasında bir kenar olduğunu söyleyerek.
Kenarlar çift yönlü olmalıdır (aynı renkte). Her tepe noktasının kenarları tam olarak bir renkte olmalıdır. Uç noktaların tam olarak bir kenarı vardır, diğer tüm köşelerin tam olarak iki kenarı vardır. Döngü yok, her yılan iki uç noktaya kadar izlenebilir olmalıdır.
İşte test etmek için örnek bir giriş (Normal Pakette 5x5 Seviye 2):
v(v11; v12; v13; v14; v15).
v(v21; v22; v23; v24; v25).
v(v31; v32; v33; v34; v35).
v(v41; v42; v43; v44; v45).
v(v51; v52; v53; v54; v55).
a(v11, v12).
a(v12, v13).
a(v13, v14).
a(v14, v15).
a(v12, v11).
a(v13, v12).
a(v14, v13).
a(v15, v14).
a(v11, v21).
a(v12, v22).
a(v13, v23).
a(v14, v24).
a(v15, v25).
a(v21, v22).
a(v22, v23).
a(v23, v24).
a(v24, v25).
a(v22, v21).
a(v23, v22).
a(v24, v23).
a(v25, v24).
a(v21, v31).
a(v22, v32).
a(v23, v33).
a(v24, v34).
a(v25, v35).
a(v21, v11).
a(v22, v12).
a(v23, v13).
a(v24, v14).
a(v25, v15).
a(v31, v32).
a(v32, v33).
a(v33, v34).
a(v34, v35).
a(v32, v31).
a(v33, v32).
a(v34, v33).
a(v35, v34).
a(v31, v41).
a(v32, v42).
a(v33, v43).
a(v34, v44).
a(v35, v45).
a(v31, v21).
a(v32, v22).
a(v33, v23).
a(v34, v24).
a(v35, v25).
a(v41, v42).
a(v42, v43).
a(v43, v44).
a(v44, v45).
a(v42, v41).
a(v43, v42).
a(v44, v43).
a(v45, v44).
a(v41, v51).
a(v42, v52).
a(v43, v53).
a(v44, v54).
a(v45, v55).
a(v41, v31).
a(v42, v32).
a(v43, v33).
a(v44, v34).
a(v45, v35).
a(v51, v52).
a(v52, v53).
a(v53, v54).
a(v54, v55).
a(v52, v51).
a(v53, v52).
a(v54, v53).
a(v55, v54).
a(v51, v41).
a(v52, v42).
a(v53, v43).
a(v54, v44).
a(v55, v45).
s(v11, yellow).
s(v45, yellow).
s(v41, blue).
s(v55, blue).
s(v51, red).
s(v43, red).
s(v42, green).
s(v33, green).
c(red; green; blue; yellow).
Ve çıktıyı test etmek için
shouldbe(v33,v32,green).
shouldbe(v42,v32,green).
shouldbe(v43,v53,red).
shouldbe(v51,v52,red).
shouldbe(v55,v54,blue).
shouldbe(v41,v31,blue).
shouldbe(v45,v35,yellow).
shouldbe(v11,v12,yellow).
shouldbe(v12,v11,yellow).
shouldbe(v35,v45,yellow).
shouldbe(v31,v41,blue).
shouldbe(v54,v55,blue).
shouldbe(v52,v51,red).
shouldbe(v53,v43,red).
shouldbe(v32,v42,green).
shouldbe(v32,v33,green).
shouldbe(v53,v52,red).
shouldbe(v52,v53,red).
shouldbe(v54,v44,blue).
shouldbe(v31,v21,blue).
shouldbe(v35,v25,yellow).
shouldbe(v12,v13,yellow).
shouldbe(v13,v12,yellow).
shouldbe(v25,v35,yellow).
shouldbe(v21,v31,blue).
shouldbe(v44,v54,blue).
shouldbe(v44,v34,blue).
shouldbe(v21,v22,blue).
shouldbe(v25,v15,yellow).
shouldbe(v13,v14,yellow).
shouldbe(v14,v13,yellow).
shouldbe(v15,v25,yellow).
shouldbe(v22,v21,blue).
shouldbe(v34,v44,blue).
shouldbe(v34,v24,blue).
shouldbe(v22,v23,blue).
shouldbe(v15,v14,yellow).
shouldbe(v14,v15,yellow).
shouldbe(v23,v22,blue).
shouldbe(v24,v34,blue).
shouldbe(v24,v23,blue).
shouldbe(v23,v24,blue).
:-not e(V,W,C),shouldbe(V,W,C).
:-e(V,W,C),not shouldbe(V,W,C).
Ayrıca Seviye 21 5x5, 1'den fazla çözüme sahip ilk bulmaca olmalıdır (özellikle 40 değil 9 çözüm vardır) Seviye 21'i ayarlamak için girişin son birkaç satırını
s(v55, yellow).
s(v44, yellow).
s(v15, blue).
s(v45, blue).
s(v51, red).
s(v53, red).
s(v22, green).
s(v14, green).
s(v23, orange).
s(v43, orange).
c(red; green; blue; yellow; orange).