একটি বিষযুক্ত ওয়াইন পরীক্ষার সময়সূচী তৈরি করুন


16

সম্প্রতি পাজলিং.এসই-তে, একটি সমস্যা হয়েছিল যা আমি নির্ধারণ সম্পর্কে লিখেছিলাম যে দুটি সংখ্যক দু'টি বোতল কীভাবে বিষযুক্ত হয় যখন বিষ কেবল তখনই সক্রিয় হয় যদি উভয় উপাদান মাতাল হয়। এটি পুরোপুরি অগ্নিপরীক্ষা হিসাবে শেষ হয়েছিল, বেশিরভাগ লোক একে সম্পূর্ণ আলাদা অ্যালগরিদম ব্যবহার করে ১৮ বা ১৯ জন বন্দীকে নামিয়ে আনতে পরিচালিত করে।

মূল সমস্যার বিবৃতিটি নিম্নরূপ:

আপনি মধ্যযুগীয় রাজ্যের শাসক যিনি নিক্ষেপ দল পছন্দ করেন। যে দরবারটি সর্বশেষে আপনার ওয়াইন বোতলগুলির মধ্যে একটিতে বিষ প্রয়োগ করার চেষ্টা করেছিল তা জানতে পেরে আপনি ক্রুদ্ধ হয়েছিলেন যে আপনি সনাক্ত করতে পেরেছিলেন যে তিনি কেবলমাত্র দশজন বন্দীর সহিত এক হাজারের মধ্যে বোতলকে বিষাক্ত করেছিলেন।

এবার সে কিছুটা কারিগর। তিনি একটি যৌগিক বিষ উদ্ভাবন করেছেন P: একটি বাইনারি তরল কেবল মারাত্মক যখন দুটি পৃথক ক্ষতিকারক উপাদান মিশ্রিত হয়; এটি কীভাবে ইপোক্সি কাজ করে তা সাদৃশ্য। তিনি আপনাকে এক হাজার টুকরো 1000 ওয়াইন বোতল প্রেরণ করেছেন। একটি বোতল উপাদান C_aএবং অন্য একটি উপাদান আছে C_b। ( P = C_a + C_b)

যে কেউ উভয় উপাদান পান করে সে মধ্যরাতের স্ট্রোকের সময় মারা যাবে যেদিন তারা চূড়ান্ত উপাদানটি খেয়েছিল, সে দিনটি কখনই তরলটি নষ্ট করে তা নির্বিশেষে। প্রতিটি বিষ উপাদানগুলি দ্বিতীয় উপাদানটি সক্রিয় না হওয়া পর্যন্ত শরীরে থাকে, সুতরাং আপনি যদি একদিন একটি উপাদান এবং পরের অংশটি পান করেন তবে আপনি দ্বিতীয় দিন শেষে মধ্যরাতে মারা যাবেন।

আপনার পরের পার্টির দু'দিন আগে আপনার আছে। কোন দুটি বোতল কলঙ্কিত রয়েছে তা চিহ্নিত করার জন্য আপনাকে পরীক্ষার জন্য সর্বনিম্ন কতগুলি বন্দি ব্যবহার করতে হবে এবং সেই সংখ্যক বন্দীর সাথে আপনার কী অ্যালগরিদম অনুসরণ করতে হবে?


বোনাস
অতিরিক্তভাবে, মনে করুন যে আপনার নিষ্পত্তিতে 20 বন্দির নির্দিষ্ট সীমা ছিল, আপনি তাত্ত্বিকভাবে পরীক্ষা করতে পারেন এমন বোতলগুলির সর্বাধিক সংখ্যা কত এবং কোন বোতলগুলি প্রভাবিত হয়েছিল সে সম্পর্কে একটি সঠিক সিদ্ধান্তে পৌঁছেছিল?

আপনার কাজ হ'ল বোনাস সমস্যা সমাধানের জন্য একটি প্রোগ্রাম তৈরি করা। nবন্দীদের দেওয়া , আপনার প্রোগ্রামটি একটি পরীক্ষার সময়সূচী তৈরি করবে যা বোতলগুলির মধ্যে দুটি বিষযুক্ত বোতল সনাক্ত করতে সক্ষম হবে m, যেখানে mযতটা সম্ভব বিশাল।

আপনার প্রোগ্রামটি প্রাথমিকভাবে ইনপুট Nনম্বর, বন্দীদের সংখ্যা হিসাবে গ্রহণ করবে । এটি তখন আউটপুট দেবে:

  • M, আপনি বোতল সংখ্যা পরীক্ষা করার চেষ্টা করবেন। এই বোতল থেকে লেবেল করা 1হবে M

  • N লাইনগুলি, বোতলগুলির লেবেলযুক্ত প্রতিটি বন্দী পান করবে।

