টিকট্যাকিতে জয়ের সিদ্ধান্ত নিন


19

আসুন কিছু কোড গল্ফ খেলুন!

টিক-ট্যাক-টো বোর্ডের স্টেট দেওয়া (উদাহরণ :)

|x|x|o|
|x|o|x|
|o|o|x|

গেমটি winএকটি loseবা একটি কিনা তা নির্ধারণ করুন cat। আপনার কোডের কোনও রাজ্য দেওয়া এই বিকল্পগুলির মধ্যে যে কোনও একটি আউটপুট করা উচিত। উপরের গেমটি আউটপুট করা উচিতlose

কেবল স্পষ্ট করে বলার জন্য: একটি জয়কে xসারিবদ্ধ 3 টি হিসাবে চিহ্নিত করা হয় (তির্যক, অনুভূমিক, উল্লম্ব)। একটি পরাজয় oএকটি সারিতে 3 এস, যখন একটি সারিতে কোনওটিতেই catখেলা হয় না।

বিষয়গুলিকে আকর্ষণীয় করে তোলার জন্য, আপনাকে রাষ্ট্রের জন্য আপনার ইনপুট কাঠামো নির্ধারণ করতে হবে- যা আপনাকে অবশ্যই ব্যাখ্যা করতে হবে। উদাহরণস্বরূপ xxoxoxooxএকটি বৈধ রাষ্ট্র যা উপরে দেখা যায় যেখানে প্রতিটি অক্ষর বাম থেকে ডানে, উপরে থেকে নীচে পড়ে থাকে। [['x','x','o'],['x','o','x'],['o','o','x']]বহুমাত্রিক অ্যারেতে কি একইভাবে পড়া হয়। যদিও 0x1a9এটি হেক্সস 110101001উপযুক্ত সংকোচনের জন্য কাজ 1করতে পারে যেখানে xএর জন্য ম্যানিপুলেট করা যায় এবং এর 0জন্য ম্যানিপুলেট করা যায় o

তবে এগুলি কিছু ধারণা, আমি নিশ্চিত যে আপনার নিজের নিজস্ব অনেকগুলি থাকতে পারে I'm

পার্থিব আইন:

  1. আপনার প্রোগ্রামটি অবশ্যই কোনও কার্যকর রাষ্ট্রকে গ্রহণ করতে সক্ষম হতে হবে।
  2. ইনপুট ফর্ম অবশ্যই কোনও রাজ্যের প্রতিনিধিত্ব করতে সক্ষম হতে হবে।
  3. "জয় রাষ্ট্র বোর্ড থেকে নির্ধারণ করা আবশ্যক"
  4. একটি সম্পূর্ণ বোর্ড ধরে
  5. Winসামনে loseক্ষেত্রে 'xxxoooxxx' থেকে উদাহরণস্বরূপ

সর্বনিম্ন চরিত্রের গণনা জিতেছে


1
আমি এই ইনপুট কাঠামোটিকে পছন্দ করি: (win|lose|cat) [xo]{9}যেখানে প্রথম শব্দটি খেলাকে এক্সের জন্য গেমটি জয়, হারানো বা বিড়াল (?) কিনা তা বোঝায়। যে কোনও রাষ্ট্রের প্রতিনিধিত্ব করতে সক্ষম।
রানার 1112

2
আমি কী "বোর্ডের কাছ থেকে জয়ের রাজ্য নির্ধারণ করতে হবে" বা "ইনপুটটিতে বোর্ডের রাজ্য ব্যতীত কোনও তথ্য থাকতে হবে না" জাতীয় কোনও প্রস্তাব দিতে পারি?
আন্ডারগ্রাউন্ডোমোনাইল

3
আমরা কি ধরে নিচ্ছি যে কেবল আইনী গেমগুলি খেলা হয়েছে? যদি তা হয় তবে নির্দিষ্ট কিছু রাজ্যগুলি অসম্ভব, যেমন XXX OOO XXX হতে পারে তবে অন্যথায় কয়েকটি পূর্ণ বোর্ডের রাজ্যগুলি এটি চতুর্থ অসম্ভব পরিণতি হিসাবে অন্তর্ভুক্ত করে, যেখানে এক্স জিতেছে তবে ওও জিতেছে।
দাঙ্গা

10
কেন "বিড়াল" আগ্রহের বাইরে?
ক্রিস

7
@ ডায়ালানমাদিসিটি: এর আগে কখনও তা শোনেনি এবং "উইন হেরে বিড়াল" এর জন্য গুগলাইন কিছুই পেল না। আমি টাই সঙ্গে বা ব্যক্তিগতভাবে আঁকতে গিয়েছিলাম। অথবা এই গেমের ক্ষেত্রে সম্ভবত "অনিবার্যতা"। ;-) প্রতিযোগিতা যতটা যায় ততটা আমি আপত্তি করি না। একটি স্ট্রিং একটি স্ট্রিং হয়। ;-)
ক্রিস

উত্তর:


11

রুবি 2.0, 85 টি অক্ষর

এখানে রুবিতে একটি সাধারণ বিটমাস্ক-ভিত্তিক সমাধান:

d=gets.hex
$><<[292,146,73,448,56,7,273,84].map{|m|d&m<1?:lose:d&m<m ?:cat: :win}.max

বোর্ডটি হেক্স নম্বর হিসাবে প্রতিনিধিত্ব করা হয়, নয়টি স্কোয়ারের সাথে সম্পর্কিত নয় বিট দ্বারা গঠিত। 1 হ'ল আন X, 0 হ'ল একটি O। এটি ঠিক 0x1a9প্রশ্নের উদাহরণের মতোই , যদিও 0xবিকল্পটিও এটি!

বিটমাস্কগুলি করার আরও একটি ভাল উপায় আছে কেবলমাত্র একটি বড় তালিকাতে হার্ডকডিং। আমি আনন্দের সাথে পরামর্শ নেব।

এটি এখানে আইডিয়নে চলমান দেখুন ।


1
আপনার তালিকায় 273দু'বার রয়েছে । এবং আমি সত্যিই maxধারণা পছন্দ!
ভেন্টোরো

1
ওহ @ ভেন্তোরো, সর্বদা অস্পষ্ট অপ্টিমাইজেশনের সাথে (ধন্যবাদ)
পল প্রেসিডেজ

একটি বোর্ডে খালি জায়গা থাকতে পারে। আপনার ইনপুট ফর্ম্যাট এটির জন্য অ্যাকাউন্ট করে না এবং তাই কোনও কার্যকর খেলাগুলির অবস্থা উপস্থাপন করতে পারে না।
স্টিফেন অসটারমিলার

