কয়েন ফ্লিপ সিকোয়েন্স পছন্দগুলি বিশ্লেষণ করতে একটি প্রোগ্রাম তৈরি করুন


15

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

এটি উল্লেখ করা হয়েছে যে প্লেয়ার 1 বাছাই করে TTTএবং খেলোয়াড় 2 বাছাই করে HTT, খেলোয়াড় 2 এর গেম জয়ের সম্ভাবনা 7/8 থাকে, যেহেতু প্রথম তিনটি ফ্লিপগুলি সমস্ত পুচ্ছ হয় তবেই কেবল একমাত্র উপায় TTTআসতে পারে HTT

আপনার কাজ হ'ল এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করা যা দু'জন নির্বাচিত অনুক্রমের মধ্যে প্রথম আসার সম্ভাবনাটি কমাবে। আপনার প্রোগ্রামটি দুটি লাইন ইনপুট (বা আর্গুমেন্ট হিসাবে দুটি স্ট্রিং) নেবে, প্রতিটি দৈর্ঘ্যের ক্রম 10 বা তারও কম উপস্থাপন করে:

HTT
TTT

এবং প্রথম খেলোয়াড় ভগ্নাংশ বা দশমিক আকারে জয়ের সম্ভাবনাটি আউটপুট করুন :

7/8
0.875

যে কোনও ভাষায় এটি করার জন্য সংক্ষিপ্ততম কোডটি।


6
ক্রমগুলি কি সর্বদা একে অপরের সমান দৈর্ঘ্য?
উরি গ্রান্ট

1
@ উরিজারফাতী না, অগত্যা নয়।
জো জেড।

যদিও সম্ভবত অনুক্রমগুলি পৃথক হতে হবে (যেহেতু আউটপুট কোনও টাই নির্দিষ্ট করতে পারে না)।
উরি গ্রান্ট

হ্যাঁ, ক্রমগুলি অবশ্যই পৃথক হওয়া উচিত।
জো জেড।

আরও সুনির্দিষ্টভাবে বলা যায় যে, একটিতে অন্যটির টার্মিনাল সাবস্ট্রিং হতে পারে না।
জো জেড

উত্তর:


4

পাইথন 3 (139 136 134 132 126 115 143)

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

def f(a,b):c=lambda x,y=a:sum((x[~i:]==y[:i+1])<<i for i in range(len(x)));return 0 if b in a else(1/(1+(c(a)-c(a,b))/(c(b,b)-c(b))),1)[a in b]

6 বাইট বন্ধ শেভ করার জন্য xnor ধন্যবাদ। উপসর্গগুলি সহ একটি বাগ চিহ্নিত করার জন্য জগারবকে ধন্যবাদ।


বর্তমান সংস্করণটি আমার পক্ষে কাজ করে না। ইনপুট করতে "HTT"এবং "TTT", oমূল্য আছে -1এবং এটি দ্বারা এটি ভাগ 0
জাকুবে

1
দুর্দান্ত গল্ফ! আমি ডিফল্ট আর্গুমেন্ট ট্রিক পছন্দ করি। (অপরীক্ষিত) কয়েকটি পরামর্শ দেওয়া: আপনি সংখ্যাবৃদ্ধি করতে পারে এমন 2**iসঙ্গে <<i, এবং আউটপুট সম্ভাব্যতা হিসেবে লেখা যেতে পারে 1/(1/o + 1), যা তোমাদের পারস্পরিক লাগাতে পারেন oসরাসরি।
xnor

ধন্যবাদ। ভাল স্পট রে ও / (1 + ও)। কিছুটা লজ্জা পেয়ে মিস করেছেন <<!
উরি গ্রান্ট

@ জাকুব দুঃখিত, আপনার মন্তব্য স্পট না! বর্তমান সংস্করণটি "এইচটিটি" এবং "টিটিটি" দিয়ে আমার পক্ষে দুর্দান্ত কাজ করে।
উরি গ্রান্ট

