নিরাপদে ফাটল!


10

Https://puzzling.stackexchange.com/questions/24334/to-catch-a-thif দ্বারা অনুপ্রাণিত

আপনি একটি দেওয়া হয় nদ্বারা n( nগ্রিড ভরা নিজেই ঐচ্ছিক ইনপুট হয়) 0s এবং 1গুলি (বা আপনার পছন্দের অন্য কোন চরিত্র)। আপনার লক্ষ্য প্রতিটি কক্ষকে একই (হয় 0বা 1) তৈরি করা। আপনি নীচে সংজ্ঞায়িত হিসাবে একটি পদক্ষেপের সিরিজ করতে পারেন (পাজল এসই লিঙ্কের সাথে নোটের ভিন্নতা নোট করুন):

  • একটি ঘর নির্বাচন করুন।
  • একই সারি এবং কলামের প্রতিটি ঘর (ঘরটি নিজেই বাদে) তার বিপরীতে পরিবর্তিত হয়। 0থেকে 1এবং 1থেকে 0

টাস্কটি শেষ করতে প্রয়োজনীয় ন্যূনতম সংখ্যার আউটপুট যদি অলভ্যযোগ্য হয় তবে অ-নেতিবাচক পূর্ণসংখ্যা ছাড়া কিছু আউটপুট করুন। সংক্ষিপ্ততম কোড জিতেছে।

নমুনা তথ্য

1 0 0
0 0 0
0 0 0

-1

1 1 1
1 1 1
1 1 1

0

1 0 1
0 1 0
1 0 1

1

1 1 1 1
0 0 0 0
0 0 0 0
1 1 1 1

2

0 1 0 1
1 0 1 0
1 0 1 0
0 1 0 1

2


3
ধাঁধাটি অমীমাংসিত হলে কী করতে হবে? উদাহরণস্বরূপ 1000(বর্গক্ষেত্র হিসাবে পুনরায় সাজানো, কীভাবে তা বিবেচনা করে না)।
orlp


@orlp কোনও আউটপুট যা সংখ্যার নয় তা করবে।
ভূত_স_ই_কোড

আমাদের কি ইনপুট পার্স করতে হবে বা এটি ইতিমধ্যে কোনও ভরাট অ্যারে ডেটাটাইপ হতে পারে?
coredump

1
প্রথম পরীক্ষার মামলার সমাধান কী? আমি এর কোন সমাধান পাচ্ছি না।
পিচবোর্ড_বক্স

উত্তর:


4

মতলব 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

1

পার্ল 5, 498 বাইট

এটি 'এন' এবং পছন্দসই ফলাফল স্বীকার করে এবং গণনাটি বা 'এক্স' না হলে আউটপুট দেয়।

উদাহরণ স্বরূপ:

perl ./crack.golf.pl 3 000111111

দেয় 2। এটি কেবল তখনই কাজ করবে যখন n ^ 2 <= 64, তাই n <= 8। যদিও এটি এন এর সাথে 5 এর কম কম হলেও এটি বেশ ধীরে ধীরে It 3 বিট অ্যারে তৈরি করে এবং আগেই 2 n (n ^ 2) অ্যারে বাছাই করে, কেন না ?

পাঠযোগ্যতার জন্য আমি এখানে বেশ কয়েকটি লাইনফিড নষ্ট করেছি :

$n=shift;$y=shift;$p=$n*$n;@m=(0..$n-1);@q=(0..$p-1);@v=(0..2**$p-1);@d=map{0}(@q);@b=map{$r=$_;map{$c=$_;$d[$r*$n+$_]^=1 for(@m);$d[$_*$n+$c]^=1 for(@m);$j=0;$k=1;
map{$j|=$k*$d[$_];$k<<=1;}@q;@d=map{0}(@q);$j;}@m}@m;for$k(sort{$a->[0]<=>$b->[0]}map{$z=0;map{$z+=$_}split(//,sprintf"%b",$_);[$z,$_]}@v){$l=sprintf"%0${p}b",$k->[1];
@m=map{$_}split(//,$l);$s=0;for(@q){$s^=$b[$_]if$m[$_];}$z=0;map{$z+=$_}split(//,sprintf"%b",$_);if($y eq sprintf"%0${p}b",$s){print"$k->[0]\n";exit 0;}}print"X\n";
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.