2
@ স্টেফেনঅস্টারমিলার বিধি 4: একটি সম্পূর্ণ বোর্ড অনুমান করুন। আপনি সঠিক যে এই বিধিটি সম্ভবত নিয়ম 1 এবং 2 দ্বারা বিপরীত, তবে আপনি যদি এই প্রশ্নের সমস্ত মন্তব্য পড়েন তবে আমার মনে হয় এটি প্রশ্নের আত্মার মধ্যে রয়েছে (অসম্পূর্ণ বোর্ডগুলি আচ্ছাদিত নয়, সম্পূর্ণ হলেও অবৈধ বোর্ডগুলি are তবে আমি মনে করি যে অষ্টাল হেক্সের চেয়ে আরও বেশি ব্যবহারকারী-বান্ধব ইনপুট ফর্ম্যাট হবে।
স্তর নদী সেন্ট

1
বুঝেছি, আমি ভেবেছিলাম সম্পূর্ণরূপে বোঝার অর্থ কিছু আলাদা।
স্টিফেন অস্টেরমিলার

10

গণিত, ৮৪ টি চর

a=Input[];Which[Max@#>2,win,Min@#<1,lose,1>0,cat]&@{Tr@a,Tr@Reverse@a,Tr/@a,Total@a}

ছক পূরণ করা: {{1, 1, 0}, {1, 0, 1}, {0, 0, 1}}


এখানে কি হচ্ছে?
seequ

3
@TheRare ডান থেকে শুরু করুন। Tr@aক্ষেত্র (তির্যক উপর সমষ্টি) এর ট্রেস হয়, Tr@Reverse@aফ্লিপ মাঠের ট্রেস হয় (কিছু বিরোধী তির্যক বেশি), Tr/@aহয় Trপ্রতিটি সারির, যা আপনি, প্রতিটি সারির উপর সমষ্টি দেয় প্রয়োগ Total@aআপনি প্রতিটি কলামের উপর সমষ্টি দেয়। সুতরাং মূলত, আপনার যাচাই করা দরকার এমন 8 টি লাইন পেয়েছেন। তারপরে Whichজিনিসটি সেই ক্ষেত্রে প্রয়োগ করা হয় (মূলত একটি if/elseif/elseবিবৃতি), যেখানে #8 টি মানের তালিকাটি উপস্থাপন করে। ifসেখানে একটি 3আপনি জিতে, else ifসেখানে একটি আছে 0আপনি হারান, else if 1>0(সত্য) cat
মার্টিন ইন্ডার

6

বাশ: 283 262 258

তুলনামূলকভাবে বন্ধুত্বপূর্ণ ইন্টারফেস বৈশিষ্ট্যযুক্ত।

t(){ sed 's/X/true/g;s/O/false/g'<<<$@;}
y(){ t $(sed 's/X/Q/g;s/O/X/g;s/Q/O/g'<<<$@);}
f(){($1&&$2&&$3)||($1&&$5&&$9)||($1&&$4&&$7)||($2&&$5&&$8)||($3&&$5&&$7)||($3&&$6&&$9)||($4&&$5&&$6)||($7&&$8&&$9)}
f $(t $@)&&echo win||(f $(y $@)&&echo lose)||echo cat

চালানো bash tictactoe.sh O X O X O X X O X

দ্রষ্টব্য: 9 টি পদের তালিকাটি একটি স্ট্যান্ডার্ড ম্যাট্রিক্স উপস্থাপনা। বোর্ডটি কলাম মেজর বা সারি মেজর হিসাবে উপস্থাপিত হয়েছে কিনা তা বিবেচ্য নয়, বাদাম থেকে ক্রস বা ক্রসগুলির গেমগুলি (বা যদি আপনি জোর করেন তবে টিক টেক টো) প্রতিসম হয়, সুতরাং ইনপুট ক্রমটি অপ্রাসঙ্গিক হওয়া উচিত প্রতিটি সঠিক প্রয়োগের ফলস্বরূপ, যতক্ষণ ইনপুট লিনিয়ার হয়।

সম্পাদনা করুন: সংক্ষিপ্ত ফাংশন সিনট্যাক্স পরামর্শের জন্য hjk ধন্যবাদ।


t() { ... }পরিবর্তে বিবেচনা function t? কিছু অক্ষর সংরক্ষণ করতে পারেন। :)
hjk

আমি বিকল্প ফাংশন সিনট্যাক্স সম্পর্কে সম্পূর্ণরূপে ভুলে যাব - ধন্যবাদ!
দাঙ্গা

<<<আরও চারটি অক্ষর সংরক্ষণ করার জন্য চারপাশের জায়গার প্রয়োজন নেই ।
মাইকেল মায়ার 13

4

বেফুঞ্জ 93 - 375

ইনপুট হিসাবে বাইনারি স্ট্রিং নেয়।

99>~\1-:!!|>v  
>0v>v>v   >^$>v
^+ + +    0<:p:
>#+#+#+    ^246
^+ + +    0<265
>#+#+#+    ^pp6
^+ + +    0<2++
 #+#+#+     55p
   0 0      552
  >^>^>0v   +46
v+ + +  <   ppp
>0 + + + v  444
   v!!-3:<< 246
  v_"ni"v   ppp
  0v" w"<   :+:
  \>,,,,@   266
  ->,,,@    555
  !^"cat"_^ 645
  !>:9-! ^  +:+
  >|        p:p
   >"eso"v  6p6
 @,,,,"l"<  246
            p2p
            >^ 
  v       <^  <

স্ট্রিং পড়ে। ব্রুটোফোর্স এটি (ডানদিকে সবচেয়ে উল্লম্ব স্ট্রিপ) এর মধ্যে ম্যাট্রিক্স হিসাবে লিখেছেন

^+ + + 
>#+#+#+
^+ + + 
>#+#+#+
^+ + + 
 #+#+#+

জালিয়াতি (idk) যুক্ত করা হচ্ছে। কলাম, সারি এবং দুটি নির্ণয়ের যোগফল নির্ধারণ করে। এই মানগুলিকে 3 ("জয়") বা 0 ("হারা") সাথে তুলনা করুন, অন্যথায় যদি সমস্ত মান 1 বা 2 এর সমান হয় তবে ("বিড়াল") আঁকুন।


4

গল্ফস্ক্রিপ্ট, ২rs টি চর

70&.{~"win""lose"if}"cat"if

ইনপুট ফর্ম্যাটটি আটটি অষ্টাল সংখ্যা সমন্বিত একটি স্ট্রিং, প্রতিটি (অতিরিক্তভাবে) পরপর তিনটি বোর্ড স্কোয়ারকে এনকোড করে:

  • প্রথম তিনটি অঙ্ক প্রতিটি বোর্ডের একক সারিতে এনকোড করে উপরে থেকে নীচে এবং বামে ডান।
  • বাম থেকে ডানে এবং উপরে নীচে প্রতিটি বোর্ডের একক কলামকে এনকোড করে নিম্নলিখিত তিনটি অঙ্ক s
  • চূড়ান্ত দুটি অঙ্ক প্রতিটি তির্যকটি এনকোড করে (প্রথমে উপরে বাম থেকে নীচে ডানদিকে, তারপর নীচে বাম থেকে উপরের ডানদিকে)।

তিনটি স্কোয়ারের ক্রম (সারি / কলাম / তির্যক )টি অষ্টাল অঙ্ক হিসাবে এনকোড করতে প্রতিটি xঅনুক্রমকে 1 এবং প্রতিটি o0 এর সাথে প্রতিস্থাপন করুন এবং ফলাফলগুলি এবং শূন্যগুলির ক্রম 0 এবং 7 এর মধ্যে বাইনারি সংখ্যা হিসাবে ব্যাখ্যা করুন অন্তর্ভুক্ত.

এই ইনপুট বিন্যাস বেশ অপ্রয়োজনীয় (সমস্ত বোর্ড অবস্থানের অন্তত দুইবার এনকোডেড থাকে, কেন্দ্র অবস্থান এনকোড চারবার সঙ্গে), কিন্তু এটা নেই unambiguously একটি সম্পূর্ণ ভরা মাংসপেশীর আক্ষেপ-Tac অঙ্গুলী বোর্ডের কোন সম্ভাব্য রাষ্ট্র প্রতিনিধিত্ব, এবং না সরাসরি এনকোড ইনপুট মধ্যে বিজয়ী।

ইনপুটটিতে, বিকল্পভাবে, অঙ্কগুলির মধ্যে ফাঁকা স্থান বা অন্যান্য সীমানাঙ্ক থাকতে পারে। আসলে, সব প্রোগ্রাম সত্যিই বজায় রাখে থাকুক বা না থাকুক ইনপুট স্ট্রিং সংখ্যা রয়েছে 7বা 0

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

|x|x|o|
|x|o|x|
|o|o|x|

ইনপুট দ্বারা প্রতিনিধিত্ব করা যেতে পারে:

651 643 50

সুবিধার্থে, উপরের চ্যালেঞ্জটিতে প্রদর্শিত এই ASCII আর্ট বোর্ড লেআউটটিকে এই প্রোগ্রামের জন্য উপযুক্ত একটি ইনপুট স্ট্রিংয়ে রূপান্তর করতে এখানে একটি গল্ফস্ক্রিপ্ট প্রোগ্রাম রয়েছে:

."XOxo"--[{1&!}/]:a[3/.zip"048642"{15&a=}%3/]{{2base""+}%}%" "*

এই কনভার্টার তুলনায় অন্যান্য অক্ষরের উপেক্ষা করে xএবং oতার ইনপুটে, উভয় ক্ষেত্রে। এটি উপরের জয়-নির্ধারণকারী প্রোগ্রামে খাওয়ানোর উপযোগী একক অঙ্কের স্ট্রিং (উপরে বর্ণিত স্পেস ডিলিমিটর সহ সম্পূর্ণ) উত্পাদন করে, সুতরাং এই দুটি প্রোগ্রামের সংমিশ্রণটি সরাসরি ASCII আর্ট বোর্ড থেকে বিজয়ী নির্ধারণ করতে ব্যবহার করা যেতে পারে।

এছাড়াও, এখানে একটি বিপরীত রূপান্তরকারী রয়েছে, কেবল এটি দেখানোর জন্য যে ইনপুটটি প্রকৃতপক্ষে বোর্ডকে প্রতিনিধিত্ব করে না:

.56,48>-- 3<{2base-3>{"ox"=}%n}%"|".@@*+);