আপনার প্রোগ্রামটি প্রথম ইনপুট হিসাবে প্রথম দিনেই বন্দী মারা গিয়েছিল এবং প্রথম সারিতে থাকা বন্দিটির সাথে 1পরবর্তী লাইনে থাকবে 2ইত্যাদি ইনপুট হিসাবে গ্রহণ করবে তারপরে , এটি আউটপুট দেবে:

  • Nআরও লাইন, বোতলগুলির লেবেলযুক্ত প্রতিটি বন্দী পান করবে। মৃত বন্দীদের ফাঁকা লাইন থাকবে।

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

দুটি বন্দী এবং চার বোতল একটি উদাহরণ ইনপুট যেমন বোতল 1এবং 3বিষ হয় যদি যেতে পারে :

> 2      // INPUT: 2 prisoners
4        // OUTPUT: 4 bottles
1 2 3    // OUTPUT: prisoner 1 will drink 1, 2, 3
1 4      // OUTPUT: prisoner 2 will drink 1, 4
> 1      // INPUT: only the first prisoner died
         // OUTPUT: prisoner 1 is dead, he can't drink any more bottles
3        // OUTPUT: prisoner 2 drinks bottle 3
> 2      // INPUT: prisoner 2 died
1 3      // OUTPUT: therefore, the poisoned bottles are 1 and 3.

The above algorithm may not actually work in all
cases; it's just an example of input and output.

আপনার প্রোগ্রামের পরীক্ষার সময়সূচীটি কার্যকরভাবে প্রতিটি সাবস্ক্রাইড বোতলজাত বোতলটিকে বৈধ জমা দেওয়ার জন্য নির্ধারণ করতে হবে।

আপনার প্রোগ্রামটি নিম্নোক্ত মানদণ্ডের ভিত্তিতে স্কোর করা হবে:

  • এটি ক্ষেত্রে সর্বাধিক সংখ্যক বোতলগুলি সনাক্ত করতে পারে N = 20

  • মামলার বোতল সংখ্যা N = 21এবং তারপরে ক্রমান্বয়ে উচ্চতর কেস।

  • কোড দৈর্ঘ্য। (সংক্ষিপ্ত কোড জিতেছে))


যদি একদিনে একাধিক বন্দী মারা যায় তবে ইনপুটটি কীভাবে দেখবে? আপনার উদাহরণগুলির মধ্যে কোনওটিই সেই কেসটিকে অন্তর্ভুক্ত করে না এবং স্পেসিফিকেশনটি আমার কাছে অস্পষ্ট।
সুলতানিক

কারা বন্দীদের স্থান-বিচ্ছিন্ন তালিকার সাথে এটি কি একক লাইন?
সুলতানিক

সংক্ষিপ্ত কোড বোতল সংখ্যার চেয়ে বেশি কি গুরুত্বপূর্ণ? আমি আমার সাম্প্রতিক সম্পাদনায় যেমনটি করেছি, কোডটিকে আরও একটি বোতল হ্যান্ডেল করার জন্য এটির দৈর্ঘ্য বৃদ্ধি করা কি কার্যকর?
পিপ্পারি 0

বোতল সংখ্যা অগ্রাধিকার নেয়। যদি আপনি আপনার কোডটি আরও বোতলগুলিকে চেপে আরও দীর্ঘ করতে এবং আরও জটিল করে তুলেন তবে তা উত্পাদনশীল।
জো জেড।

