একটি এএসপি / প্রোলগ / স্যাট ফ্লো সলভার লিখুন


9

ফ্লো ফ্রি একটি আসক্তিযুক্ত অ্যান্ড্রয়েড গেম যেখানে আপনাকে অ-ওভারল্যাপিং সাপের মাধ্যমে একসাথে কয়েকটি উপাদান সংযুক্ত করতে হবে এবং পুরো গ্রিডটি পূরণ করতে হবে। একটি বিবরণের জন্য, এখানে দেখুন:

https://play.google.com/store/apps/details?id=com.bigduckgames.flow&hl=en

আমার কাছে একটি এএসপি (উত্তর সেট প্রোগ্রামিং) সমাধান রয়েছে যা কেবলমাত্র কয়েকটি বিধি এবং আমি মনে করি না যে একই সমাধানটিকে প্রায় সংক্ষিপ্তভাবে একটি স্যাট উদাহরণ হিসাবে বাক্য বলা সম্ভব, তবে আমি ভুল প্রমাণিত হতে আগ্রহী হব।

যে কোনও ভাষা ঠিক আছে, তবে আমি সন্দেহ করি যে এটি কোনও ধরণের সলভার না চালিয়ে সংক্ষিপ্তভাবে করা যায় যার কারণেই আমি এএসপি / প্রোলজ / স্যাট লেবেল করেছি

বিজয়ী স্বল্পতম অক্ষর।

ভবিষ্যদ্বাণীগুলি ব্যবহার করে আপনি সমস্যাটিকে সংজ্ঞায়িত বলে ধরে নিতে পারেন:

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

তদতিরিক্ত, ইনপুট সন্তুষ্ট

a(W,V) :- a(V,W) % Adjacencies are bidirectional

2{s(V,C) : v(V)}2 :- c(C). % Every color has exactly two endpoints

সমাধান প্রেরিকেট ফর্ম হতে হবে

e(V,W,C).

বলছেন যে রঙিন সি এর ভি এবং ডাব্লু এর মাঝে একটি প্রান্ত রয়েছে

প্রান্তগুলি অবশ্যই দ্বিদ্বিতীয় (একই বর্ণের)। প্রতিটি ভার্টেক্সের অবশ্যই এক রঙের এবং এর থেকে প্রান্ত থাকা উচিত। শেষ পয়েন্টগুলির ঠিক এক প্রান্ত রয়েছে, অন্য সমস্ত শীর্ষে ঠিক দুটি প্রান্ত রয়েছে। কোনও লুপ নেই, প্রতিটি সাপকে অবশ্যই দুটি প্রান্তে ফিরে যেতে হবে।

এটি পরীক্ষা করার জন্য এখানে একটি নমুনা ইনপুট রয়েছে (নিয়মিত প্যাকের 5x5 স্তর 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).

এবং আউটপুট পরীক্ষা করার জন্য

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).

এছাড়াও স্তর 21 5x5 1 টিরও বেশি সমাধানের সাথে প্রথম ধাঁধা হওয়া উচিত (বিশেষত, 9 টি সমাধান রয়েছে 40 না) 21 স্তর স্থাপন করতে, ইনপুটটির শেষ কয়েকটি লাইন সেট করুন

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).

উত্তর:


4

এএসপি (ক্লিঙ্গো), 180 বাইট

{e(V,W,C):a(V,W),c(C)}.r(V):-s(V,_).r(V):-r(W),e(W,V,_).o(V):-r(V),{e(V,W,_):v(W);s(V,_)}=2.:-e(V,_,C),e(V,_,D),C!=D.:-e(V,W,C),not e(W,V,C).:-v(V),not o(V).:-s(V,C),e(V,_,D),C!=D.

আমি এএসপিতে নতুন, তাই কিছুটা পুরানো হলেও এই কাজটি খুঁজে পেয়ে আমি আগ্রহী। এখানে ভিন্নতার জন্য জায়গা এবং গল্ফ করার জন্য একটি সুযোগ ছিল যা আমার বোঝার সীমাবদ্ধতার দিকে নিয়ে গিয়েছিল দেখে ভাল লাগল (আমি আশা করি এটি এখনও সঠিক, এটি মনে হয়)।

এখানে একটি মন্তব্য করা সংস্করণ:

% Select some edges e(V,W,C) s.t. V and W are adjacent and C is a color.
{e(V,W,C):a(V,W),c(C)}.

% Auxilary predicates:

% A vertex is reachable from an endpoint if
% it is an endpoint ...
r(V):-s(V,_).
% ... or it has an edge to it from a reachable vertex.
r(V):-r(W),e(W,V,_).

% A vertex is okay if it is reachable and either
% is an endpoint with one edge or is not an endpoint and has two edges.
% This is golfed to: the set of edges from V and endpoints V has
% cardinality 2.
o(V):-r(V),{e(V,W,_):v(W);s(V,_)}=2.

% Constraints:  We do not want ...

% edges from the same vertex with different colors:
:-e(V,_,C),e(V,_,D),C!=D.

% edges without their inverses:
:-e(V,W,C),not e(W,V,C).

% vertices that are not okay:
:-v(V),not o(V).

% edges from endpoints with the wrong color
:-s(V,C),e(V,_,D),C!=D.

% We're only interested in the e predicate:
#show e/3.

আমি বিভিন্ন এএসপি সলভার সম্পর্কে জানি না, তবে আমি ক্লিঙ্গো ব্যবহার করেছি, যা ডিবিয়ানে গ্রিংগো প্যাকেজটিতে রয়েছে।

আপনার যদি কোনও ফাইলে সমস্যা হয় এবং একটি ফাইলে probআমার কোড থাকে তবে solveকল করুন clingo 0 prob solve। প্রতিটি সমাধানের জন্য, আপনি এটি ব্যবহার করে রঙিন প্রান্তগুলির তালিকা পাবেন (এবং যদি আপনি গল্ফযুক্ত সংস্করণ ব্যবহার করেন যা #showলাইনের অভাবে ব্যবহার করে তবে অন্যান্য সমস্ত ভবিষ্যদ্বাণী করে )। আপনি যদি কেবল সমাধানের সংখ্যা চান তবে বিকল্পটি যুক্ত করুন -q। কমপক্ষে একটি সমাধান রয়েছে কিনা তা আপনি যদি জানতে চান তবে কল করুন 0

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.