পুনশ্চ. এই সমাধানটির একটি অনলাইন ডেমো এখানে।


2
ইনপুট ফর্ম্যাটটি প্রতারণার মতো মনে হয় যতটা কাজ ইনপুট তৈরির ক্ষেত্রে ঘটে।
আরক্কু

@ আরক্কু: হ্যাঁ, হ্যাঁ, তবে প্রশ্নটি পরিষ্কারভাবে বলেছে যে "আপনি রাষ্ট্রের জন্য আপনার ইনপুট কাঠামো নির্ধারণ করতে পারেন - যা আপনাকে অবশ্যই ব্যাখ্যা করতে হবে।" এটি বৈধ ইনপুট বিন্যাসের উদাহরণ হিসাবে কিছুটা প্যাকড হেক্স স্ট্রিংও দেখায়; এটির এবং আমার ইনপুট বিন্যাসের মধ্যে কেবলমাত্র তফাতটি হ'ল আমি কিছু বিটকে পুনরায় অর্ডার এবং নকল করি।
ইলমারি করোনেন

6
এটি হ'ল অনুরূপ যা প্রতারণার মতো মনে হচ্ছে। (যেমন, এটা নেই সরাসরি ইনপুট 7 অথবা 0 উপস্থিতিতে যেমন বিজয়ী এনকোড)
Arkku

তবুও এটি একটি চালাক এনকোডিং, এটি রিডানড্যান্ট, তবে সমাধানটি কোনও অ-রিন্ডান্ট এনকোডিংয়ের চেয়ে অনেক বেশি দক্ষ করে তোলে!
এআরজিজি

3

পাইথন 2 - 214 বাইট

b=eval(raw_input())
s=map(sum,b)
w,l='win','lose'
e="if min(s)<1:print l;a\nif max(s)>2:print w;a"
exec e+'\ns=map(sum,zip(*b))\n'+e
m=b[1][1]
for i in 0,2:
 if m==b[0][i]==b[2][abs(i-2)]:print[l,w][m];a
print'cat'

আমি নিশ্চিত যে এখানে আরও কিছু উন্নতি করতে হবে।

চালানোর জন্য:

python2 tictactoe.py <<< '[[1,1,1],[1,0,1],[0,1,0]]'

যা এই বোর্ডকে উপস্থাপন করে:

X|X|X
-----
X|O|X
-----
0|X|0

NameErrorব্যতীত প্রতিটি ক্ষেত্রে ব্যতিক্রম সহ প্রস্থান করে cat


ওহ, আমি কখনই জানতাম না <<<! কেবল এটির জন্য +1।
গ্রেগ হিউগিল

@ গ্রেগ হিউগিল এটি বেশ সুবিধাজনক সম্পূর্ণরূপে পৃথক প্রক্রিয়া না করেই ./whatever <<< 'blah blah blah'একই । echo -n 'blah blah blah' | ./whateverecho
আন্ডারগ্রাউন্ডোমোনাইল

@ندرগ্রাউন্ডোমোরিয়েল echoইন bashআসলে একটি অন্তর্নির্মিত , তাই কোনও নতুন প্রক্রিয়া তৈরি করে না
বব

@ গ্রেগ হিউগিল এটি এস্ট্রিং

3

হাস্কেল, ১৪6 টি চর

বিষয়গুলিকে আকর্ষণীয় করে তোলার জন্য, আপনাকে রাষ্ট্রের জন্য আপনার ইনপুট কাঠামো নির্ধারণ করতে হবে- যা আপনাকে অবশ্যই ব্যাখ্যা করতে হবে।

ঠিক আছে :). আমার বোর্ডের উপস্থাপনা সেই 126 টির মধ্যে একটি

ĻŃŇʼnŊœŗřŚşšŢťŦŨųŷŹźsƁƂƅƆƈƏƑƒƕƖƘƝƞƠƤƳƷƹƺƿǁǂDždžLjǏǑǒǕǖǘǝǞǠǤǯDZDzǵǶǸǽǾȀȄȍȎȐȔȜȳȷȹȺȿɁɂɅɆɈɏɑɒɕɖɘɝɞɠɤɯɱɲɵɶɸɽɾʀʄʍʎʐʔʜʯʱʲʵʶʸ''ˀˎː˔~˭ˮ˰˴˼̌

146 অক্ষরে সমাধানটি এখানে:

main=interact$(\x->case(head x)of h|elem h "ĻŃœťŦŨųŷŹƁƂƅƈƕƠƤƳƿǂdžǞǤǵǾȀȳȿɁɅɑɒɘɝɠɤɵɽʀʐʽʾː˭ˮ˰˴˼̌"->"lose";h|elem h "ƏƝƞƹǁLjǑǝȍȺɆɈɶɾʎʸ"->"cat";h->"win")

একটি হাস্কেল স্ক্রিপ্ট হিসাবে এটি কীভাবে কাজ করে তা এখানে:

import Data.List (subsequences, (\\))
import Data.Char (chr)

-- A set of indexes [0-8] describing where on the board pieces of a single color have been played
-- For example the board "OxO;Oxx;xxO" is indexes [0,2,3,8]
type Play = [Int]

