এই টিকি-ট্যাক-টো বোর্ড বৈধ?


48

চ্যালেঞ্জ

যে কোনও ফরমেটে টিক-ট্যাক-টো বোর্ড দেওয়া হয়েছে, এটি বৈধ কিনা তা নির্ধারণ করুন। যদি কোনও বোর্ড কোনও টিক-ট্যাক-টো গেমের ফলাফল হতে পারে, তবে এটি বৈধ। উদাহরণস্বরূপ, এই বোর্ডটি বৈধ:

XOX
OXO
XOX
বিপরীতে, এই বোর্ডটি অবৈধ:

XXX এর
XXO
বাংলাদেশী গ্রামের

ইনপুট

  • একটি পূর্ণ (9/9) টিক ট্যাক টো বোর্ড (ফলাফল, খেলা নয়)।

বিধি

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

পরীক্ষার মামলা

বৈধ:

XOX
OXO
XOX

XOX
XOX
OXO

Xóõ
OOX
OXX

OXO
XOX
OXO

অবৈধ:

XXX এর
XXX এর
XXX এর

বাংলাদেশী গ্রামের
বাংলাদেশী গ্রামের
বাংলাদেশী গ্রামের

XXX এর
বাংলাদেশী গ্রামের
XXX এর

বাংলাদেশী গ্রামের
OOX
XXX এর

XXO
OXO
OOX

একটু সাহায্য?

একটি বোর্ড বৈধ হিসাবে বিবেচিত হবে (এই চ্যালেঞ্জের জন্য) এবং কেবল যদি নিম্নলিখিত দুটি শর্ত থাকে:

  • এখানে 5 এক্স এবং 4 ও, বা 4 এক্স এবং 5 ও রয়েছে For উদাহরণস্বরূপ,
    XXX এর
    OXO
    XXX এর
    7 এক্স এবং 2 ওএস রয়েছে বলে এটি অবৈধ বলে বিবেচিত হয়।
  • কেবলমাত্র 5 নম্বর প্রাপ্ত খেলোয়াড়ই জিতেছে বা তাদের কেউই জিতেনি। উদাহরণ স্বরূপ,
    XXX এর
    বাংলাদেশী গ্রামের
    OOX
    অবৈধ হিসাবে বিবেচিত হয়, যেহেতু Os এর সারি বা এর সারিটি Xপ্রথমে গঠিত হবে। দুই খেলোয়াড়ের এক সাথে তাদের পালা থাকতে পারে না।

বর্তমান বিজয়ী হলেন ...

... ais523 এর জেলি উত্তর , অবাক করা 26 বাইট!


2
O O O X O X X O Xএকই প্লেয়ারের একটি অনুভূমিক এবং উল্লম্ব সারি উভয় থাকতে পারে তা দেখানোর জন্য একটি টেস্ট-কেস যুক্ত করতে পারে Maybe
স্মিল

2
আপনাকে অবশ্যই বোর্ডের চিহ্নগুলি পৃথকভাবে লিখতে হবে। আমি সেই অংশটি বুঝতে পারছি না। আপনি একটি পাল্টা উদাহরণ প্রদান করতে পারেন?
আর্নল্ড

3
@ টিম এক্স এর 4 টি চিহ্ন রয়েছে।
মার্টিন এন্ডার

2
@ স্পার "শুধুমাত্র ৫ টি নম্বর প্রাপ্ত খেলোয়াড়ই জিতেছে বা তাদের কেউই জিতেনি।"
মার্টিন এন্ডার

2
@ কেভিন (প্রথম মন্তব্যের জবাব) কারণ দ্বিতীয় খেলোয়াড় (৪ নম্বর প্লেয়ার) জিতলে 9/9 বোর্ডের কোনও কাজই শেষ হবে না।
এরিক আউটগলফার

উত্তর:


11

জেলি , 26 বাইট

ṢŒrṪ4=$$Ðfx3ðœ-µẆm€6R¤;/µL

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

