4x4 হেক্সের একটি পারফেক্ট গেম খেলুন


10

পটভূমি

হেক্সK×K হেক্সাগোনাল টাইলসের একটি গম্বুজ খেলানো একটি দুই খেলোয়াড় বিমূর্ত কৌশল খেলা । রম্বসের দুটি বিপরীত দিক সাদা বর্ণের, অন্য দুটি কালো এবং কালো এবং সাদা দুটি খেলোয়াড় অনিয়ন্ত্রিত টালিগুলিতে তাদের রঙের একটি টোকেন রাখে turns যে খেলোয়াড় প্রথমে তাদের রঙের বিপরীত দিকগুলির মধ্যে একটি পথ তৈরির পরিচালনা করে সে বিজয়ী। এটি পরিচিত যে গেমটি ড্রয়ের মধ্যে শেষ হতে পারে না, এবং বোর্ডের আকার নির্বিশেষে প্রথম খেলোয়াড়ের একটি বিজয়ী কৌশল রয়েছে (বিশদগুলির জন্য উইকিপিডিয়া পৃষ্ঠা দেখুন)।

কাজটি

এই চ্যালেঞ্জের মধ্যে আমরা বোর্ডের আকারটি ঠিক করি K = 4এবং নিম্নলিখিত গ্রিড হিসাবে বোর্ডকে উপস্থাপন করি। ঘন রেখাগুলি সংলগ্ন টাইলগুলি বোঝায়।

একটি 4x4 গ্রিড।

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

হোয়াইটকে প্রথমে ধরে নিয়েই সম্ভাব্য একটি বিজয়ী কৌশলটির রূপরেখা। প্রথমে ৫ টি নির্বাচন করুন After এর পরে, যদি আপনার 5 থেকে নীচের সারি পর্যন্ত কোনও পথ থাকে বা কালো যে কোনও বিন্দুতে 0 বা 1 নির্বাচন করে, 0 বা 1 এর যে কোনওটি শূন্য রয়েছে তা নির্বাচন করে সাড়া দিন। যদি কালো 9 বা 13 নির্বাচন করে, 10 নির্বাচন করুন এবং তারপরে 14 বা 15 এর মধ্যে যা শূন্য রয়েছে। যদি কালো 9, 13 বা 14 নির্বাচন করে না, তবে 13 বা 14 এর যে কোনওটি শূন্য রয়েছে 9 এবং পরবর্তী নির্বাচন করুন select যদি কালো 14 নির্বাচন করে, 15 টি নির্বাচন করে প্রতিক্রিয়া জানান Next পরবর্তী, খালি থাকলে 10 নির্বাচন করুন; যদি কালো 10 নির্বাচন করে, 11 দিয়ে প্রতিক্রিয়া দিন black যদি কালো 6 টি নির্বাচন করে না, এটি নির্বাচন করুন, সুতরাং আপনার 5 থেকে নীচের সারি পর্যন্ত একটি পথ রয়েছে।

ইনপুট এবং আউটপুট

আপনার ইনপুটটি ১ characters টি অক্ষরের একটি স্ট্রিং WBE, যা সাদা, কালো এবং খালি। তারা উপরে উল্লিখিত হিসাবে বোর্ডের টাইলগুলি উপস্থাপন করে। আপনি নিম্নলিখিত থেকে ইনপুট পদ্ধতিটি (যা আপনার আউটপুট পদ্ধতিটিও নির্ধারণ করে) চয়ন করতে পারেন:

  1. STDIN থেকে ইনপুট, STDOUT এ আউটপুট।
  2. এক কমান্ড লাইন আর্গুমেন্ট হিসাবে ইনপুট, STDOUT এ আউটপুট।
  3. 16 একক-অক্ষর কমান্ড লাইন আর্গুমেন্ট হিসাবে ইনপুট, STDOUT এ আউটপুট।
  4. নামযুক্ত ফাংশনের আর্গুমেন্ট হিসাবে ইনপুট, রিটার্ন মান হিসাবে আউটপুট।

আপনার আউটপুটটি এমন টাইলকে উপস্থাপন করে যেখানে আপনি নিজের পরবর্তী টোকেন রাখেন, কেননা আপনার স্থানান্তরের পালা। আপনি নিম্নলিখিত আউটপুট ফর্ম্যাট থেকে চয়ন করতে পারেন:

  1. একটি শূন্য-ভিত্তিক সূচক (উপরের ছবিতে ব্যবহৃত হিসাবে)।
  2. একটি ভিত্তিক সূচক।
  3. আপনি Eযে কোনও Wবা Bআপনার প্লেয়ারের জন্য চয়ন করেছেন তার দ্বারা প্রতিস্থাপিত ইনপুট স্ট্রিং ।