মূল সমস্যাটিতে সমস্যাটি সমাধানের জন্য মাত্র 2 দিন সময় থাকে। এটাও কি চ্যালেঞ্জের নিয়ম? (এটি
তীব্রভাবে সমাধানগুলি সীমিতভাবে

উত্তর:


7

পাইথন 2.7.9 - 21 বোতল

ধরে নিই যে একাধিক বন্দী মারা গেলে ইনপুট কী তা নিয়ে ই সুলতানিকের জল্পনা ঠিক

r=raw_input;s=str;j=s.join;p=int(r());z=range;q=z(p);x=z(p+1)
print s(p+1)+"\n"+j("\n",(j(" ",(s(a) for a in x if a!=b)) for b in q))
v=r().split();d=[s(a) for a in q if s(a) not in v];d+=[p]if len(d)==1 else [];
print "\n"*p,;r();print j(" ",[s(a) for a in d])

অ্যালগরিদম: প্রতিটি বন্দি তাদের বোতল থেকে তাদের সংখ্যা ছাড়া পান করে (1 ম বন্দি প্রথম বোতল পান না)। যদি তারা মারা না যায় তবে তাদের নম্বর বোতলটিতে বিষ রয়েছে। যদি কেবল একজন বন্দী বেঁচে থাকে তবে অতিরিক্ত বোতলটি বিষাক্ত হয়।


3

পার্ল 5 , 66 বোতল

(২১ জন বন্দীর জন্য bott২ বোতল)

বন্দীদের অনুকূলভাবে দুটি দলে ভাগ করা হয়েছে। বোতল সেটে গ্রুপ করা হয়।

গ্রুপ 1 এর প্রতিটি বন্দী একটি সেট ছাড়া সব সেট থেকে পান করবে। সেখানে 1 বা 2 জন বেঁচে থাকবে। 1 বা 2 টি সেট যা তাদের দ্বারা পান করা হয় নি সেগুলি ২ য় দিন অব্যাহত থাকবে।

২ য় দিনে বাকি বন্দিরা (বেঁচে থাকা সহ) একজন ব্যতীত বাকি সমস্ত বোতল থেকে পান করেন।
যখন 2 জন বন্দী বেঁচে থাকে তখন তারা যে বোতলগুলি পান করে না সেগুলি বিষযুক্ত হয়।
যদি কেবল ১ জন বন্দী রয়ে যায় তবে তারা যে বোতলটি পান করেছিল তাও সন্দেহজনক।

কোডটি পরীক্ষার সুবিধার্থে অতিরিক্ত কার্যকারিতা অন্তর্ভুক্ত করে। যখন পোয়েজড বোতলগুলি অতিরিক্ত পরামিতি হিসাবে যুক্ত করা হয়, তখন কে মারা গেছে সে সম্পর্কে ইনপুট জিজ্ঞাসা করবে না।

($p,$f,$l)=@ARGV;
$p=9if!$p;
$m=$p-(2*int($p/4))+1;
$n=$p-$m+2;
$b=$m*(($n+1)/2);
@M=(1..$m);
print"Prisoners: $p\nBottles: $b\n";
# building the sets of items
for$x(@M){
    $j=$k+1;$k+=($n+1)/2;
    $s=join",",($j..$k);
    $A[$x]=$s
}
# assigning the sets to the actors
for$x(@M){
    @T=();
    for$j(@M){if($x!=$j){push@T,split/,/,$A[$j]}}
    print"Prisoner $x drinks @T\n";
    $B[$x]=join",",@T
}
if(!$f||!$l){
    # manual input
    print"Who dies: ";
    $_=<STDIN>;chomp;
    @D=split/ /;
    %h=map{($_,1)}@D;
    @S=grep{!$h{$_}}(@M)
} 
else{
    # calculate who dies based on the parameters
    for$x(@M){
        $d=0;
        map{if($_==$f||$_==$l){$d++}}split/,/,$B[$x];
        if($d>1){push@D,$x}else{push@S,$x}
    }
}
for(@D){print"Prisoner $_ dies\n"}

# calculate the remaining items
for(@S){push@R,split/,/,$A[$_]}@R=sort{$a<=>$b}grep{!$g{$_}++}@R;

# different set of actors if there were 1 or 2 sets remaining
if(@S>1){@S=($S[0],$m+1..$p,$S[1],0)}else{@S=($m+1..$p)};

$i=0;@B=@D=();
# assign an item to each actor
for$x(@S){
    @T=();
    for($j=0;$j<@R;$j++){
        if($i!=$j){push@T,$R[$j]}
    }$i++;
    print"Prisoner $x drinks @T\n"if$x>0;
    $B[$x]=join",",@T
}

if(!$f||!$l){
    # manual input
    print"Who dies: ";
    $_=<STDIN>;chomp;
    @D=sort split/ /;
    if(@D<@S-1){push@D,0} # because the set that noone drinks isn't manually put in
    %h=map{($_,1)}@D;
    @L=grep{!$h{$_}}(@S);
}
else{
    # calculate who dies based on the parameters
    @D=();
    for$x(@S){
        $d=0;
        map{if($_==$f||$_==$l){$d++}}split/,/,$B[$x];
        if($d>1){push@D,$x}else{push@L,$x}
    }
}

for(@D){print"Prisoner $_ dies\n"if$_>0}

# calculate the remaining items
for(@L){push@F,split/,/,$B[$_]}
map{$c{$_}++}@F;
for(keys%c){push(@Z,$_)if$c{$_}==1}
@R=sort{$a<=>$b}@Z;

print"Suspected bottles: @R"

পরীক্ষা

$ perl poisened_bottles.pl 20
Prisoners: 20
Bottles: 66
Prisoner 1 drinks 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
Prisoner 2 drinks 1 2 3 4 5 6 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
Prisoner 3 drinks 1 2 3 4 5 6 7 8 9 10 11 12 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
Prisoner 4 drinks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
Prisoner 5 drinks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
Prisoner 6 drinks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
Prisoner 7 drinks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
Prisoner 8 drinks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
Prisoner 9 drinks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 55 56 57 58 59 60 61 62 63 64 65 66
Prisoner 10 drinks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 61 62 63 64 65 66
Prisoner 11 drinks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Who dies: 2 3 4 5 6 7 8 9 10
Prisoner 2 dies
Prisoner 3 dies
Prisoner 4 dies
Prisoner 5 dies
Prisoner 6 dies
Prisoner 7 dies
Prisoner 8 dies
Prisoner 9 dies
Prisoner 10 dies
Prisoner 1 drinks 2 3 4 5 6 61 62 63 64 65 66
Prisoner 12 drinks 1 3 4 5 6 61 62 63 64 65 66
Prisoner 13 drinks 1 2 4 5 6 61 62 63 64 65 66
Prisoner 14 drinks 1 2 3 5 6 61 62 63 64 65 66
Prisoner 15 drinks 1 2 3 4 6 61 62 63 64 65 66
Prisoner 16 drinks 1 2 3 4 5 61 62 63 64 65 66
Prisoner 17 drinks 1 2 3 4 5 6 62 63 64 65 66
Prisoner 18 drinks 1 2 3 4 5 6 61 63 64 65 66
Prisoner 19 drinks 1 2 3 4 5 6 61 62 64 65 66
Prisoner 20 drinks 1 2 3 4 5 6 61 62 63 65 66
Prisoner 11 drinks 1 2 3 4 5 6 61 62 63 64 66
Who dies: 1 12 14 15 16 17 18 20 11
Prisoner 1 dies
Prisoner 11 dies
Prisoner 12 dies
Prisoner 14 dies
Prisoner 15 dies
Prisoner 16 dies
Prisoner 17 dies
Prisoner 18 dies
Prisoner 20 dies
Suspected bottles: 3 63

ম্যানুয়াল ইনপুট ছাড়াই পরীক্ষা করুন

$ perl poisened_bottles.pl 7 2 5
Prisoners: 7
Bottles: 12
Prisoner 1 drinks 3 4 5 6 7 8 9 10 11 12
Prisoner 2 drinks 1 2 5 6 7 8 9 10 11 12
Prisoner 3 drinks 1 2 3 4 7 8 9 10 11 12
Prisoner 4 drinks 1 2 3 4 5 6 9 10 11 12
Prisoner 5 drinks 1 2 3 4 5 6 7 8 11 12
Prisoner 6 drinks 1 2 3 4 5 6 7 8 9 10
Prisoner 2 dies
Prisoner 4 dies
Prisoner 5 dies
Prisoner 6 dies
Prisoner 1 drinks 2 5 6
Prisoner 7 drinks 1 5 6
Prisoner 3 drinks 1 2 6
Prisoner 1 dies
Suspected bottles: 2 5

2

Traditionতিহ্য অনুসারে, আমি একটি সর্বশেষ স্থানের রেফারেন্স উত্তর পোস্ট করব।

পাইথন - 7 বোতল

prisoners = int(raw_input())

bottles = 0
while (bottles * (bottles + 1) / 2 - 1) <= prisoners:
    bottles += 1

print bottles

pairs = []
for i in range(bottles):
    for j in range(i + 1, bottles):
        pairs += [str(i + 1) + " " + str(j + 1)]

for i in range(prisoners):
    if i < len(pairs):
        print pairs[i]
    else:
        print

dead_prisoner = raw_input()

for i in range(prisoners):
    print
raw_input() # discard the second day entirely

if dead_prisoner == "":
    print pairs[-1]
else:
    print pairs[int(dead_prisoner) - 1]

প্রতিটি বন্দিকে শেষের দু'জনের জোড়া ব্যতীত একটি সম্ভাব্য বোতল পানীয় পান করুন। যদি কোনও বন্দী মারা যায়, সেই বন্দী যে জোড় পান করেছিল, সে জুটি ছিল বিষযুক্ত। অন্যথায়, এটি ছিল সর্বশেষ দুটি বোতল যা বিষযুক্ত হয়েছিল।

কমপক্ষে n(n-1)/2 - 1বন্দীদের বরাদ্দ দেওয়ার জন্য , আপনি nবোতল পর্যন্ত করতে পারেন । জন্য n = 7, এই নিম্ন সীমা হয় 20

এই সমাধানটি কাজ করার জন্য আমাদের কেবল একটি দিন প্রয়োজন । একই স্কোপ সহ একটি দু'দিনের সমাধান 20 টি বোতল পর্যন্ত পেতে পারে N = 20তবে এটি একটি তুচ্ছ উত্তরের জন্য খুব বেশি কাজ।

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