ইনপুট ফর্ম্যাটটি কিছুটা অস্বাভাবিক; এটি বোর্ডের প্রতিনিধিত্বকারী একটি স্ট্রিং, তবে উইন্ডোজ নিউলাইনলাইনগুলির সাথে (নতুন লাইনের পরে ক্যারেজ রিটার্ন)। উদাহরণস্বরূপ XXO\r\nOXO\r\nOOX,। (আসলে, লাইনগুলির মধ্যে যে কোনও দ্বি-চরিত্রের প্যাডিং স্ট্রিং কাজ করে তবে উইন্ডোজের নতুন লাইনগুলি অন্যান্য বিকল্পগুলির তুলনায় অনেক বেশি ডিফেন্সেবল ible)

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

ব্যাখ্যা:

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

ṢŒrṪ4=$$Ðfx3 œ- Ẇm€6R¤;/ L
Ṣ                           sorted version of the input
 Œr                         run-length-encode it
        Ðf                  keep only elements where
   Ṫ                        delete the last element, and it was
    4=                      equal to 4
      $$                    parse Ṫ4= as a group
          x3                repeat each element three times

                Ẇ           all sublists of the input
                 m€         take every nth element of each (€) sublist
                   6R       for each n in 1..6
                     ¤      parse 6R as a group
                      ;/    flatten one level (m€ creates a nested structure)

             œ-             multiset difference
                         L  length of that difference

অন্য কথায়, আমরা অক্ষরের তালিকা খুঁজে পাই যা ইনপুটটিতে ঠিক চারবার প্রদর্শিত হয় এবং এর প্রত্যেকটির তিনটি অনুলিপি নিয়ে একটি তালিকা তৈরি করি; আমরা সমস্ত উপসর্গের তালিকাটি পাই যা মূল স্ট্রিংয়ে সমানভাবে ব্যবধানে রয়েছে; এবং যদি আমরা প্রথম থেকে দ্বিতীয়টি বিয়োগ করি তবে আমরা ফলাফলটি দৈর্ঘ্য 1 হওয়া চাই (অর্থাত্ কোনও খেলোয়াড় চারবার খেলেছে কিন্তু জিতেনি)। নোট করুন যেহেতু আমরা 3 × 3 গ্রিডে রয়েছি এবং প্রতিটি স্কোয়ার পূর্ণ, তাই উভয় খেলোয়াড়ের পক্ষে চারবার খেলে যাওয়া অসম্ভব । জেলিতে 1 টি সত্যবাদী, 0 টি মিথ্যা, সুতরাং ফলস্বরূপ তালিকাটি বুলিয়ানতে রূপান্তর করতে আমাদের বিশেষ কিছু করার দরকার নেই। ( µLপ্রয়োজন বোধ করা হয়, যদিও, কারণ অন্যথায় উভয় “XXX”এবং “OOO”সম্ভব truthy আউটপুট মান হবে এবং প্রশ্ন সকল বৈধ বোর্ড একই আউটপুট দিতে প্রয়োজন।)


3
এটি সম্পূর্ণ পঠনযোগ্য।
পাব্রামরা

21

জাভাস্ক্রিপ্ট (ES6), 88 87 বাইট

s=>(a=[...s]).sort()[5]-a[3]&[7,56,73,84,146,273,292,448].every(j=>j&i,i=`0b`+s^~-a[4])

9 0এবং 1অক্ষরের একটি স্ট্রিং হিসাবে ইনপুট নেয় এবং অবৈধের 1জন্য বৈধের জন্য ফেরত দেয় 0। আমরা অক্ষরগুলিকে ক্রম অনুসারে সাজান। যদি মাঝের তিনটি অক্ষর এখন একই হয় তবে বোর্ডটি অবৈধ কারণ এক টুকরো অনেক বেশি। অন্যথায়, আমরা আসল বোর্ডটিকে বাইনারি রূপান্তর করি, 0এস এর চেয়ে বেশি এস থাকলে বিটগুলি ফ্লিপ করে 1। এই মুহুর্তে বোর্ডটি বৈধ হয় যদি 0তিনটির একটি লাইন না থাকে, তাই আমরা বিটমাস্কের একটি অ্যারের মাধ্যমে কেবলমাত্র আটটি লাইনই পরীক্ষা করি। সম্পাদনা: @ বুদ্ধিমানের জন্য 1 টি বাইট সংরক্ষণ করা হয়েছে