-- There are 126 filled tic tac toe boards when X plays first.
--      (This is a combination of 4 OHs among 9 places : binomial(9 4) = 126)
-- perms returns a list of all such possible boards (represented by the index of their OHs).
perms = filter (\x -> 4 == length x) $ subsequences [0..8]

-- We now create an encoding for plays that brings them down to a single char.
-- The index list can be seen as an 9 bit binary word [0,2,3,8] -> '100001101'
-- This, in turn is the integer 269. The possible boards give integers between 15 and 480.
-- Let's call those PlayInts
type PlayInt = Int

permToInt [] = 0
permToInt (x:xs) = (2 ^ x) + permToInt xs 

-- Since the characters in the range 15-480 are not all printable. We offset the chars by 300, this gives the range 
-- ĻŃŇʼnŊœŗřŚşšŢťŦŨųŷŹźſƁƂƅƆƈƏƑƒƕƖƘƝƞƠƤƳƷƹƺƿǁǂDždžLjǏǑǒǕǖǘǝǞǠǤǯDZDzǵǶǸǽǾȀȄȍȎȐȔȜȳȷȹȺȿɁɂɅɆɈɏɑɒɕɖɘɝɞɠɤɯɱɲɵɶɸɽɾʀʄʍʎʐʔʜʯʱʲʵʶʸʽʾˀ˄ˍˎː˔˜˭ˮ˰˴˼̌
-- Of all distinct, printable characters
uOffset = 300

-- Transform a PlayInt to its Char representation
pIntToUnicode i = chr $ i + uOffset

-- Helper function to convert a board in a more user friendly representation to its Char
-- This accepts a representation in the form "xooxxxoxo"
convertBoard s = let play = map snd $ filter (\(c, i) -> c == 'o') $ (zip s [0..]) :: Play 
    in pIntToUnicode $ permToInt play

--
-- Now let's cook some data for our final result
--  

-- All boards as chars
allUnicode = let allInts = map permToInt perms 
    in map pIntToUnicode allInts

-- Now let's determine which boards give which outcome.

-- These are all lines, columns, and diags that give a win when filled
wins = [
        [0,1,2],[3,4,5],[6,7,8], -- lines
        [0,3,6],[1,4,7],[2,5,8], -- columns
        [0,4,8],[2,4,6] -- diagonals
    ]

isWin :: Play -> Bool   
isWin ps = let triplets = filter (\x -> 3 == length x) $ subsequences ps -- extract all triplets in the 4 or 5 moves played
    in any (\t -> t `elem` wins) triplets -- And check if any is a win line

-- These are OH wins
oWins = filter isWin perms
-- EX wins when the complement board wins
xWins = filter (isWin . complement) perms
    where complement ps = [0..9] \\ ps
-- And it's stalemate otherwise
cWins = (perms \\ oWins) \\ xWins

-- Write the cooked data to files
cookData = let toString = map (pIntToUnicode . permToInt) in do
  writeFile "all.txt" allUnicode
  writeFile "cWins.txt" $ toString cWins
  writeFile "oWins.txt" $ toString oWins
  writeFile "xWins.txt" $ toString xWins

-- Now we know that there are 48 OH-wins, 16 stalemates, and 62 EX wins (they have more because they play 5 times instead of 4).
-- Finding the solution is just checking to which set an input board belongs to (ungolfed :)
main = interact $ \x -> case (head x) of -- Only consider the first input char
    h | elem h "ĻŃœťŦŨųŷŹƁƂƅƈƕƠƤƳƿǂdžǞǤǵǾȀȳȿɁɅɑɒɘɝɠɤɵɽʀʐʽʾː˭ˮ˰˴˼̌" -> "lose" -- This string is == oWins
    h | elem h "ƏƝƞƹǁLjǑǝȍȺɆɈɶɾʎʸ" -> "cat" -- And this one == cWins
    h -> "win"

3

জাভাস্ক্রিপ্ট, 420 টি অক্ষর

if((s&0x3F000)==0x3F000||(s&0x00FC0)==0x00FC0||(s&0x0003F)==0x0003F||(s&0x030C3)==0x030C3||(s&0x0C30C)==0x0C30C||(s&0x30C30)==0x30C30||(s&0x03330)==0x03330||(s&0x30303)==0x30303)return 'win'
if((s&0x3F000)==0x2A000||(s&0x00FC0)==0x00A80||(s&0x0003F)==0x0002A||(s&0x030C3)==0x02082||(s&0x0C30C)==0x08208||(s&0x30C30)==0x20820||(s&0x03330)==0x02220||(s&0x30303)==0x20202)return 'lose'
if((s&0x2AAAA)==0x2AAAA)return 'cat'

এই সংস্করণে, sএকটি পূর্ণসংখ্যা রয়েছে যা গেম বোর্ডের রাজ্যের প্রতিনিধিত্ব করে। এটি একটি মানের কিছুটা অ্যারে যেখানে দুটি বিট বোর্ডের প্রতিটি বর্গকে উপস্থাপন করে:

  • 10 - এক্স
  • 11 - ও
  • 00 - খালি স্কোয়ার

এই দ্রষ্টব্যটি আটটি সম্ভব "পর পর তিনটি" কনফিগারেশনের প্রতিটি পরীক্ষার জন্য বিট ম্যানিপুলেশন ব্যবহার করে (এটি এক্সের জন্য একবার এবং একবার ও এর জন্য একবার দু'বার পরীক্ষা করে তোলে)।

আমি এটি আমার টিকিট-টো-টো ওয়েবসাইট থেকে ছোটখাটো হ্রাস সহ উপস্থাপন করছি যেখানে এই detectWinফাংশনটি আসল টিকিট-টো টো গেমের অংশ হিসাবে ব্যবহৃত হচ্ছে।


6
ঠিক আছে, এটাকে জোর করে বলাই করা যেতে পারে।
seequ

2

রুবি, 84 টি অক্ষর

$><<(gets.tr("01","10")[r=/0..(0|.0.)..0|000(...)*$|^..0.0.0/]?:win:~r ?:lose: :cat)

সহজ, RegExp ভিত্তিক সমাধান। ইনপুট ফর্ম্যাটটি একটি 9-সংখ্যার বাইনারি স্ট্রিং, উদাহরণস্বরূপ 110101001প্রশ্নের মধ্যে দেওয়া বোর্ডের জন্য।

রুবি, 78 টি অক্ষর

$><<(gets.tr("ox","xo")[r=/o...(o|.o.)...o|ooo|o_.o._o/]?:win:~r ?:lose: :cat)

ছক পূরণ করা: xxo_xox_oox


1

হাস্কেল, 169

main=interact$(\x->last$"cat":[b|(a,b)<-[("ooo","lose"),("xxx","win")],any(==a)x]).(\x->x++(foldr(zipWith(:))(repeat[])x)++map(zipWith(!!)x)[[0..],[2,1,0]]).take 3.lines

ইনপুট ফর্ম্যাট: "এক্স" কেবলমাত্র x"ও" দ্বারা প্রতিনিধিত্ব করা হয় o। প্রতিটি সারির মধ্যে অক্ষরগুলি ফাঁকা স্থান ছাড়াই একসাথে হয় ইত্যাদি সারিগুলি নতুন রেখার দ্বারা পৃথক করা হয়।

সমস্ত সম্ভাব্য সারি / কলাম / তির্যক উত্পন্ন [("ooo","lose"),("xxx","win")]করে বোর্ডে তাদের অস্তিত্বের মাধ্যমে ফিল্টার করে তারপরে টিপলে দ্বিতীয় শব্দটি নির্বাচন করে, তাই আমরা জানি কোন খেলোয়াড়রা জিতেছে। আমরা প্রস্তুতি "cat"নিই যাতে আমরা আমাদের বিজয়ী হিসাবে তালিকার শেষ উপাদানটি নিতে পারি। উভয় খেলোয়াড় জিতলে, "win"সর্বশেষ হবে (তালিকার অর্ডার বজায় রাখার তালিকান)) যেহেতু "cat"সর্বদা প্রথম, কোনও বিজয়ী উপস্থিত থাকলে, এটি চয়ন করা হবে, তবে অন্যথায় একটি শেষ উপাদান এখনও অগ্রিম "cat"গ্যারান্টির গ্যারান্টি হিসাবে উপস্থিত রয়েছে ।

