মতলব 171 বাইট
ইনপুটটি 2 ডি ম্যাট্রিক্স হওয়া উচিত, সুতরাং আপনি এটিকে ডাকবেন c([1,1,1,1;0,0,0,0;0,0,0,0;1,1,1,1])
(সেমিকোলনগুলি একটি নতুন সারি শুরু করবে)। এই ফাংশনটি সমস্ত সম্ভাব্য পদক্ষেপগুলিকে কেবল ক্ষতিকারক করে তোলে, তাই আমরা একটি রানটাইম পাই O(2^(n^2))
।
এটি সম্পন্ন করা হয় কিভাবে
এটি একই এবং মাপের শূন্যের সাথে অন্য ম্যাট্রিক্স পূরণের সমস্ত সম্ভাব্য উপায় বাছাই করে করা হয়, এটি মূলত বাইনারি উইচে গণনা করা হয় যেখানে ম্যাট্রিক্সের প্রতিটি প্রবেশ 2 একটি নির্দিষ্ট শক্তির প্রতিনিধিত্ব করে।
তারপরে আমরা সেই কোষগুলিতে 1 টি পদক্ষেপগুলি সঞ্চালন করি , এটি 1xn এবং nx1 আকারের ভেক্টরের সাথে দুটি দ্বিমাত্রিক সমঝোতার যোগ (মোড 2) দ্বারা সম্পন্ন হয়।
অবশেষে আমরা সিদ্ধান্ত নিই যে এই পদক্ষেপগুলি সমস্ত এন্ট্রিগুলিতে মানক বিচ্যুতি গণনা করে কাঙ্ক্ষিত ফলাফলটি আসলে উত্সাহিত করেছিল। মানক বিচ্যুতিটি কেবলমাত্র শূন্য হয় যদি সমস্ত এন্ট্রি একই থাকে। এবং যখনই আমরা বাস্তবে পছন্দসই ফলাফল পেয়েছি আমরা এটি পূর্ববর্তী সমাধানগুলির চালগুলির সংখ্যার সাথে তুলনা করি। inf
প্রদত্ত সমস্যা সমাধানযোগ্য না হলে ফাংশনটি ফিরে আসবে ।
ম্যাথ?
এটি লক্ষণীয় যে এই সমস্ত পদক্ষেপগুলি একত্রে একটি আবেলীয় গ্রুপ তৈরি করে! যদি কেউ এই গ্রুপগুলিকে ক্যালসাইফাই করার ব্যবস্থা করে তবে দয়া করে আমাকে জানান।
গল্ফ সংস্করণ:
function M=c(a);n=numel(a);p=a;M=inf;o=ones(1,n);for k=0:2^n-1;p(:)=dec2bin(k,n)-'0';b=mod(conv2(p,o,'s')+conv2(p,o','s'),2);m=sum(p(:));if ~std(b(:)-a(:))&m<M;M=m;end;end
সম্পূর্ণ সংস্করণ (আসল পদক্ষেপের ফলাফল সহ)।
function M = c(a)
n=numel(a);
p=a;
M=inf; %current minimum of number of moves
o=ones(1,n);
for k=0:2^n-1;
p(:) = dec2bin(k,n)-'0'; %logical array with 1 where we perform moves
b=mod(conv2(p,o,'same')+conv2(p,o','same'),2); %perform the actual moves
m=sum(p(:)); %number of moves;
if ~std(b(:)-a(:))&m<M %check if the result of the moves is valid, and better
M=m;
disp('found new minimum:')
disp(M) %display number of moves of the new best solution (not in the golfed version)
disp(p) %display the moves of the new best solution (not in the golfed version)
end
end
1000
(বর্গক্ষেত্র হিসাবে পুনরায় সাজানো, কীভাবে তা বিবেচনা করে না)।