@ ইথ প্রডাকশনস আহ, অবশ্যই, ফলাফল যাইহোক, কেবল 0 বা 1 হতে চলেছে।
নিল

14

পাইথন 3, 131 127 125 100 96 বাইট

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

def z(b):return int('agqozfx67wwye6rxr508ch2i8qicekpreqkap0725pk',36)<<24&1<<b+(b>255)*(511-b-b)

পরীক্ষার মান:

X X X
O X O
X X X

বাইনারি মান হিসাবে প্রতিনিধিত্ব করা হয় 0b111010111, এবং বোর্ডটি বৈধ হলে ফাংশনটি একটি শূন্য-মান দেয় returns


4 টি কম বাইটের জন্য মধ্যবর্তী ভেরিয়েবল সরানো হয়েছে
কেন ওয়াইএন

দুটি কম বাইট হিসাবে a&(1<<b)বন্ধনী প্রয়োজন নেই।
কেন YN

24 টি সর্বনিম্ন শূন্য বিটের সংক্ষিপ্তসার করে প্রতিসাম্য ব্যবহার করে আরও একটি 25 বাইট ছুঁড়ে ফেলেছে - সেখানে গল্ফিয়ার করার উপায় থাকতে হবে if b>255:b=511-b!
কেন ওয়াইএন

এটি করার জন্য একটি গল্ফিয়ার উপায় পেয়েছে if
কেন YN

11

ব্যাচ, 140 বাইট

@set/aXXX=OOO=O=0
@for %%l in (%* %1%2%3 %1%4%7 %1%5%9 %2%5%8 %3%5%7 %3%6%9 %4%5%6 %7%8%9)do @set/a%%l+=1
@cmd/cset/a!XXX*!(O-=5)+!OOO*!~O

1বৈধ এবং 0অবৈধ জন্য নয়টি পৃথক কমান্ড-লাইন আর্গুমেন্ট এবং আউটপুট হিসাবে ইনপুট নেয় । যতবার ট্র্যাকিং করে কাজ করে এটি একটি সূচিত Oএবং একটি লম্ব লাইন OOOবা XXX। সুবিধার্থে ব্যাচ আমাদের পরোক্ষভাবে গাণিতিক সম্পাদনা করার অনুমতি দেয়, সুতরাং আমরা এর %%lপরিবর্তে কিছু পরিবর্তনশীল না হয়ে পরিবর্তে কিছু পরিবর্তনশীল (যদিও আমরা কেবল বর্ণিত তিনটি ভেরিয়েবলের প্রতি আগ্রহী)। আমাদের তখন পরীক্ষা করা দরকার যে হয় হয় Xজিতেনি এবং পাঁচটি রয়েছে Oবা Oএটি জিতেনি এবং চারটি আছে O


10

গণিত, 82 75 বাইট

7 বাইট সংরক্ষণের জন্য মার্টিন ইন্ডারকে ধন্যবাদ!