সম্পাদনা: সর্বশেষ তালিকা অনুধাবনীতে পরিবর্তন করে 3 টি অক্ষর শেভ করা হয়েছে map


1

সি, 150 প্রায়

এটি এখানে মধ্যরাত এবং আমি কোনও পরীক্ষা করিনি , তবে আমি যেভাবেই হোক ধারণাটি পোস্ট করব। আমি আগামীকাল এটিতে ফিরে আসব।

ব্যবহারকারী দুটি অষ্টাল সংখ্যা ইনপুট করে (আমি বাইনারি ব্যবহার করতে চেয়েছিলাম তবে যতদূর আমি জানি সি কেবলমাত্র অক্টাল সমর্থন করে):

a কেন্দ্রের বর্গক্ষেত্র, একটি এক্স এর জন্য 1, ও এর জন্য 0 প্রতিনিধিত্ব করে 0

b পেরিমিটার স্কোয়ারগুলি উপস্থাপন করে এমন একটি নয়-সংখ্যার সংখ্যা, যা একটি কোণে শুরু হয়ে বোর্ডের চারদিকে ঘোরে এবং একই কোণে সমাপ্ত হয় (কেবলমাত্র সেই কোণটির পুনরাবৃত্তি সহ), একটি এক্স এর জন্য 1, 0 ও এর জন্য 0 1

জয়ের দুটি উপায় আছে:

  1. কেন্দ্র বর্গক্ষেত্রটি এক্স ( a= 1) এবং দুটি বিপরীত স্কোয়ারও এক্স ( b&b*4096ননজারো)

  2. তিনটি সংলগ্ন পরিধি স্কোয়ারগুলি হল এক্স ( b/8 & b & b*8ননজারো।) এটি কেবলমাত্র বৈধ বিজয় যদি মাঝের বর্গক্ষেত্রটি একটি প্রান্ত বর্গ হয়, কোনও কোণ বর্গ নয়, সুতরাং mকোণার বর্গক্ষেত্রের ঘটনাগুলি এড়াতে মুখোশটিও প্রয়োগ করা প্রয়োজন ।

হারানোটি ভেরিয়েবল সি ব্যবহার করে সনাক্ত করা হয় যা বি এর বিপরীত।

int a,b,c,m=010101010;
main(){
    scanf("%o%o",a,b);c=b^0111111111;
    printf("%s",(a&&b&b*4096)|(b/8&b&b*8&m)?"win":((!a&&c&c*4096)|(c/8&c&c*8)?"lose":"cat"));
}

আপনি m"হারান" সনাক্তকরণে মুখোশটি প্রয়োগ করতে ভুলে গেছেন - c/8&c&c*8। আমি নীচে আপনার কোডটি (এর ক্রিয়াকলাপটি পরীক্ষা না করে) পুনরায় গল্ফ করেছি: int a,b;t(v){return a&&v&v<<12||v/8&v&v*8&0x208208;}main(){scanf("%o%o",a,b);printf("%s",t(b)?"win":t(b^0x1249249)?"lose":"cat");}(১৩০ অক্ষর)। পুনরাবৃত্তি পরীক্ষাটি একটি পরীক্ষার ফাংশনে নিষ্কাশনের জন্য যথেষ্ট দীর্ঘ ছিল t(); এটি প্রয়োজনীয়তা সরিয়ে দেয় cএবং m; ধ্রুবকগুলি প্রত্যেককে একটি করে চর সংরক্ষণ করতে হেক্সে রূপান্তরিত করে।
টবি স্পিড

printfসবেমাত্র চিহ্নিত করা হয়েছে যে এর জন্য কোনও ফর্ম্যাট স্ট্রিংয়ের প্রয়োজন নেই - ফলাফলের স্ট্রিংটি কেবল ফর্ম্যাট হিসাবে সরবরাহ করুন - বা putsএটি, যেহেতু প্রশ্নটি আউটপুট পরে কোনও নতুন লাইন জিজ্ঞাসা করে না! (আরও 7 টি অক্ষর সাশ্রয় করে)।
টবি স্পিড

1

ব্যাশ, 107 103

একটি সেড স্ক্রিপ্ট তৈরি করে এবং চালায়।

আই / ও ফর্ম্যাট: oxo-oox-xooআউটপুট lose( -সারি পৃথক করতে একটি ব্যবহার করুন )। স্টিডিনে ইনপুট। cকমান্ডের জন্য GNU সেড প্রয়োজন ।

আমি নিয়ম 5 এর ব্যাখ্যা দিয়েছি "যদি জয় এবং পরাজয় উভয়ই সম্ভব হয় তবে জয় নির্বাচন করুন"।

মূল কোড

এটিই আসল উত্তর।

সত্যিই আকর্ষণীয় কিছুই। এটা তোলে সংজ্ঞায়িত $bহিসাবে /cwinঅক্ষর সংরক্ষণ করতে, তারপর স্ক্রিপ্ট জয় শর্ত অংশ সংজ্ঞায়িত, তারপর ব্যবহার sed y/x/o/\;s$b/close/রূপান্তর করতে xকরতে oএবং cwinকরতে close(যার ফলে হারান অবস্থার উৎপাদিত)। এটি তখন দুটি জিনিস প্রেরণ করে এবং ccat(যা catযদি উইন / হারের শর্ত মেলে না তবে আউটপুট আসবে ) সেডে to

b=/cwin
v="/xxx$b
/x...x...x$b
/x..-.x.-..x$b
/x-.x.-x$b"
sed "$v
`sed y/x/o/\;s$b/close/<<<"$v"`
ccat"

উত্পন্ন কোড

এটি ব্যাড স্ক্রিপ্ট দ্বারা নির্মিত এবং পরিচালিত সেড স্ক্রিপ্ট।

রেজিজেসগুলিতে, .কোনও চরিত্রের সাথে মেলে এবং তার পরে cTEXTটেক্সট প্রিন্ট করে এবং রেজেক্সটি মিলে গেলে প্রস্থান করে।

এটি একটি স্বতন্ত্র সেড স্ক্রিপ্ট হিসাবে চলতে পারে। এটি 125 টি অক্ষর দীর্ঘ, আপনি এটি অন্য সমাধান হিসাবে গণনা করতে পারেন।

/xxx/cwin
/x...x...x/cwin
/x..-.x.-..x/cwin
/x-.x.-x/cwin
/ooo/close
/o...o...o/close
/o..-.o.-..o/close
/o-.o.-o/close
ccat

