চল লোকোচুরি খেলি!


12

ব্যবহারকারী আড়াল করবে এবং কম্পিউটার সেগুলি সন্ধান করার চেষ্টা করবে।

প্রথমত, গ্রিডের আকারের জন্য প্রোগ্রামটি একটি ইনপুট নেবে। 5x5, 10x10, 15x15 ইত্যাদির মতো গ্রিড সর্বদা নিখুঁত বর্গক্ষেত্র হবে না।

গ্রিডটি দাবাবোর্ডের মতো সাজানো:

_______________________________
|     |     |     |     |     |
| A1  |     |     |     |     | A
|_____|_____|_____|_____|_____|
|     |     |     |     |     |
|     | B2  |     |     |     | B
|_____|_____|_____|_____|_____|
|     |     |     |     |     |
|     |     | C3  |     |     | C
|_____|_____|_____|_____|_____|
|     |     |     |     |     |
|     |     |     | D4  |     | D
|_____|_____|_____|_____|_____|
|     |     |     |     |     |
|     |     |     |     | E5  | E
|_____|_____|_____|_____|_____|
   1     2     3     4     5

এখন, ব্যবহারকারী একটি স্কোয়ার বাছাই করবে, যেমন B2(কম্পিউটারকে না বলে)

স্কোয়ার অনুমান করা কম্পিউটারটি শুরু করবে। এটি সঠিক স্কোয়ারটি বাছাই করলে ব্যবহারকারী তার প্রতিক্রিয়া জানাবে y। যদি তা না হয় তবে তারা যে টাইলটি বেছে নিয়েছে (এন, এনই, ই, এসই, এস, এসডাব্লু, ডাব্লু) তার দিকটি ইনপুট দেবে।

সুতরাং যদি ব্যবহারকারী বাছাই করে B2এবং কম্পিউটার অনুমান করে C3তবে ব্যবহারকারী ইনপুট করবে NW

আউটপুট এবং ইনপুটগুলির উদাহরণ এখানে রয়েছে:

Grid?
5x5

C3?
NW

C2?
N

B2?
y

স্কোরিং:

এটি একটি সাধারণ চ্যালেঞ্জের চেয়ে কিছুটা আলাদাভাবে রান করা হবে।

বিজয়ী হ'ল এমন প্রোগ্রাম যা সঠিক বর্গ অনুমান করতে সর্বনিম্ন অনুমান (গড়) নেয় average গড় পরীক্ষার কেসগুলি 5x5 এবং তার পরে 10x10 এ সমস্ত সম্ভাব্য স্কোয়ার হবে।

যাইহোক, এটি গ্রিডের প্রতিটি প্যাটার্ন 26 টি সারি পর্যন্ত (যেমন 5x8, 6x2, 20x5 ইত্যাদি) সাথে কাজ করতে হবে।

এটি পরীক্ষার জন্য কোনও উপায় যেমন জেএসফিডাল অন্তর্ভুক্ত করুন।

এবং সবশেষে, টাইয়ের ক্ষেত্রে, সংক্ষিপ্ততম প্রোগ্রামটি জয়ী হয়।


1
আমি যদি লুকিয়ে থাকি A1এবং কম্পিউটার অনুমান করে B9, সঠিক প্রতিক্রিয়াটি NWনাকি W?
গ্রেগ মার্টিন

@ গ্রেগমার্টিন এটি এনডব্লু হবে .... এন, ডাব্লু, এস, ই সবই সোজা থাকতে হবে যখন কোনও পৃথক সারিতে / কলামের যে কোনও কিছু অবশ্যই এনডব্লু, এনই,
এসডাব্লু

ইনপুট এবং আউটপুট নির্দিষ্ট বিন্যাসে নমনীয়তা আছে? যদি 26 টিরও বেশি সারি থাকে তবে তাদের কী বলা হয়?
গ্রেগ মার্টিন

