এসডাব্লুআই-প্রোলগ - 250
ওহ ছেলে, আমি এ নিয়ে অনেক দীর্ঘ সময় কাটিয়েছি।
o(A,B,A+B).
o(A,B,A-B).
o(A,B,A*B).
t([],0).
t([A,B|T],D):-t(T,Q),o(A,B,C),o(C,Q,D).
t([A|T],C):-t(T,Q),o(A,Q,C).
a(A):-t(A,B),n(C),B>C,retract(n(C)),assert(n(B)).
m(A):-assert(n(0)),\+p(A),n(R),R2 is R,write(R2).
p(A):-permutation([0|A],B),a(B),0=1.
কমান্ড লাইন থেকে কল করা (যেমন):
> swipl -s filename.pl -g "m([1, 1, 1, 1, 1])" -t halt
6
(কোনও বিশিষ্ট কারণ ছাড়াই, আমি এটি দুর্দান্ত দেখতে পেয়েছি যে আমার গল্ফড ক্রিয়াকলাপের নামগুলি "টমেটো পাত্র" "বানান করে)
অবরুদ্ধ সংস্করণ:
% Possible operations
operation(Left, Right, Left + Right).
operation(Left, Right, Left - Right).
operation(Left, Right, Left * Right).
% Possible ways to transform
transform([], 0).
transform([A, B|T], D) :- transform(T, Q), operation(A, B, C), operation(C, Q, D).
transform([A|T], C) :- transform(T, Q), operation(A, Q, C).
% Throw the given array through every possible transformation and update the max
all_transforms(A) :- transform(A, B), n(C), B>C, retract(n(C)), assert(n(B)).
% Find all the permutations and transformations, then fail and continue execution.
prog(A) :- assert(n(0)), !, permutation([0|A], B), all_transforms(B), fail.
% End the program
finished :- n(R), write(R), nl, R2 is R, write(R2), nl.
% Run the program
main(A) :- ignore(prog(A)), finished.
ব্যাখ্যা:
- আর্গুমেন্ট হিসাবে অ্যারে নিন।
- অ্যারের সমস্ত অনুমোদন পান।
- অ্যারে যুক্ত করতে অপারেটরদের কিছু ব্যবস্থা সন্ধান করুন। (এটি গতিশীল প্রোগ্রামিংয়ের মাধ্যমে সম্পন্ন করা হয়েছে, এটি দেখার জন্য যে আমরা প্রথম দুটি উপাদান একত্রিত করি কিনা তা ভাল whether
- এটি আমাদের বর্তমান সর্বাধিক মানের বিপরীতে দেখুন। যদি এটি আরও ভাল হয় তবে এটি প্রতিস্থাপন করুন।
- প্রোগ্রামটি বলুন আমরা ব্যর্থ হয়েছি যাতে এটি চেক করে চলে, তবে তারপরে অগ্রাহ্য সামগ্রিক প্রত্যাবর্তন করতে এবং চালিয়ে যাওয়ার জন্য এটি (ব্যবহার করে )
ignore
বা উপেক্ষা করুন ।\+
true
- আমাদের একটি সংখ্যার পরিবর্তে পূর্বাভাসের একটি স্ট্রিং দেওয়া হয়েছে, সুতরাং এটি ব্যবহার করে নির্ধারণ করুন
is
এবং তারপরে এটি লিখুন।