চারটি যাচকের সংযোগ করুন Connect


20

ভূমিকা

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


কার্য

একটি কানেক্ট ফোর বোর্ড দেওয়া, বিজয়ী কে: Xবা Y। সর্বদা একজন বিজয়ী এবং কেবল একজন বিজয়ী থাকবেন। বোর্ডের আকারটি সর্বদা 6 বাই 7 এর মতো হবে যাতে ছবিতে গেম বোর্ডটি কেমন হয়।

নিম্নলিখিত বোর্ডকে একটি বোর্ড দেওয়া হয়েছে, এই উদাহরণে, Xলাল এবং Yনীল:

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

আপনার ইনপুট হবে:

OOOOOOO
OOOOOOO
OOOOOOO
OOOOXOO
OOOXXOO
OOXYYYY

আপনি গেমের সারিগুলিকে নতুন লাইনের অক্ষর দ্বারা আলাদা করতে পারেন (উপরের মতো), কোনও বিভাজনকারী চরিত্র নয়, সারিগুলিকে একটি অ্যারে বা তালিকায় বিভক্ত করতে পারেন, বা আপনি অক্ষরের একটি ম্যাট্রিক্স ইনপুট করতে পারেন।

এই উদাহরণের জন্য সঠিক আউটপুট:

Y

Y এর সারিতে চারটি রয়েছে; সুতরাং, ওয়াই বিজয়ী। সুতরাং, আমরা ওয়াই আউটপুট।


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

ইনপুট:

OOOOOOO
OOOOOOO
OOOOOOO
OOOOOOO
OOYYOOO
OYXXXXO

আউটপুট:

X

ইনপুট:

OOOOOOO
OOOOOOO
OOOOOOO
XXXXOOO
YXYYOOO
YXYYXYX

আউটপুট:

X

ইনপুট:

YXYYXOO
XYXXYOO
XXXYYOO
YYYXXOO
XXYYYYO
XXYYXXO

আউটপুট:

Y

ইনপুট:

OOOOOOO
OOOOOOO
OYOOOOO
OOYOOOO
OOOYOOO
OOOOYOO

আউটপুট:

Y

ইনপুট:

OOOOOOO
OOOOOOO
OYOOOOX
OOYOOOX
OOOXOOX
OXOXYOX

আউটপুট:

X

স্কোরিং

সর্বনিম্ন বাইট জেতা!



2
আমরা কি ধরে নিতে পারি যে বিজয়ীর কাছে সর্বদা পরাজয়ের চেয়ে আরও একটি টোকেন থাকবে?
গণিত জাঙ্কি

1
@ মাথজানকি আমি ভুল ছিলাম, আপনি এটি ধরে নিতে পারবেন না।
নীল

3
@nfnneil আউটপুটটি এক্স বা ওয়াই হতে হবে বা আমরা বিজয়ীকে নির্দেশ করতে আরও দুটি ধারাবাহিক আউটপুট বেছে নিতে পারি?
মার্টিন এন্ডার

1
আমরা কি অন্য অক্ষরগুলিকে ইনপুট হিসাবে ব্যবহার করতে পারি? অথবা একটি সংখ্যার ম্যাট্রিক্স ইনপুট করতে?
লুইস মেন্ডো

উত্তর:


2

জেলি , 19 বাইট

UŒD;ŒD;Z;ṡ€4;/ṢEÞṪṪ

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

এই উত্তরটির মূলটি আমার অনুরূপ প্রশ্নের অনুরূপ অনুলিপি করা হয়েছে ।

ব্যাখ্যা

UŒD;ŒD;Z;ṡ€4;/ṢEÞṪṪ
   ;  ; ;             Append {the input} and the following three values:
UŒD                     the antidiagonals of {the input};
    ŒD                  the diagonals of {the input};
       Z                the transposed {input}.
         ṡ 4          Find all length-4 substrings
          €             of each subarray within that.
            ;/        Flatten one level.
                Þ     Sort, with the following sort order:
               E        If all elements are the same, sort later.
              Ṣ         Tiebreak via lexicographical order.
                 ṪṪ   Take the last element of the last element.

মোটামুটি সহজ: আমরা সমস্ত সারি, কলাম, ত্রিভুজ এবং অ্যান্টিডিজোনাল গ্রহণ করি (ঠিক যেমন এন-কুইন ভ্যালিডেটারে রয়েছে), তারপরে সমস্ত দৈর্ঘ্য -4 সাবস্ট্রিংগুলি নিয়ে, তারপরে এগুলি এমনভাবে সাজান যাতে 4 প্রকারের জয়ের লাইন শেষ। (আমরা tiebreak ক্ষেত্রে একটা প্রয়োজনের OOOOছাড়াও XXXXবা YYYY।) শেষ উপাদান এর শেষ উপাদান নিন এবং যে হবেন Xবা Yপ্রয়োজনীয়।


6

রেটিনা, 51 48 বাইট

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