1

পাইথন 3, 45

ইনপুটটি রয়েছে i, যা গেম বোর্ডের প্রতিটি সারি, কলাম এবং তির্যক উপস্থাপন করে এমন সংখ্যার একটি তালিকা, যেমন:

X X O
O X O
O O X

দ্বারা প্রতিনিধিত্ব করা হয় [6, 2, 1, 4, 6, 1, 7, 4]

কোড :('cat','lose','win')[2 if 7 in i else 0 in i]


1

ডার্ট - 119

( Dartlang.org দেখুন )

RegExp ব্যবহার করে আসল সংস্করণ: 151 অক্ষর।

main(b,{w:"cat",i,p,z}){
 for(p in["olose","xwin"])
   for(i in[0,2,3,4])
     if(b[0].contains(new RegExp('${z=p[0]}(${'.'*i}$z){2}')))
       w=p.substring(1);
  print(w);
}

কমান্ড লাইনের ইনপুটটি 11 টি অক্ষর, যেমন, "xxx | ooo | xxx"। যে কোনও নন-এক্সও অক্ষর ডিলিমিটার হিসাবে ব্যবহার করা যেতে পারে।

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

পুনরুদ্ধারযোগ্য বিট-বেস সংস্করণ: 119 টি অক্ষর। ইনপুটটি অবশ্যই একটি 9-বিট নম্বর হতে হবে যাতে 1 গুলি 'x' এবং 0 টি 'o' উপস্থাপন করে।

main(n){
  n=int.parse(n[0]);
  z(b,r)=>b>0?b&n==b&511?"win":z(b>>9,n&b==0?"lose":r):r;
  print(z(0x9224893c01c01e2254,"cat"));
}

1

সিজেম, 39 38 36 টি অক্ষর

"ᔔꉚ굌궽渒䗠脯뗠㰍㔚귇籾〳㎪䬔⹴쪳儏⃒ꈯ琉"2G#b129b:c~

এটি একটি বেস রূপান্তরিত কোড code

q3/_z__Wf%s4%\s4%]`:Q3'o*#"win"{Q'x3*#"lose""cat"?}?

যা 52 অক্ষর দীর্ঘ।

ইনপুটটি কেবল বোর্ডের স্ট্রিং প্রতিনিধিত্ব যা উপরের বাম থেকে শুরু করে সারি সারি চলে। উদাহরণ স্বরূপ:

oxooxooox

যার ফলাফল winআউটপুট হয়। অথবা

oxooxoxox

যার ফলে catআউটপুট ইত্যাদি পাওয়া যায় in

কোডটি কেবল নিম্নলিখিত তিনটি জিনিস করে:

  • q3/_ - স্ট্রিংটি 3 এর অংশে বিভক্ত করুন, প্রতি সারিতে
  • _z - প্রতি সারি অ্যারে অনুলিপি করুন এবং প্রতি কলাম অ্যারেতে স্থানান্তরিত করুন।
  • __Wf%s4%- প্রতিটি সারিতে বিপরীত করুন এবং বাম থেকে ডান তির্যক পান। এটি বোর্ডের গৌণ তির্যক।
  • \s4% - বোর্ডের মূল তিরস্কারটি পান
  • ]` - অ্যারেতে সমস্ত কিছু মোড়ানো এবং অ্যারেটিকে আরও শক্তিশালী করুন।

বোর্ড থেকে এখন আমাদের 3 টি সম্ভাব্য গ্রুপ রয়েছে। ফলাফলটি নির্ধারণ করার জন্য আমরা কেবল "ooo" এবং "xxx" এর অস্তিত্ব পরীক্ষা করি।

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


1

জিএনইউ সেড, 25 বাইট

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

ইনপুট ফর্ম্যাট: xxx ooo xxx xox xox xox xox xox (ওপির প্রশ্ন থেকে নেওয়া বোর্ড স্টেট)

/xxx/cwin
/ooo/close
ccat

যদি ইনপুট ফর্ম্যাটটি অ-রিডানডান্ট ( xxx ooo xxx) হয় না, তবে উপরের সেড কোডটি কেবল নীচের লাইনের মাধ্যমে চাপিয়ে দিলে প্রোগ্রামটি 96 বাইট দীর্ঘ (প্রয়োজনীয় rপতাকা গণনা করে) তৈরি করে works

s/(.)(.)(.) (.)(.)(.) (.)(.)(.)/& \1\4\7 \2\5\8 \3\6\9 \1\5\9 \3\5\7/

1

বাশ: 208 অক্ষর

y(){ tr '01' '10'<<<$@;}
f(){ x=$[($1&$2&$3)|($1&$5&$9)|($1&$4&$7)|($2&$5&$8)|($3&$5&$7)|($3&$6&$9)|($4&$5&$6)|($7&$8&$9)]; }
f $@;w=$x
f $(y $@)
([ $x -eq 1 ]&&echo lose)||([ $w -eq 1 ]&&echo win)||echo cat

চালানো bash tictactoe.sh 0 1 0 1 0 1 1 0 1

এই উত্তর দ্বারা অনুপ্রাণিত ।


0

VB.net

উদাহরণ সহ প্রদান নিম্নলিখিত বিট-প্যাটার্ন হিসাবে এনকোড করা হয়

q  = &B_100101_100110_011010 ' 00 Empty, 01 = O, 10 = X

এখন আমরা নিম্নলিখিতটি করে ফলাফল (বা বিজয়ী) নির্ধারণ করতে পারি।

Dim g = {21, 1344, 86016, 66576, 16644, 4161, 65379, 4368}
Dim w = If(g.Any(Function(p)(q And p)=p),"Lose",If(g.Any(Function(p)(q And p*2)=p*2),"Win","Cat"))

0

জে - 97 বাইট

ভাল, সহজতম উপলব্ধ উপলব্ধ। ইনপুটটি হিসাবে নেওয়া হয় 111222333, যেখানে সংখ্যাগুলি সারি উপস্থাপন করে। বাম থেকে ডানে পড়ুন। খেলোয়াড় হয় xএবং শত্রু হয় o। খালি স্কোয়ার ছাড়া কিছু হতে পারে xবা o

f=:(cat`lose>@{~'ooo'&c)`('win'"_)@.('xxx'&c=:+./@(r,(r|:),((r=:-:"1)(0 4 8&{,:2 4 6&{)@,))3 3&$)

উদাহরণ: (এনবি একটি মন্তব্য)

   f 'xoxxoxxox' NB. Victory from first and last column.
win
   f 'oxxxooxxx' NB. Victory from last row.
win
   f 'ooxxoxxxo' NB. The example case, lost to a diagonal.
lose
   f 'xxooxxxoo' NB. Nobody won.
cat
   f 'xoo xx ox' NB. Victory from diagonal.
win

বর্ণহীন কোড একটি ব্যাখ্যা

row   =: -:"1                        Checks if victory can be achieved from any row.
col   =: -:"1 |:                     Checks if victory can be achieved from any column.
diag  =: -:"1 (0 4 8&{ ,: 2 4 6&{)@, Checks if victory can be achieved from diagonals.
check =: +./@(row,col,diag) 3 3&$    Checks all of the above and OR's them.