@ গ্রেগমার্টিন আপনি আউটপুট নিয়ে নমনীয় হতে পারেন তবে এটিকে সহজ রাখার চেষ্টা করুন। এটি ঠিক একই রকম হতে হবে না তবে একই ধরণের স্টাইল থাকা উচিত have আপনার 26 বছরের উপরে কোনও কিছুর জন্য অ্যাকাউন্ট করার দরকার নেই, আমি এটি সম্পাদনা করব।
জেকনোভিটস

"অনুরূপ শৈলী" এর অর্থ কী তা আমি জানি না। আমরা কি অর্ডারযুক্ত জোড় সংখ্যার হিসাবে ইনপুট নিতে পারি (সারি #, কর #)? (পিএস: এই ধরণের প্রশ্নগুলি স্যান্ডবক্সে প্রাক-পোস্ট চ্যালেঞ্জগুলি কেন দুর্দান্ত ধারণা তা কারণ))
গ্রেগ মার্টিন

উত্তর:


3

পাইথন ৩.6 , 466 398 392 বাইট, মিনিম্যাক্স

x, y = 1, 1
w, h = [int(x) for x in input('Grid?\n').split('x')]


def split_factor(a, b):
    N = b-y
    W = a-x
    S = h+~N
    E = w+~W
    return max(1, N, W, S, E, N*W, S*W, S*E, N*E)


def move(a, b):
    *Z, = zip([a, x, a, a+1, x, x, a+1, a+1],
              [y, b, b+1, b, y, b+1, b+1, y],
              [1, a-x, 1, w+x+~a, a-x, a-x, w+x+~a, w+x+~a],
              [b-y, 1, h+y+~b, 1, b-y, h+y+~b, h+y+~b, b-y])
    return Z[['N', 'W', 'S', 'E', 'NW', 'SW', 'SE', 'NE'].index(d)]

d = ''
while d != 'y':
    print()
    splits = {(a, b): split_factor(a, b) for a in range(x, x+w) for b in range(y, y+h)}
    a, b = min(splits, key=splits.get)
    d = input(f'{a}{"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[b]}?\n')
    x, y, w, h = move(a, b)

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

অপঠনযোগ্য সংস্করণ:

x=y=d=1
w,h=map(int,input('Grid?\n').split('x'))
while d!='y':print();s={(a,b):max(b-y,h+y+~b)*max(w+x+~a,a-x)for a in range(x,x+w)for b in range(y,y+h)};a,b=min(s,key=s.get);d=input(f'{a}{chr(64+b)}?\n');*z,=zip([a+1,x,a+1,x,a,a,a+1,x],[b+1,b+1,y,y,b+1,y,b,b],[w+x+~a,a-x,w+x+~a,a-x,1,1,w+x+~a,a-x],[h+y+~b,h+y+~b,b-y,b-y,h+y+~b,b-y,1,1]);x,y,w,h=z[~'WENS'.find(d)or-'NWNESWSE'.find(d)//2-5]

2

গণিত, পরীক্ষার ক্ষেত্রে সর্বোত্তম আচরণ, 260 বাইট

For[a=f=1;{c,h}=Input@Grid;z=Characters;t=<|Thread[z@#->#2]|>&;r="";v=Floor[+##/2]&;b:=a~v~c;g:=f~v~h,r!="y",r=Input[g Alphabet[][[b]]];{{a,c},{f,h}}={t["NSu",{{a,b-1},{b+1,c},{b,b}}]@#,t["uWX",{{g,g},{f,g-1},{g+1,h}}]@#2}&@@Sort[z@r/.{c_}:>{c,"u"}/."E"->"X"]]

এই প্রোগ্রামটি ওল্ফ্রাম ক্লাউডের উপরের কোডটি কেটে পেস্ট করে পরীক্ষা করা যেতে পারে । (দ্রুত পরীক্ষা করুন, যদিও: আমি মনে করি প্রতিটি প্রোগ্রাম চালানোর জন্য একটি সময়সীমা রয়েছে)) প্রোগ্রামটির অনুমানগুলি 2 cপরিবর্তে দেখতে দেখতে ভাল লাগে C2তবে অন্যথায় এটি উপরের বৈশিষ্ট্য অনুসারে চলে। গ্রিড ইনপুট হিসাবে একটি পূর্ণসংখ্যার মত জোড়া আদেশ হতে হবে {26,100}প্রোগ্রামের অনুমান, এবং প্রতিক্রিয়া স্ট্রিং মতো এবং ইনপুট হতে হবে "NE"বা "y"

প্রোগ্রামটি এখন পর্যন্ত ইনপুটগুলির সাথে সামঞ্জস্যপূর্ণ সবচেয়ে ক্ষুদ্রতম এবং বৃহত্তম সারির নম্বর এবং কলাম নম্বরটিকে নজর রাখে এবং সর্বদা সম্ভাবনার সাবগ্রিডের কেন্দ্র বিন্দু (রাউন্ডিং এনডাব্লু) অনুমান করে। প্রোগ্রামটি নির্বিচারবাদী, সুতরাং এটি নির্ধারিত গ্রিডের উপরে গড়ে প্রয়োজনীয় অনুমানগুলির সংখ্যা গণনা করা সহজ। একটি 10x10 গ্রিডে, প্রোগ্রামটির একক বর্গক্ষেত্রের জন্য 1 অনুমান, আট স্কোয়ারের জন্য 2 অনুমান, 64 স্কোয়ারের জন্য 3 অনুমান, এবং বাকি 27 স্কোয়ারের জন্য গড়ে 3.17 এর জন্য 4 অনুমানের প্রয়োজন হয়; এবং এটি তাত্ত্বিক ন্যূনতম, কতটি 1-অনুমান, 2-অনুমান, ইত্যাদি ক্রমগুলি সঠিক অনুমানের দিকে পরিচালিত করতে পারে তা প্রদত্ত given প্রকৃতপক্ষে, প্রোগ্রামটি একই কারণে কোনও আকারের গ্রিডে তাত্ত্বিক সর্বনিম্ন অর্জন করা উচিত। (5x5 গ্রিডে, অনুমানের গড় সংখ্যা 2.6)

একটি সামান্য কোড ব্যাখ্যা, যদিও এটি গল্ফনেস ছাড়া মোটামুটি সোজা। (আমি এক্সপোজিটারি উদ্দেশ্যে কিছু প্রাথমিক সূত্রের ক্রম বিনিময় করেছি - বাইট গণনায় কোনও প্রভাব ফেলবে না))

1  For[a = f = 1; z = Characters; t = <|Thread[z@# -> #2]|> &;
2      v = Floor[+##/2] &; b := a~v~c; g := f~v~h;
3      r = ""; {c, h} = Input@Grid, 
4    r != "y", 
5    r = Input[g Alphabet[][[b]]];
6      {{a, c}, {f, h}} = {t["NSu", {{a, b - 1}, {b + 1, c}, {b, b}}]@#, 
7        t["uWX", {{g, g}, {f, g - 1}, {g + 1, h}}]@#2} & @@ 
8        Sort[z@r /. {c_} :> {c, "u"} /. "E" -> "X"]
   ]

লাইন ১-২ Forলুপটি আরম্ভ করে , যা আসলে Whileছদ্মবেশে কেবল একটি লুপ, তাই আরে, দুটি কম বাইট। সম্ভাব্য সারি-সংখ্যা এবং কলাম-সংখ্যা রেঞ্জগুলি যে কোনও মুহুর্তে সঞ্চিত থাকে {{a, c}, {f, h}}এবং সেই সাবগ্রিডে কেন্দ্রিক অনুমানটি {b, g}লাইন ২-এ সংজ্ঞায়িত ফাংশন দ্বারা গণনা করা হয় এবং লাইন 3 ব্যবহারকারী ইনপুট থেকে সর্বাধিক-সারি cএবং সর্বাধিক-কলামকে আরম্ভ করে hএবং এছাড়াও সূচনা rযা লুপ পরীক্ষিত পরিবর্তনশীল এবং পরবর্তী ব্যবহারকারী ইনপুট হয়।

৪ নং লাইনে পরীক্ষাটি সন্তুষ্ট থাকা অবস্থায় লাইন 5 ব্যবহারকারী থেকে ইনপুট পায়, যেখানে প্রম্পটটি বর্তমান অনুমান থেকে আসে {b, g}( Alphabet[][[b]]]সারি সংখ্যাটি একটি বর্ণকে রূপান্তর করে)। তারপরে 6-8 রেখাগুলি সাবগ্রিড-সম্ভাবনাগুলি আপডেট করে (এবং তাই স্পষ্টভাবে পরবর্তী অনুমান)। উদাহরণস্বরূপ, t["NSu", {{a, b - 1}, {b + 1, c}, {b, b}}]( tঅন ​​লাইনের 1 সংজ্ঞা দেওয়া ) প্রসারিত হয়

<| "N" -> {a, b - 1}, "S" -> {b + 1, c}, "u" -> {b, b}|>

যেখানে আপনি দেখতে পাচ্ছেন ন্যূনতম সারি এবং সর্বাধিক সারি সংখ্যা ব্যবহারকারীর শেষ ইনপুট অনুযায়ী আপডেট হচ্ছে। 8 লাইন কোনও সম্ভাব্য ইনপুটটিকে রূপের অক্ষরের জোড় জোরে রূপান্তরিত করে { "N" | "S" | "u", "u" | "W" | "X"}; এখানে "u"একটি সঠিক সারি বা কলাম "X"জন্য দাঁড়ানো, এবং পূর্ব দিকে দাঁড়িয়েছে (কেবল Sortসুন্দরভাবে কাজ করার অনুমতি দেওয়ার জন্য)। ব্যবহারকারী যখন শেষ পর্যন্ত ইনপুট দেয় "y", তখন এই রেখাগুলি একটি ত্রুটি ফেলে দেয়, তবে লুপ-পরীক্ষা ব্যর্থ হয় এবং ত্রুটিটি কখনই প্রস্তাবিত হয় না (প্রোগ্রামটি যেভাবেই থামানো যায়)।


0

ব্যাচ, বিভাজন এবং বিজয়ী

@echo off
set z = ABCDEFGHIJKLMNOPQRSTUVWXYZ
set /p g = Grid?
set /a w = 0, n = 0, e = %g :x= + 1, s = % + 1
:l
set /a x = (w + e) / 2, y = (n + s) / 2
call set c = %%z :~%y%,1%%
set /p g = %c %%x%?
if %g :w=.% == %g % set /a w = x
if %g :n=.% == %g % set /a n = y
if %g :e=.% == %g % set /a e = x
if %g :s=.% == %g % set /a s = y
if %g :y=.% == %g % goto l

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

369 বাইটে আমি কারও কাছে পরাজিত হওয়ার প্রত্যাশা করছি না তাই আমি পঠনযোগ্যতার জন্য ফাঁকা জায়গা রেখেছি।


ঠিক আছে, বিভাজন এবং বিজয়ী বড় টেস্টকেসের জন্য সাধারণত দরকারী তবে ছোট ক্ষেত্রে নয়, আরও ভাল অ্যালগরিদমের জন্য?
ম্যাথু রোহ

@ সিআইজিএসইজিভি নিশ্চিত নয় যে আপনি কী বলছেন; গ্রেগ এবং বেনের উত্তরগুলি বাক্স পদ্ধতির কেন্দ্রও ব্যবহার করে।
নীল

আমাদের এখনও আরও ভাল অ্যালগরিদম প্রয়োজন।
ম্যাথু রোহ

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