M`X((.{6}X){3}|(.{8}X){3}|(.{7}X){3}|XXX)
T`d`YX

অনলাইনে চেষ্টা করে দেখুন!

সারিগুলির কমা-বিচ্ছিন্ন তালিকা হিসাবে ইনপুট নেয়


আপনাকে মিল পর্যায়ে ব্যবহার করে এবং সংক্ষেপিত দ্বারা কয়েক বাইট সংরক্ষণ করতে পারবেন (.{7}X){3}|XXXকরার (.{7}X|X)\4\4: tio.run/nexus/retina#fc4xCsMwDAXQPfcI2GC6NDS5QaeipcP/...
মার্টিন Ender

1
@ মার্টিনএন্ডার আপনি কীভাবে ব্যবহার করতে পারেন তা আমি দেখতে পাই না \4- আপনি ম্যাচের স্ট্রিংয়ের পরিবর্তে এর প্রভাবটি পুনরাবৃত্তি করতে চান .{7}। (এবং ভারসাম্যপূর্ণ গোষ্ঠীগুলি সম্ভবত খুব দীর্ঘ হবে))
নীল

1
@ নীল ওহ হ্যাঁ, কিছুই নয়, কোনওভাবেই আমি গ্রিডে ম্যাচের চেয়ে আরও বেশি OXY কোষ আছে তা বিবেচনা করি নি। ম্যাচের মঞ্চটি ব্যবহার করে এখনও 3 বাইট সাশ্রয় হয়।
মার্টিন এন্ডার

5

জাভাস্ক্রিপ্ট (ES6), 54 55

1 টি বাইট সম্পাদনা করুন সংরক্ষিত ধন্যবাদ @ আরনাউল্ড

আমি কেবলমাত্র এক্সটি বিজয়ী কিনা তা যাচাই করে দেখি, কেননা সর্বদা একজন বিজয়ী এবং কেবল একজন বিজয়ী থাকবেন

ইনপুট হ'ল @ আরনাউল্ডের উত্তরের মতো কোনও বিভাজকের সাথে একটি স্ট্রিং

F=    
b=>'YX'[+[0,6,7,8].some(x=>b.match(`X(.{${x}}X){3}`))]

;['OOOOOOO OOOOOOO OOXOOOO OOXOOOO OOXOOOO OOXOYYY'
 ,'OOOOOOO OOOOOOO OOXOOOO OOYXOOO OOYOXOO OOYYOXY'
 ,'OOOOOOO,OOOOOOO,OOOOOOO,OOOOOOO,OOYYOOO,OYXXXXO'
 ,'OOOOOOO,OOOOOOO,OOOOOOO,XXXXOOO,YXYYOOO,YXYYXYX'
 ,'YXYYXOO,XYXXYOO,XXXYYOO,YYYXXOO,XXYYYYO,XXYYXXO']
.forEach(s => console.log(s,F(s)))


@ আর্নল্ড ঠিক আছে, ধন্যবাদ
এডক 65

4

জেলি , 25 22 বাইট

ŒgL⁼¥Ðf
;UŒD€;Z;$ç€4FṀ

গঠিত স্ট্রিংগুলির একটি তালিকা (বা অক্ষরের তালিকার তালিকা) নেয় X , Yএবং O(এছাড়াও প্রতিস্থাপন সঙ্গে কাজ করবে স্থান উভয় কাউন্টারে কম পূরণবাচক হয়েছে যেমন যে)।

এটি অনলাইন চেষ্টা করুন!বা একটি সংযোজনিত সংস্করণটি চালান যা মাল্টলাইন স্ট্রিং নেয়।

কিভাবে?

ŒgL⁼¥Ðf - Link 1, runs of given length: list A, length B  e.g. "XYYYXXO", 4
Œg      - group runs of equal elements of A                     ["X","YYY","XX","O"]
     Ðf - filter keep:
    ¥   -     last two links as a dyad:
  L     -         length                                         1   3     2    1
   ⁼    -         equal to B?         (none kept in this case->) 0   0     0    0

;UŒD€;Z;$ç€4FṀ - Main link: list of list of chars (or list of stings) I
 U             - reverse each row of I
;              - I concatenated with that
  ŒD€          - positive diagonals of €ach (positive and negative diagonals)
        $      - last two links as a monad:
      Z        -     transpose of I (i.e. the columns)
       ;       -     concatenated with I (columns + rows)
     ;         - concatenate (all the required directional slices)
         ç€4   - call the last link (1) as a dyad for €ach with right argument = 4
            F  - flatten the result
             Ṁ - take the maximum ('Y'>'X'>'O') - this has the bonus effect of returning:
                               'Y' or 'X' for a winning board; and
                               'O' or '' for a (valid) game in progress.

4

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

নীলকে ধন্যবাদ 7 বাইট সংরক্ষণ করুন

হিসেবে ইনপুট লাগে কিছু -separated স্ট্রিং, যেখানে কিছু মূলত কোন চরিত্র।

b=>[...'XXXXYYYY'].find((c,i)=>b.match(`(${c}.{${(i%4+6)%9}}){3}`+c))

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


কেন ব্যবহার b.match()করবেন না ? RegExpকল এ সঞ্চয় করা উচিত
নীল

@ নীল আমি সম্পূর্ণরূপে ভুলে গেছি যে এটিতে match()অন্তর্নিহিত রূপান্তর করছে RegExp। ধন্যবাদ!
আর্নৌল্ড

3

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

m=input()
u=[r[::-1]for r in m]
print"YX"[any(any('X'*4in''.join(t[i][j-i]for i in range(j+1))for j in range(6))for t in(m[::-1],m,u,u[::-1]))]

স্ট্রিংগুলির একটি তালিকা বা অক্ষরের তালিকার একটি তালিকা নেয়। স্পেসিফিকেশন গ্যারান্টি হিসাবে 7 টি কলাম দ্বারা 6 টি সারির জন্য হার্ড-কোডিং ।

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



2

পাইথন 2 , 201 143 129 128 107 বাইট

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

lambda m:"YX"[any("X"*4in"".join(a)for a in zip(*m)+m+zip(*["0"*(7-i)+m[i]+"00"*i+m[i]for i in range(6)]))]

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

ক্রেডিট


এটি স্ব-উত্তরের জন্য পুরোপুরি গ্রহণযোগ্য।
জোনাথন অ্যালান

অত্যধিক দিকে তাকিয়ে ছাড়া, সেখানে বেহুদা অনুসরণকারী শূণ্যস্থান হবে বলে মনে হয়: i:] for, i, r, r] forএবং 1 for
Yytsi

@ টুক্কাএক্স আপডেট হওয়া ইনপুটটির জন্য ধন্যবাদ।
নীল

এছাড়াও, *(len(m)-1)হতে পারে *~-len(m)কিভাবে এটা কাজ করে.
Yytsi

] forএবং 1 forএখনও আছে।
Yytsi

1

কে (এনএনজি / কে) , 58 55 বাইট

{"XY"@|/&/'88<x ./:/:,/{x+/:/:+3+[4#1-+!3 3]\&4}'+!6 7}

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

{ } যুক্তি দিয়ে ফাংশন x

+!6 7 0..5 এবং 0..6 এর সমস্ত সম্ভাব্য জোড়

{ }' তাদের প্রত্যেকের জন্য

4#1-+!3 3 8 টি অর্থো ডায়াগোনাল দিকগুলির মধ্যে 4 টি: (1 1;1 0;1 -1;0 1)

3+[ ]\&4চারটি শূন্যের তালিকা দিয়ে শুরু করুন ( &4) এবং প্রতিটি দিকনির্দেশে 3 টি পদক্ষেপ করুন

x+/:/: প্রতিটি সম্ভাব্য অবস্থান থেকে শুরু করুন এবং প্রতিটি সম্ভাব্য দিকে পদক্ষেপ নিন

,/শ্রেণীবদ্ধভাবে সংযুক্ত করা. এই মুহুর্তে আমাদের কাছে স্থানাঙ্ক জোড়াগুলির 4-তালিকার একটি ম্যাট্রিক্স রয়েছে, তাদের কয়েকটি বোর্ডের বাইরেও প্রসারিত

x ./:/: সম্পর্কিত কোষগুলি দেখুন x

88<এর মধ্যে কোনটি "Y"? (88 হল আসকি কোড "X")

&/'কোন 4-তালিকাগুলি কেবল "Y"-s নিয়ে গঠিত ? (এবং-কমাতে-প্রতিটি)

|/অন্তত এমন একটি আছে? (অথবা-কমাতে)

"XY"@যদি মিথ্যা প্রত্যাবর্তন "X", যদি সত্য প্রত্যাবর্তন হয়"Y"


1

Zsh , 207 ... 159 বাইট

সংস্করণ ইতিহাস: 25 সপ্তাহের প্রথম সপ্তাহে 4 টি পুনরাবৃত্তি; তারপরে 6 মাস পরে 25 ডলারে আরও 3 টি পুনরাবৃত্তি হবে।

t(){a=($^a-$^@_);for s l (${w:^^argv})s+=$l&&for ((i=0;i++<$#s;))a[i]+=$s[i];}
w=(+)
t $@
for s;w[++j]=${(l:j:)}_
t $@
t ${(Oa)@}
[[ $a = *XXXX* ]]&&<<<X||<<<Y

( প্রথম ) ( দ্বিতীয় ) ( তৃতীয় ) ) ( চতুর্থ ) ( পঞ্চম ) ( ষষ্ঠ ) অনলাইনে চেষ্টা করে দেখুন!

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

এখানে কভার করার মতো অনেক কিছুই রয়েছে, তাই আমি (ষষ্ঠ সংস্করণ) মন্তব্যগুলিকে একটি টীকাগুলির টুকরোতে সরিয়েছি

(টিএল; ডাঃ: আসল অ্যারে স্থানান্তরিত করা, তবে সেগুলি পৃথক করে রাখতে নিশ্চিত করুন)

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