বিধি

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

এটি কোড-গল্ফ, তাই সর্বনিম্ন বাইট গণনা জিতে। স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।

পরীক্ষামূলক

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


আমি যখন ক্যালকুলেটর প্রোগ্রাম লিখছিলাম তখন এই চ্যালেঞ্জটি আমাকে টিক টাক টু এআই সংক্ষেপে চেষ্টা করার কথা মনে করিয়ে দেয়। ticalc.org/archives/files/fileinfo/354/35408.html
স্পার

2
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.আমার অনেক আগেই জিতে যাওয়া উচিত ছিল, না আমি ভুল করছি?
সেবাস্তিয়ান হাফনার

@ সেবাস্তিয়ানহফনার যেটি নিয়ামকটিতে বাগের মতো দেখাচ্ছে। আমি সময় পেলে এটি ঠিক করার চেষ্টা করব।
জাগারব

@ সেবাস্তিয়ানহফনার এই বাগটি এখনই ঠিক করা উচিত।
জাগারব

উত্তর:


6

মার্বেলস, 973 বি

এটি প্রশ্নের ইঙ্গিতযুক্ত কৌশলটির একটি নির্বুদ্ধ বাস্তবায়ন। এটি বোর্ডকে ১ command টি কমান্ডলাইন / মেইনবোর্ড প্যারামিটার হিসাবে সরবরাহ করার প্রত্যাশা করে hex.mbl B W E E E W E E E B E E E E E Eএবং এটি হোয়াইটের পরবর্তী পদক্ষেপের শূন্য-সূচকযুক্ত অবস্থানকে আউটপুট দেবে।