t=Total;3<(b=#~t~2)<6&&{t[c=If[b>4,1-#,#]],t/@c,Tr@c,Tr@Reverse@c}~FreeQ~3&

ইনকাম এবং আউটপুটিং হিসাবে Trueবা 1s এবং 0 এর তালিকার একটি 3x3 নেস্টেড তালিকা গ্রহণ করা নামহীন ফাংশন False

Totalফাংশনটির কিছু সুবিধাজনক নমনীয়তা ব্যবহার করে (এখানে গল্ফ করা হয়েছে t): একটি উদাহরণ অ্যারে প্রদত্ত e = { {1,2,3} , {4,5,6} , {7,8,9} }, কমান্ডটি t[e]তিনটি ভেক্টরকে সমষ্টি করে (এখানে ফলন দেয় {12,15,18}); কমান্ডটি t/@eপ্রতিটি সাবলিস্টকে স্বতন্ত্রভাবে জরিমানা করে (এখানে ফলন হচ্ছে {6,15,24}); এবং কমান্ডটি e~t~2নয়টি উপাদানের যোগফল দেয় (এখানে ফলন হচ্ছে 45)

সুতরাং প্রথমে আমরা পরীক্ষা করে দেখি, 3<(b=#~t~2)<61s এর মোট সংখ্যা 4 বা 5; যদি না হয় আমরা সঙ্গে প্রস্থান False। যদি তা হয় তবে আমরা c=If[b>4,1-#,#]সেখানে পাঁচটি নয়, চার 1s করতে বাধ্য করি to তারপরে আমরা কলামের যোগফলগুলি, t[c]সারির অঙ্কগুলি t/@c, প্রধান তির্যকের Tr@cযোগফল এবং বিপরীত তির্যকের যোগফল গণনা করি এবং সেই সংখ্যার অঙ্কগুলিতে কোনও স্তরে উপস্থিত হতে ব্যর্থ হয় তা পরীক্ষা করতে Tr@Reverse~cব্যবহার করি ।~FreeQ~33

চিত্তাকর্ষক পার্শ্ব নোট: এই সাইটে সর্বাধিক উপস্থিতি থেকে পৃথক, এখানে Trএকটি ত্রিমাত্রিক তালিকা যোগ করতে ব্যবহৃত হয় না তবে এটি নকশা হিসাবে ব্যবহৃত হয়! দ্বি-মাত্রিক ম্যাট্রিক্সের ট্রেস গণনা করতে!


6

পাইথ - 36 বাইট

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

JsM+sCBQm@VdU3_BQ?q5KssQ*FJ?qK4!}3JZ

পরীক্ষা স্যুট


5

জাভাস্ক্রিপ্ট (ES6), 101 বাইট

একটি 9-বিট বাইনারি মাস্ক হিসাবে ইনপুট নেয় যেখানে X = 1এবং O = 0(এমএসবি = শীর্ষ বাম ঘর, এলএসবি = নীচে ডান ঘর)।

n=>[7,56,73,84,146,273,292,448,o=x=0].map((m,i)=>(c-=n>>i&1,m&n^m?m&n||o++:m&&x++),c=4)&&!(c|x&&~c|o)

পরীক্ষার মামলা


আমি জানতাম একটি (কিছুটা) সহজ বিটওয়াইজ সমাধান থাকতে হবে। দুর্দান্ত কাজ
ETH প্রোডাকশনগুলি

5

পাইথন 2, 158 132 109 92 91 123 বাইট

def v(b):f=sum(b,());w={x[0]for x in b+zip(*b)+[f[::4],f[-3:1:-2]]if len(set(x))==1};return sum(map(`b`.count,w))==len(w)*5

ইনপুটটি সারিগুলির একটি তালিকা / টুপল, প্রতিটি স্ট্রিংয়ের তিন-দ্বিগুণ, যেমন:
[('X', 'O', 'X'), ('O', 'X', 'O'), ('X', 'O', 'X')]

@ মাল্টেসেনের উত্তর অনুসারে কর্ণগুলি উপেক্ষা করে কিছু বাইট সংরক্ষণ করা হয়েছে, যা নীচের মত প্রকাশকে সংক্ষিপ্তও করেছে।

বাঁচানোর জন্য @vaultah ধন্যবাদ 17 18 বাইট।

विकर्णগুলি পরীক্ষা করা প্রয়োজনীয় হতে দেখা যাচ্ছে, যা উপরের অনেকগুলি সঞ্চয় সরিয়ে নিয়েছে।

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

ব্যাখ্যা

def v(b):
  f=sum(b,())
  w={x[0]for x in b+zip(*b)+[f[::4],f[-3:1:-2]]if len(set(x))==1}
  return sum(map(`b`.count,w))==len(w)*5

fটুকরো টুকরো করার জন্য সমতল ইনপুট।
wবিজয়ী ক্রম সহ অক্ষর রয়েছে।
প্রতিটি বিজয়ী চরিত্রের উপস্থিতি গণনা করুন, যা হয় wশূন্য হলে 0 বা 5 len(w)হয়। 1 হয় উভয় ক্ষেত্রে যখন বিজয়ী ক্রম থাকে তখন অসম্ভব। বিজয়ীর সাথে 5 টি হ'ল বোঝা গেছে যে 4 এর কাছে 4 টি বিজয়ী ক্রম ছাড়া আপনার> 5 থাকতে পারে না।


lambda b:len({x[0]for x in b+zip(*b)if len(set(x))==1})<2and set(map(.count,'XO'))=={4,5}কিছু বাইট সংরক্ষণ করে।
ভোল্টাহ

এবং আমি কেবল লক্ষ্য করেছি যে ...and{4,5}==set(map(বি .count,'XO'))আরও একটি বাইট সংরক্ষণ করে।
ভোল্টাহ

আমি মনে করি এটি ভুলভাবে প্রশ্নটির শেষ "অবৈধ" উদাহরণটিকে বৈধ হিসাবে বিবেচনা করে, কারণ এটি নিশ্চিত করে না যে বিজয়ী 5 নম্বর প্রাপ্ত খেলোয়াড়।
স্মিল

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

5

আর, 88 82 বাইট

x=scan();`if`(sum(x)%in%4:5,all(apply(combn(which(x==(sum(x)<5)),3),2,sum)!=15),F)

1 থেকে 9 পর্যন্ত তিনটি পূর্ণসংখ্যার সমস্ত সংমিশ্রণ যা 15 পর্যন্ত যোগ হয় নীচে দেখানো স্কোয়ারের সারি / কলাম / কর্ণগুলি।

2 7 6
9 5 1
4 3 8

ফাংশনটি বুলিয়ানগুলির ভেক্টর হিসাবে ইনপুট নেয়, "এক্স" এর জন্য টি, "ও" এর জন্য এফ, যা বোর্ডের সমতল প্রতিনিধিত্ব is কিন্তু, এগুলি পুনরায় সাজানো হয়েছে যাতে ক্রম অনুসারে তাদের সূচক বর্গক্ষেত্রের সংখ্যার সমান (2,7,6,9,5,1,4,3,8)। সাধারণ অর্থে বোর্ডকে চাটুকার করে এবং তারপরে সি দ্বারা (6,1,8,7,5,3,2,9,4) টুকরো করে এই আদেশটি অর্জিত হতে পারে। তাই এটা

X O X
O X O
X O X

হিসাবে প্রতিনিধিত্ব করা হয়:

c(T, F, T, F, T, F, T, F, T)[c(6,1,8,7,5,3,2,9,4)]

যা হলো:

c(F, T, F, T, T, T, F, T, F)

ফাংশনটি প্রথমে নির্ধারণ করে যে ঠিক চারটি নম্বরযুক্ত খেলোয়াড় রয়েছে কিনা। যদি তা হয় তবে, খেলোয়াড়টির থ্রি-ইন-সারি রয়েছে কিনা তা নির্ধারণ করতে ফাংশনটি ফ্যাক্ট-অফ-ফ্যাক্টস-এ-অ্যাড-আপ-টু -15 ব্যবহার করে (বোর্ড যদি সেই প্লেয়ারটি করে তবে তা অবৈধ)।

আপনি যদি ইনপুট হিসাবে প্রচলিত-সমতলভাবে বোর্ড নিতে চান তবে কোডটি এর পরিবর্তে দেখতে হবে:

f=function(x)ifelse(sum(x)%in%4:5,all(apply(combn(c(2,7,6,9,5,1,4,3,8)[which(x==(sum(x)<5))],3),2,sum)!=15),F)

আমি এটি নতুন, পরামর্শ প্রশংসা করা হবে।


1
if()পরিবর্তে 2 টি বাইট ব্যবহার করুন: f=function(x)যদি (sum(x)%in%4:5,all(apply(combn(which(x==(sum(x)<5)),3),2,sum)!=15),F)। আপনি ব্যাপকভাবে পরীক্ষিত মন না। ব্যাকটিক্স কোড নষ্ট করে, তবে এটি backtick if backtick(
জোনাথন ক্যারল

1
এখনো ভাল; x=scan();যদি (sum(x)%in%4:5,all(apply(combn(which(x==(sum(x)<5)),3),2,sum)!=15),F)ও ইনপুট 1এবং 0। 82 বাইট।
জোনাথন ক্যারল

3

জাভাস্ক্রিপ্ট (ES6), 145 139 131 127 বাইট

s=>!(q="XO"[s.split`O`.length-5])|![...s].some((c,i)=>c==q&!/(.)(\1|..(\1|.(\1|.\1.).)..)\1/.test(s.slice(0,i)+0+s.slice(i+1)))

স্থান-বিভাজনযুক্ত স্ট্রিং হিসাবে ইনপুট করুন "XOX OXO XOX"। একটি বৈধ 1বোর্ডের জন্য একটি অবৈধ বোর্ডের আউটপুট 0। এটি স্পষ্টতই সেরা কৌশল নয়, অন্তত জাভাস্ক্রিপ্ট দিয়ে নয় ...

এটি মূলত নিম্নলিখিত দুটি হোল্ড করে কিনা তা যাচাই করে:

  • ঠিক 4 বা 5 Oটি রয়েছে, এবং
  • কমপক্ষে 5-টির মধ্যে একটি পিস রয়েছে যা অপসারণের সময় একটি অনিশ্চিত গেম তৈরি করে।

রেজেক্সটি কোনও গেমের সিদ্ধান্ত নেওয়া হয়েছে কিনা তা যাচাই করে। এটি একটি বোর্ডের সাথে মেলে যদি প্রতিটি জোড়কে পৃথক করে 0 (সারি), 2 (নীচে-ডান ত্রিভুজ), 3 (কলাম), বা 4 (নীচে-বাম তির্যক) অক্ষরের সাথে তিনটি দৈর্ঘ্যের কোনও রান থাকে of

পরীক্ষার স্নিপেট


2

রুবি, 104 99 91 বাইট

->x{[7,56,448,292,146,73,84,273].none?{|y|b=x.to_i 2;((a=x.count'1')==4?b:a==5?~b:7)&y==y}}

ইনপুট ফর্ম্যাট: 9 টি চিহ্নের বাইনারি স্ট্রিং (0 সে এবং 1 এস) বোর্ডের প্রতিনিধিত্ব করে, উদাহরণস্বরূপ প্রথম পরীক্ষার কেসটি 101010101। প্রথমে এটি বাইনারি সংখ্যায় রূপান্তর করুন, পপকাউন্টটি 4 বা 5 হয় কিনা তা যাচাই করুন, যদি এটি 5 সংখ্যাকে উল্টে দেয় তবে আমাদের সর্বদা 4 থাকে Check

টিএল; ডিআর : 4 নম্বর প্রাপ্ত খেলোয়াড় যদি মিথ্যা প্রত্যাবর্তন করে, অন্যথায় সত্য।

মন্তব্যের জন্য জর্ডানকে ধন্যবাদ,

আমি ইউটিএফ -8 স্ট্রিংটি পুনরুত্পাদন করতে পারি না যা অন্য বাইট সংরক্ষণ করবে।


আপনি প্রতিস্থাপন করতে পারেন .select{...}[0]সঙ্গে .find{...}
জর্দান

এবং সংখ্যার অ্যারেটি প্রতিস্থাপন করে আপনি আরও একটি বাইট সংরক্ষণ করতে পারেন "8ǀĤITđ".unpack("U*")(যদি অনুবাদে কিছু হারিয়ে যায় তবে স্ট্রিংটি pack("U*")মূল অ্যারেটিতে কল করার ফলাফল ; এটি 12 বাইট)।
জর্দান

আপনি কি এর any?পরিবর্তে none?আউটপুট উল্টিয়ে পুরো পুরো বাইট সংরক্ষণ করতে পারবেন?
অ্যালেক্সিস অ্যান্ডারসন

আমি একটা দিয়ে চেষ্টা করেছি? কারও বদলে? তবে আমার একটি দরকার! আউটপুট উল্টাতে।
জিবি

1

পার্ল 6 , 103 99 বাইট

{my \c=%(.flat.Bag.invert)<5>;?all c,|(.[0]===c if [eq] $_ for |.flat[<0 4 8>,<2 4 6>],|$_,|.&zip)}

একটি ল্যাম্বডা যা তালিকার মতো তালিকাগুলি গ্রহণ করে (('X','O','X'), ('O','X','O'), ('X','O','X'))এবং একটি বুল ফেরত দেয়।

এটি এর মতো কাজ করে:

  1. ঠিক কোন চিহ্নটি 5 বার প্রদর্শিত হবে তা পরীক্ষা করে এটি সঞ্চয় করুন c(যদি কোনও চিহ্ন হুবহু 5 বার প্রদর্শিত না হয় তবে এটিতে মিথ্যা মান থাকবে)
  2. সমস্ত ত্রিভুজ, সারি, এবং কলামগুলিতে আইট্রেট করুন এবং "বিজয়ী "গুলি (যেমন তিনটি অক্ষর সমান সেখানে) ফিল্টার আউট করুন ।
  3. cসত্যবাদী কিনা তা যাচাই করুন এবং প্রতিটি বিজয়ী রেখা টাইপ রয়েছে c

1

পিএইচপি, 125 বাইট

for($p=$n=$argv[1];$p;$p/=2)$i+=$p&1;foreach([7,56,448,73,146,292,273,84]as$m)$n&$m^$m?$n&$m||$o++:$x++;echo!$x|!$o&&2>$i^=4;

আমার আরনাউল্ডের মতো একই ধারণা ছিল : বোর্ডটি বৈধ হয় যদি 4 বা 5 টি বিট সেট থাকে এবং হয় Xবা হয় বা কারও Oস্ট্রাক না থাকে (তবে উভয়ই নয়)।

উৎপন্ন করার জন্য মাঠ থেকে ইনপুট প্রতিস্থাপন Xসঙ্গে 1এবং Oসঙ্গে 0, দশমিক লাইন এবং ধর্মান্তরিত বাইনারি যোগদানের কমান্ড লাইন আর্গুমেন্ট হিসাবে প্রদান।

1বৈধ জন্য প্রিন্ট ; অবৈধ জন্য খালি আউটপুট। সাথে চালাও -r

ভাঙ্গন

// count set bits
for($p=$n=$argv[1];$p;$p/=2)$i+=$p&1;
    /* ($p/=2 takes longer than $p>>=1, but eventually
       $p will come close enough to 0 for the loop to finish */
// count streaks for X and O
foreach([7,56,448,73,146,292,273,84]as$m)
    $n&$m^$m            // ($n masked with streak)!=streak <=> no streak for X
        ?$n&$m||$o++    // true: O has a streak if ($n masked with streak) is empty
        :$x++;          // false: X has a streak
echo!$x|!$o&&2>$i^=4;   // valid if not both have a streak
                        // AND $i is 4 or 5 (toggle 4 -> result 0 or 1)


0

ES6 (জাভাক্রিপ্ট), 130, 138, 117 বাইট

সম্পাদনাগুলি:

  • 21 বাইট অফ নিল থেকে চমৎকার পরামর্শের জন্য ধন্যবাদ!
  • প্রাথমিক সংস্করণটি একটি বাগের প্রবণ ছিল, যা এখন +8 বাইটের দামে স্থির করা উচিত। (এটি নির্দেশ করার জন্য ধন্যবাদ @ ইটিএইচ প্রডাকশনগুলি)

একটি চূড়ান্তভাবে straighforward পদ্ধতির। সম্ভবত আরও কিছুটা গল্ফ করা যেতে পারে।

9 টি পৃথক যুক্তি, 1es এবং 0es হিসাবে ইনপুট গ্রহণ করে

  • 1 এক্স এর জন্য
  • 0 হ'ল

যুক্তি: 1-3 - প্রথম সারি, 4-6 - দ্বিতীয় সারি, 7-9 - তৃতীয় সারিতে।

Golfed

(a,b,c,d,e,f,g,h,j)=>![a+b+c,d+e+f,g+h+j,a+d+g,b+e+h,c+f+j,a+e+j,g+e+c,7].some(x=>x=="7777307777"[a+b+c+d+e+f+g+h+j])

ইন্টারেক্টিভ "টেস্ট বিছানা"

var a=b=c=d=e=f=g=h=j=0;

T=(a,b,c,d,e,f,g,h,j)=>![a+b+c,d+e+f,g+h+j,a+d+g,b+e+h,c+f+j,a+e+j,g+e+c,7].some(x=>x=="7777307777"[a+b+c+d+e+f+g+h+j]);

function test() {
  if(T(a,b,c,d,e,f,g,h,j)) {
     grid.style.backgroundColor='green';
     msg.innerHTML="GOOD"
  } else {
     grid.style.backgroundColor='red';
     msg.innerHTML="BAD"
  }
}
<table id=grid style="background: red">
<thead>
  <tr>
     <td id=msg align="center" colspan="3">BAD</td>
    </tr>
  </thead>
  <tr>
      <td><input type="checkbox" onchange="a=this.checked*1;test();" id="ca"/></td>
      <td><input type="checkbox" onchange="b=this.checked*1;test();" id="cb"/></td>
      <td><input type="checkbox" onchange="c=this.checked*1;test();" id="cc"/></td>
    </tr>
    <tr>
      <td><input type="checkbox" onchange="d=this.checked*1;test();" id="cd"/></td>
      <td><input type="checkbox" onchange="e=this.checked*1;test();" id="ce"/></td>
      <td><input type="checkbox" onchange="f=this.checked*1;test();" id="cf"/></td>
    </tr>
    <tr>
      <td><input type="checkbox" onchange="g=this.checked*1;test();" id="cg"/></td>
      <td><input type="checkbox" onchange="h=this.checked*1;test();" id="ch"/></td>
      <td><input type="checkbox" onchange="j=this.checked*1;test();" id="cj"/></td>
    </tr>
 </table>


আমি ভুল হতে পারি, তবে দেখে মনে হচ্ছে এটির কোনও বিজয়ী আছে কিনা তা যাচাই করে। একটি বৈধ বোর্ডের কোনও বিজয়ী থাকতে পারে না; উদাহরণস্বরূপ, [1,0,1,1,0,1,0,1,0]( XOX XOX OXO)।
ETH প্রোডাকশনগুলি

হ্যাঁ, গল্ফ করার সময় আমি অস্বীকারটি হারিয়ে ফেলেছি। এটির বিপরীত দিকটি বিজয়ী নয় তা যাচাই করার কথা । এখনই ঠিক করা উচিত। ধন্যবাদ !
zeppelin

(আমি সর্বশেষ সম্পাদনার আগে মন্তব্য করতে শুরু করেছি) আপনি ক) লিখতে পারেন ( a+b+c+d+e+f+g+H+iপরিবর্তে F.reduce((r,c)=>r+=c*1)কোন বিন্দুতে আপনার প্রয়োজন হবে না F) খ) লিখুন .includes(C)(এবং ইনলাইনটির মানতে যান C)?
নিল

@ নীল, এটি সম্ভবত কাজ করবে, আমি আগামীকাল এটি চেষ্টা করব। ধন্যবাদ !
জেপেলিন

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