f     =: (cat`lose >@{~ 'ooo'&check)`('win'"_)@.('xxx'&check)
Check if you have won ........................@.('xxx'&check)
 If yes, return 'win' .............. ('win'"_)
 If not                   (cat`lose >@{~ 'ooo'&check)
  Check if enemy won ................... 'ooo'&check
   If yes, return 'lose'   ---`lose >@{~
   If not, return 'cat'    cat`---- >@{~

0

পাইথন 2, 120 বাইট

b=0b101001110
l=[448,56,7,292,146,73,273,84]
print(['Win'for w in l if w&b==w]+['Lose'for w in l if w&~b==w]+['Cat'])[0]

বা পাইথন, পাইথন শেল থেকে 115 বাইট (2 বা 3):

b=0b101001110;l=[448,56,7,292,146,73,273,84];(['Win'for w in l if w&b==w]+['Lose'for w in l if w&~b==w]+['Cat'])[0]

বোর্ডের ভেরিয়েবলটি প্রশ্নের মধ্যে বর্ণিত বাইনারি বিন্যাসে সেট করা আছে: 1এক্স এর 0জন্য ও, বাম থেকে ডান, উপর থেকে নীচে। এই ক্ষেত্রে, 101001110প্রতিনিধিত্ব করে

XOX
OOX
XXO

যা আউটপুট বাড়ে: Cat


ইনপুট ফর্ম্যাটটি কী?
seequ

0

পাইথন ( 62৩ টি চর)

ইনপুটটি চারটি নিম্ন-স্তরের স্ট্রিং যা একই বোর্ডের চারটি স্বতন্ত্র দৃষ্টিভঙ্গি উপস্থাপন করে, সমস্তগুলি একক স্ট্রিংয়ে সংমিশ্রণ করা হয়: সারি দ্বারা, কলাম দ্বারা, ডান-তির্যক, বাম-তির্যক।

হালনাগাদ

ভাল কাউন্টার-উদাহরণ দিয়ে এটিকে নির্দেশ করার জন্য রেয়ারকে ধন্যবাদ! বোর্ডের প্রতিটি বিভাগ (সারি বা কলাম) এর সাথে বোর্ডের প্রতিটি ভিউ এমন একটি অক্ষর দ্বারা পৃথক করতে হবে যা "x" বা "ও" নয় যাতে বোর্ডের কাঠামোটি সংক্ষিপ্ততার পরেও সংরক্ষণ করা যায়। বোর্ডের প্রতিটি দৃশ্যের চারপাশের সীমানাগুলি বর্গাকার বন্ধনী ("[" এবং "]") হবে এবং সারি / কলামগুলির মধ্যে বিভাজক একটি পাইপ অক্ষর হবে "|"।

এটি অ্যালগরিদমকে সহজ করে তোলে - জয় বা ক্ষতির জন্য যথাক্রমে "এক্সএক্সএক্সএক্স" বা "ooo" সন্ধান করুন। অন্যথায় এটি একটি টাই (বিড়াল)।

যেমন বোর্ড (বাম থেকে ডানে, উপরে থেকে নীচে পড়া) ...

এক্স | এক্স | এক্স এক্স | ও | এক্স ও | এক্স | ও

... "[xxx | xox | oxo]" হিসাবে চিহ্নিত করা হয়েছে (সারি দ্বারা) + "[xxo | xox | xxo]" (কলাম দ্বারা) + "[xoo]" (ডান চিত্র) + [xoo] "(বাম diag) = "[xxx | xox | oxo] [xxo | xox | xxo] [xoo] [xoo]"।

এই পাইথন বিবৃতি ছাপে খেলা পরিবর্তনশীল দেওয়া ফলাফলের গুলি ইনপুট হিসাবে:

print 'win' if 'xxx' in s else 'lose' if 'ooo' in s else 'cat'

এই বোর্ডের জন্য কাজ করে OXX XOO XOX(এটি বিড়াল হওয়া উচিত)?
seequ

না ... না এটা হয় না। ভালো বল ধরা! আমার ধারণা আমার সমাধানটি খুব সহজ ছিল ... ওফ!
বব

আমি বলতে পারি না এই ধরণের সমাধান আমার মনকে অতিক্রম করে নি। :)
seequ

0

হাস্কেল (rs৯ টি)

i x=take 4$(x>>=(\y->case y of{'7'->"win";'0'->"lose";_->""}))++"cat"

এই উত্তর দ্বারা বর্ণিত হিসাবে একই ইনপুট লাগে । আরও সুনির্দিষ্টভাবে, ইনপুটটি 8 টি অষ্টাল মান, প্রতিটি সারি, কলাম এবং তিরোনিকের বাইনারি মান বর্ণনা করে। কোডটি 7 "win" এর প্রতিটি দৃষ্টান্ত তৈরি করে, 0 এর "প্রতিটি হার" হারায় এবং সমস্ত কিছু সরিয়ে দেয়। তারপরে এটি শেষে "বিড়াল" যুক্ত করে এবং ফলাফলটি থেকে প্রথম 4 টি অক্ষর নেয়।

4 টি সম্ভাব্য উত্তর থাকবে: "হারা", "বিড়াল", "জয়" এর পরে 'এল' এবং 'জিত' এর পরে 'সি' থাকবে, যা নিয়মগুলি নিষিদ্ধ করে না :)

ব্যবহারের উদাহরণ:

i "65153806" --outputs "lose"

0

জে: 83

(;:'lose cat win'){::~>:*(-&(+/@:(*./"1)@;@(;((<0 1)&|:&.>@(;|.)(,<)|:)))-.)3 3$'x'=

ব্যবহার: কেবল এক্স এবং ও এর একটি স্ট্রিং যুক্ত করুন এবং যাদু কাজ দেখুন। যেমন। 'Xxxoooxxx'।

অভ্যন্তরীণ ক্রিয়াটি (+/@:(*./"1)@;@(;((<0 1)&|:&.>@(;|.)(,<)|:)))মূলত মূল বাইনারি ম্যাট্রিক্সকে একসাথে বক্স করে, ট্রান্সপোজ দুটি ডায়াগোনালের সাথে একসাথে বক্স করে। এই ফলাফলগুলি একসাথে raused হয়; বিজ নির্ধারণের জন্য সারির যোগফল নেওয়া হয়, এবং তারপরে যোগফল হয়। আরও আমি এই ক্রিয়াটি কল করব Inner

বিজয়ী সন্ধানের জন্য, স্বাভাবিক এবং বিপরীত বাইনারি ম্যাট্রিকগুলির মধ্যে স্কোরের পার্থক্য হুক দ্বারা নেওয়া হয় (-&Inner -.)

বাকী কোডটি কেবল আউটপুটগুলি তৈরি করে এবং সঠিকটি নির্বাচন করে।


0

জাভাস্ক্রিপ্ট, 133 , 114 টি অক্ষর

r = '/(1){3}|(1.{3}){2}1|(1.{4}){2}1|(1\|.1.\|1)/';alert(i.match(r)?'WIN':i.match(r.replace(/1/g,0))?'LOSS':'CAT')

ইনপুটটি iহ'ল সারিগুলির জন্য ডিলিমিটর সহ একটি সাধারণ স্ট্রিং100|001|100

সম্পাদনা: ক্ষতির কেসটি পরীক্ষা করার জন্য জিরো দিয়ে রেগেক্সের 1 টি প্রতিস্থাপনের জন্য আমার পদ্ধতিটি আপডেট করেছে।


আপনি আশেপাশের স্পেসগুলি =এবং রেজেক্স আক্ষরিক চারপাশের উদ্ধৃতিগুলি সরাতে পারেন । এছাড়াও, এর 1...চেয়ে একটি চরিত্র ছোট 1.{3}
nyuszika7h

1
r.test(i)এর চেয়ে একটি চরিত্রও ছোট i.match(r)
nyuszika7h

0

জে - 56 (26?) চর

ইনপুটটিকে নয়টি অক্ষরের একটি 3x3 ম্যাট্রিক্স দেওয়া হয়, কারণ জে এটি ডেটাটাইপ হিসাবে LOL সমর্থন করতে পারে।

(win`lose`cat{::~xxx`ooo<./@i.<"1,<"1@|:,2 7{</.,</.@|.)

উদাহরণ:

   NB. 4 equivalent ways to input the example board
   (3 3 $ 'xxoxoxoox') ; (_3 ]\ 'xxoxoxoox') ; ('xxo','xox',:'oox') ; (];._1 '|xxo|xox|oox')
+---+---+---+---+
|xxo|xxo|xxo|xxo|
|xox|xox|xox|xox|
|oox|oox|oox|oox|
+---+---+---+---+
   (win`lose`cat{::~xxx`ooo<./@i.<"1,<"1@|:,2 7{</.,</.@|.) 3 3 $ 'xxoxoxoox'
lose
   wlc =: (win`lose`cat{::~xxx`ooo<./@i.<"1,<"1@|:,2 7{</.,</.@|.)
   wlc (3 3 $ 'xoxoxooxo')
cat
   wlc (3 3 $ 'xxxoooxxx')
win

যদি আমাদের প্রতিটি সারি, কলাম এবং তির্যক অবস্থাটি খুব অযত্নে অষ্টাল অঙ্কগুলির গল্ফস্ক্রিপ্ট এনকোডিংয়ের অনুমতি দেওয়া হয় তবে এটি কেবল ২ characters টি অক্ষর:

   win`lose`cat{::~7 0<./@i.] 6 5 1 6 4 3 5 0
lose
   f=:win`lose`cat{::~7 0<./@i.]
   f  7 0 7 5 5 5 5 5
win

0

টি-এসকিউএল (2012), 110

select max(iif(@&m=0,'lose',iif(@&m=m,'win','cat')))from(VALUES(292),(146),(73),(448),(56),(7),(273),(84))z(m)

ইনপুট হেক্স নম্বর। এটি রুবি সমাধানের টি-এসকিউএল তে বেশ সুন্দর এবং ঝরঝরে অনুবাদ translation


0

জাভাস্ক্রিপ্ট ১.6, rs১ অক্ষর

আমি ইনপুটটিকে একটি অ্যারে হিসাবে ধরে নিচ্ছি gameযা প্রতিটি সারি, প্রতিটি কলাম এবং প্রতিটি চিত্র 3 টি স্ট্রিং হিসাবে রয়েছে। অনুরূপ বব এর উত্তর , কিন্তু এটা একটি অ্যারের মধ্যে, না একটি যোগসূত্র স্ট্রিং হিসেবে আসে।

alert(game.indexOf("xxx")>=0?"win":game.indexOf("ooo")>=0?"lose":"cat")

সম্পাদনা @ nyuszika7h এর মন্তব্য (67 অক্ষর)

alert(~game.indexOf("xxx")?"win":~game.indexOf("ooo")?"lose":"cat")

আপনি এর ~game.indexOf("xxx")পরিবর্তে game.indexOf("xxx")>=0অন্যটির জন্য একই ব্যবহার করতে পারেন ।
nyuszika7h

0

জাভা 7, 260 বাইট

String c(int[]s){int a[]=new int[8],x=0,y;for(;x<3;x++){for(y=0;y<3;a[x]+=s[x*3+y++]);for(y=0;y<3;a[x+3]+=s[y++%3]);}for(x=0;x<9;y=s[x],a[6]+=x%4<1?y:0;a[7]+=x%2<1&x>0&x++<8?y:0);x=0;for(int i:a)if(i>2)return"win";for(int i:a)if(i<1)return"loose";return"cat";}

অবহেলিত ও পরীক্ষার কেস:

এখানে চেষ্টা করুন।

class M{
  static String c(int[] s){
    int a[] = new int[8],
        x = 0,
        y;
    for(; x < 3; x++){
      for(y = 0; y < 3; a[x] += s[x * 3 + y++]);
      for (y = 0; y < 3; a[x + 3] += s[y++ % 3]);
    }
    for(x = 0; x < 9; y = s[x],
                      a[6] += x % 4 < 1
                               ? y
                               : 0,
                      a[7] += x % 2 < 1 & x > 0 & x++ < 8
                               ? y
                               : 0);
    x = 0;
    for(int i : a){
      if(i > 2){
        return "win";
      }
    }
    for(int i : a){
      if(i < 1){
        return "loose";
      }
    }
    return "cat";
  }

  public static void main(String[] a){
    /*  xxo
        xox
        oox  */
    System.out.println(c(new int[]{ 1, 1, 0, 1, 0, 1, 0, 0, 1 }));
    /*  xxx
        ooo
        xxx  */
    System.out.println(c(new int[]{ 1, 1, 1, 0, 0, 0, 1, 1, 1 }));
    /*  xxo
        oox
        xox  */
    System.out.println(c(new int[]{ 1, 1, 0, 0, 0, 1, 1, 0, 1 }));
  }
}

আউটপুট:

loose
win
cat

0

এপিএল (এনএআরএস), 69 টি চর, 138 বাইট

{w←3 3⍴⍵⋄x←(+/1 1⍉⊖w),(+/1 1⍉w),(+⌿w),+/w⋄3∊x:'win'⋄0∊x:'lose'⋄'cat'}

ইনপুটটি একটি 3x3 ম্যাট্রিক্স বা 9 এলিমেন্টের একটি লিনিয়ার অ্যারে হওয়া উচিত যা কেবল 1 (এক্স এর জন্য) এবং 0 (ও এর জন্য) হতে পারে, ফলাফল "বিড়াল" যদি কেউ না জিততে পারে, হে জিতলে "হেরে যাবে", "জয় "এক্স জিতলে একটি অবৈধ বোর্ডের জন্য কোনও চেক নেই বা ইনপুটটি এমন একটি অ্যারেতে 9 টিরও কম উপাদান বা তার বেশি রয়েছে বা প্রতিটি উপাদান <2 পরীক্ষা করে দেখুন।

একটি মন্তব্য হিসাবে: এটি একটি ইনপুটটি 3x3 ম্যাট্রিক্সে রূপান্তর করবে এবং "x" নামের একটি অ্যারে তৈরি করবে যেখানে উপাদানগুলি প্রতিটি সারির কলাম এবং তির্যকগুলির যোগফল।

কিছু পরীক্ষা অন্যের কাছ থেকে দেখানো উদাহরণ দেখুন:

  f←{w←3 3⍴⍵⋄x←(+/1 1⍉⊖w),(+/1 1⍉w),(+⌿w),+/w⋄3∊x:'win'⋄0∊x:'lose'⋄'cat'}
  f 1 2 3
win
  f 0 0 0
lose
  f 1 0 1  1 0 1  1 0 1
win
  f 0 1 1  1 0 0  1 1 1
win
  f 0 0 1  1 0 1  1 1 0
lose
  f 1 1 0  0 1 1  1 0 0
cat
  f 1 1 0  0 1 0  0 0 1
win
  f 1 1 0  1 0 1  0 0 1
lose
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.