00 }1 }0
&G B? W!
&0 &G &G
!!
00 }0 }1
&H B? W!
&1 &H &H
!!
.. }D .. }9 }9 }D }E }A }D }9 }A .. }E }F }5
}9 B! }E E? W? E? .. E? B? B? W? .. E? .. E?
B! ?0 B! &M &N &O E? &I \\ .. &J .. &K E? &5
?0 ++ ?0 &9 .. &D &P &A &I /\ &J .. &E &L !!
++ .. ++ !! .. !! &E !! \/ &L /\ &K !! &F
\\ .. // .. .. .. !! .. .. \/ .. \/ .. !!
.. =3 \/
&M /\ &N
\/ &O /\ &P
}0 }1 }6 .. }6 .. }7 &7 }2 }3 }A }A }B }E }F
..
..
..
..
..
..
..
..
..
.. .. .. .. .. .. .. .. .. .. .. .. .. B? W!
.. .. .. .. .. .. .. .. .. .. .. .. .. &Q &Q
.. .. .. .. B? .. E? W? E? .. E? B? E? &F \/
.. .. .. &S /\ &T &S &T &U E? &A &R &R !!
.. .. .. &7 .. .. \/ .. &2 &V !! &B \/
.. .. .. !! .. .. &U /\ &V &3 .. !!
.. .. .. .. .. .. .. .. .. !!
.. .. ..
.. .. E?
E? .. &6
&X E? !!
!! &Y
.. !!
}4 }8 }C
\/ \/ \/
30 30 31 31 32 33 35 36 37 39 31 30 31 31 31 33 31 34 31 35
&0 &X &1 &Y &2 &3 &5 &6 &7 &9 &A &A &B &B &D &D &E &E &F &F
:W?
}0
^4
=1
{0
:B?
}0
^0
=0
{0
:E?
}0
^1
=0
{0
:W!
}0
^4
=0
{0
:B!
}0
^0
>0
{0

আমি মনে করি উন্নত শাখা এবং কোড পুনরায় ব্যবহারের বিলোপ দিয়ে আমি প্রায় 200 টি অক্ষর এটির বাইরে গল্ফ করতে পারি।


আমি 16 কমান্ড লাইন আর্গুমেন্টের জন্য বিকল্প যুক্ত করেছি এবং ভেরিফায়ার স্ক্রিপ্ট আপডেট করেছি, যাতে এই সমাধানটি পরীক্ষা করা যায়।
Zgarb

মার্বেলাস +1 (পিপিসিজি মনে করে যে এই চরিত্রগুলি যুক্ত করে মন্তব্যটি উন্নত হয়েছে)
রোহান ঝুনঝুনওয়ালা

1

পাইথন 3, 100 বি

b=input()
i=b.find('B')
if b[i]in'BW'and'E'in b:i-=1+(b[i-1]is'W')*4
print((b[:i]+'B'+b[i+1:])[:16])
  • প্লেয়ার: ব্ল্যাক
  • পদ্ধতি: STDIN / STDOUT, MODIFIED_BOARD

কৌশলটি হ'ল প্রথমে Bবোর্ডে সন্ধান করা। যদি এই আর কেউ -1না দেয় তবে পাইথন যা একই রকম হয় last index। এইভাবে একটি খালি বোর্ডে আমার প্রথম সূচকটি হবে index=-1, যেখানে আমি স্থানান্তরিত করতে শুরু করি।

যদি আমার বাম দিকে ( index-1) ক্ষেত্রটি নিখরচায় থাকে তবে আমার পরবর্তী পদক্ষেপটি সেখানে চলে যাবে। যদি এটি নেওয়া হয় তবে আমি বাম দিকে যেতে চাই। আমাকে কখনই উপরে উঠতে হবে না: আমি যদি করি তবে আমি টেম্পো হারাব এবং গেমটি হারাব।

পূর্ণ বোর্ডে ( Eকোথাও নেই) আমি চলাফেরা করি না।

printপ্রথমে একটু অদ্ভুত মনে হয়: আমি নতুন বোর্ড (যা আমি slicing মাধ্যমে না) কিন্তু তারপর আমি 16 অক্ষরের কেটে প্রয়োজন গঠন করা হবে। আমি এটি নেতিবাচক সূচকগুলির সাথে কাজ করি এবং b[i+1:]এইভাবে গর্ত বোর্ডটি এবং আমার প্রত্যাশিত বাকী অংশটি ফিরিয়ে আনব, অবশিষ্ট অংশগুলি কেটে ফেলা গুরুত্বপূর্ণ করে তোলে This আর একটি উপায় হ'ল ইতিবাচক সূচকগুলি নিয়ে কাজ করা উচিত, উদাহরণস্বরূপ গ্রহণ করে (b.find('B')+16)%16, তবে (+16)%16এটি একটি বাইটের চেয়ে বেশি ()[:16]

Ungolfed:

board = input()
index = board.find('B')
if board[index] in 'BW' and 'E' in board:
    index -= 1 + (board[index-1] is 'W') * 4
print((board[:index] + 'B' + board[index+1:])[:16])

পরীক্ষা

হেক্স নিয়ন্ত্রক পরীক্ষা স্যুট চালানোর সময়, আমি কিছু অদ্ভুত আচরণের মুখোমুখি হয়েছিলাম:

OUT: EEEEEEEEEEEEEEEB
OUT: WEEEEEEEEEEEEEBB
OUT: WWEEEEEEEEEEEBBB
OUT: WWWEEEEEEEEEBBBB
OUT: WWWWEEEEEEEBBBBB
OUT: WWWWWEEEEEBBBBBB
OUT: WWWWWWEEEBBBBBBB
OUT: WWWWWWWEBBBBBBBB
OUT: WWWWWWWWBBBBBBBB

Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.

আমি মনে করি আমার হয় ৪ র্থ বারের পরে জিততে হবে বা পুরো বোর্ডে একই বোর্ডের সাথে উত্তর দেওয়া উচিত একটি সঠিক প্রতিক্রিয়া। সেখানে কী ভুল হয়েছে তা নিশ্চিত নয়, আরও গভীর দিকে ডুব দিয়েছিলেন না - আমি কেবল "বিশেষ" সমস্ত মামলার আওতা পেয়েছি কিনা তা খতিয়ে দেখতে চেয়েছিলাম। তবে যেহেতু আমাকে এমন পরিস্থিতিগুলি toাকতে হবে না যেখানে কেউ 4 বা ততোধিক স্পেসে শুরু করে, তা যাই হোক না কেন।

85b

তবে, আমি যদি নিজেকে একটি পূর্ণ বোর্ডের জন্য যাচাই না করার অনুমতি দিই (অর্থাত্ 'E' in bআমি বাইরে রেখে কোডটি কেবল 85 85 বাইট ব্যবহার করার জন্য আরও সহজ করতে পারি:

b=input();i=b.find('B')
if i!=-1:i-=1+(b[i-1]is'W')*4
print((b[:i]+'B'+b[i+1:])[:16])

এটি নীচের দিকে পরিচালিত করবে যদিও:

Incorrect response 'WWWBWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.

এটি হতে পারে বা গণনা করা যেতে পারে না এবং যেহেতু আমি এটি খুঁজে পেয়েছি এটি একটি বৈধ পদক্ষেপ নয় আমি দীর্ঘতর কিন্তু আরও সঠিক উত্তরের জন্য যাওয়ার সিদ্ধান্ত নিয়েছি।

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