1
এই জন্য একটি অশূন্য উত্তর দেয় HTHএবং T, যদিও প্রথম খেলোয়াড় না জিততে পারে। অন্য উত্তর একই সমস্যা আছে।
Zgarb

3

সিজেম, 44 38 36 বাইট

এখানে হিসাবে একই কনওয়ের অ্যালগরিদম ব্যবহার করে ।

ll]_m*{~1$,,@f>\f{\#!}2b}/\-:X--Xd\/

ইনপুট দুটি লাইনে দুটি স্বতন্ত্র ক্রম। আউটপুট হ'ল দ্বিতীয় থেকে প্রথম জয়ের সম্ভাবনা। ইনপুটগুলি একই দৈর্ঘ্যের হওয়া উচিত নয়

আমি pপ্রথম খেলোয়াড় এ হিসাবে বিজয় ( ) বিজয়ের জন্য সূত্রটি ব্যবহার করছি

এখানে চিত্র বর্ণনা লিখুন

তারপরে সম্ভাব্যতা হিসাবে সংজ্ঞায়িত করা হয়

এখানে চিত্র বর্ণনা লিখুন

যা সরলকরণের পরে হয়ে যায়

এখানে চিত্র বর্ণনা লিখুন

এবং কিছু সরলীকরণের পরে, হয়ে যায়

এখানে চিত্র বর্ণনা লিখুন


উদাহরণ ইনপুট:

HTT
TTT

আউটপুট:

0.875

এটি এখানে অনলাইনে চেষ্টা করুন


জো মন্তব্যে (এটি পোস্ট করার পরে) বলেছেন যে স্ট্রিংগুলি একই দৈর্ঘ্যের নয়। তবুও, +1 কারণ আমি সিজেএম বুঝতে পারি না।
mdc32

@ এমডিসি 32 স্থির হয়েছে, এখন 1 টি বাইট বেশি :(
অপটিমাইজার

আপনি আমাকে ইতিমধ্যে বিশ্বাস করতে দিয়েছেন কোডগল্ফএসই এখন ল্যাটেক্সকে সমর্থন করে ... = (
ফ্লাওয়ার

@ ফ্লোয়ার হাএইচএ । দুঃখিত যে :( সম্পর্কে এই অনলাইন লেটেক্ এডিটর থেকে PNGs হয়।
অপ্টিমাইজার

এই জন্য একটি অশূন্য উত্তর দেয় HTHএবং T, যদিও প্রথম খেলোয়াড় না জিততে পারে। অন্য উত্তর একই সমস্যা আছে।
Zgarb

0

লুয়া 211 190 184

কনওয়ের অ্যালগোরিদমও ব্যবহার করছে। লুয়ায় এখনও নতুন তাই এটি নিশ্চিতভাবে আরও গল্ফ করা যেতে পারে।

z=io.read;e=function(s,t)r='';for d in s:gmatch"."do r=r..(d==t:sub(1,1)and 1 or 0);end;return tonumber(r,2);end;a=z();b=z();print((e(a,a)-e(a,b))/(e(b,b)-e(b,a))/(1/((1/2)^b:len())));

Ungolfed

z=io.read;
e=function(s,t)
r='';
    for d in s:gmatch"."do 
        r=r..(d==t:sub(1,1)and 1 or 0);
    end;
    return tonumber(r,2);
end;
a=z();
b=z();
print((e(a,a)-e(a,b))/(e(b,b)-e(b,a))/(1/((1/2)^b:len())));

প্রথম সংস্করণ

z=io.read;
e=function(s,t) 
    r=0;
    for d in s:gmatch"."do 
        r=r*10;
        if d==t:sub(1,1)then r=r+1 end;
    end
    return tonumber(r,2);
end;
f=function(n,o)
    return ((e(n,n)-e(n,o))/(e(o,o)-e(o,n)))/(1/((1/2)^3));
end;
print(f(z(),z()));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.