গেম অফ সেট ধাঁধা


13

আপনি কি 81 টি কার্ড সহ একটি কার্ড গেম সেট (বাচ্চাদের বিটিডব্লিউয়ের জন্য একটি দুর্দান্ত খেলা) জানেন যে যেখানে প্রতিটি কার্ডের 4 টি আলাদা আলাদা বৈশিষ্ট্য (ফর্ম, সংখ্যা, রঙ এবং পূরণ) রয়েছে। প্রতিটি বৈশিষ্ট্যের 3 টি আলাদা মান রয়েছে:

form: wave, oval, diamond
colour: red, purple, and green
number: 1, 2, 3
fill: none, dashed, opaque.

টেবিলে 12 টি কার্ড খোলা রয়েছে এবং এখন চ্যালেঞ্জটি সেটগুলি নির্দেশ করে indicate একটি সেটটিতে তিনটি কার্ড থাকে যেখানে প্রতিটি বৈশিষ্ট্যটির মান 0, 1 বা 3 বার ঘটে। লাল চিত্র, বা অস্বচ্ছ, বা 1 নম্বর সহ 2 টি কার্ড থাকা ভাল নয়। আরও চাক্ষুষ ব্যাখ্যার জন্য সরবরাহিত লিঙ্কটি দেখুন ।

আমি এমন কোনও কার্ডের জন্য একটি কোড কল্পনা করি যেখানে সমস্ত বৈশিষ্ট্যগুলি এনকোড থাকে

"WP2N"

জন্য দাঁড়িয়েছে

2 Purple Waves with No fill

একসাথে উদাহরণস্বরূপ OR1NএবংDG3N

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

এটি একটি সেট (3 পৃথক ফর্ম, 3 বিভিন্ন রঙ, 3 পৃথক সংখ্যা, 1 ভরাট)।

ইনপুট হ'ল স্পেস সীমিত স্ট্রিং যা অনন্য কোডের (এলোমেলোভাবে 81 টি সম্ভাব্য কোডের মধ্যে পছন্দ করে) কার্ডের প্রতিনিধিত্ব করে।

"OR1N WP2N DG3N DR1D WG3S WG1N WR2D WP3N DR2O DR2D OG3O OR2D"

সমাধান অবশ্যই প্রদত্ত সংগ্রহের মধ্যে সমস্ত সম্ভাব্য সেটগুলি নির্দেশ করে। সুতরাং

OR1N, WP2N, DG3N

অন্যান্য সমস্ত সেটের সাথে অবশ্যই সমাধানের অংশ হতে হবে।


5
প্রতিশ্রুতিবদ্ধ মনে হচ্ছে তবে দয়া করে আরও কীভাবে ইনপুট ডেটা হ্যান্ডেল করা দরকার (স্ট্ডিন, ফাইল, পরামিতি) এবং ইনপুট এবং আউটপুট ডেটা কেমন হবে তা নির্দিষ্ট করে নির্দিষ্ট করে দিন। একটি নমুনা রানের একটি চাক্ষুষ প্রতিনিধিত্ব (স্ক্রিনশট বা অনুরূপ) সরবরাহ করুন provide
manatwork

1
আমি আমার ঘনিষ্ঠ ভোট প্রত্যাহার করে এটিকে অগ্রাহ্য করেছি; এটি খুব আকর্ষণীয়! :)
ডোরকনবব

4
"বাচ্চাদের জন্য খেলা" বলতে কী বোঝ?
বুথবি

2
ওয়েটামিনেট ... এখানে 4 টি আলাদা চতুর্থ অক্ষর রয়েছে: এন, ডি, এস, এবং ও
বুথবি

1
@ বুথবি: আমি উল্টো কথা বলতাম। বর্ণমালা যদি ওভারল্যাপ না করে, প্রতিটি পরীক্ষার্থী সেটের জন্য, আপনি কেবল প্রতিটি অক্ষর বা সংখ্যা কতবার দেখায় তা গণনা করতে পারেন: কোনও সংখ্যা বা চিঠি দু'বার না উপস্থিত থাকলে সেটটি বৈধ হয়।
ফ্লোডেল

উত্তর:


4

রুবি, 104 98 81 80 টি অক্ষর

$*.combination(3).map{|c|puts c*?,if(0..3).all?{|i|c.map{|x|x[i]}.uniq.size!=2}}

নমুনা রান (আপনার উদাহরণের ডেটা ব্যবহার করে):

c:\a\ruby>set.rb OR1N WP2N DG3N DR1D WG3S WG1N WR2D WP3N DR2O DR1D OG3O OR2D
OR1N,WP2N,DG3N
WP2N,DR1D,OG3O
WP2N,DR1D,OG3O
DG3N,WG3S,OG3O

এটি WP2N,DR1D,OG3Oদু'বার আউটপুট দেয় কারণ DR1Dআপনার নমুনা ডেটাতে আপনার দুটি আছে ।

ব্যাখ্যা:

$*.combination(3).map{|c|- 3 টি কার্ডের প্রতিটি সংমিশ্রণ
puts c*?,if- সেটটি আউটপুট করুন, যদি ...
(0..3).all?{|i|- যদি 0 থেকে 3 পর্যন্ত সমস্ত সংখ্যার (স্ট্রিংয়ের বৈশিষ্ট্যগুলির অভ্যাস) trueএই ব্লকে যাওয়ার সময় মূল্যায়ন করা হয়
c.map{|x|x[i]}- iপ্রতিটি স্ট্রিংয়ের তম সূচকটি গ্রহণ করুন
.uniq.size!=2}- যদি অনন্য বৈশিষ্ট্যের পরিমাণ (ফর্ম, রঙ ইত্যাদি) 2 না হয় (তাই, 1 বা 3)


এই প্রতিদ্বন্দ্বিতা ধরে নেওয়া যাক codegolf হয়ে যাবে, আমি দুই উন্নতি উত্থাপন করা হতে পারে: ক) পরিত্রাণ পেতে endপ্লাস বিভিন্ন লাইন ব্রেক: রুপান্তর if ... puts ... endমধ্যে puts ... if ...খ) সব একটি ব্লক নিতে পারেন, এইভাবে x.map{}.all?সমানx.all?{}
হাওয়ার্ড

@ কত ধন্যবাদ, আমি যখন কম্পিউটারে আসি তখন আমি এই উন্নতি করব।
ডোরকনবব

উভয়কে অন্তর্ভুক্ত করার জন্য @ হাওয়ার্ড সম্পাদিত। ধন্যবাদ!
ডুরকনব

পরে স্থানটি সরিয়ে ফেলুন if
হাওয়ার্ড

আমি রুবি সমাধান, সংক্ষিপ্ত, সংক্ষিপ্ত এবং কম বা কম পাঠযোগ্য
ডাঃ জেরি

5

গণিত 93 93 93 82 76 73

f={}⋃Select[StringSplit@#~Subsets~{3}, FreeQ[Tally/@(Characters@#^T),2]&]&

যুক্তিটা

StringSplit@#~Subsets~{3}3-কার্ড সাবসেটের একটি তালিকা তৈরি করে। প্রতিটি ট্রিপল যেমন:

{D "ডি", "জি", "3", "এন"}, {"ডাব্লু", "জি", "3", "এস"}, {"ও", "জি", "3", "O" কে}}

অথবা

অ্যারে 1

তারপর স্থানান্তরিত হয়,

অ্যারে 2

এবং Tally/@(Characters@#^T)প্রতিটি সারিতে স্বতন্ত্র আইটেমের সংখ্যা দীর্ঘ করে দেয়।

{3,1,1,3}

3 "সমস্ত আলাদা" এর সাথে মিল; 1 "সমস্ত একই" সাথে মিলে যায়।

FreeQ[...,2]একই ধরণের 2 টি কার্ড বা ট্রিপলটিতে তা নির্ধারণ করে। 2 যদি টালিগুলির মধ্যে না হয় তবে গেম অফ সেট বিধি অনুসারে তিনটি কার্ড একটি "সেট"।


ব্যবহার

f["OR1N WP2N DG3N DR1D WG3S WG1N WR2D WP3N DR2O DR1D OG3O OR2D"]

D D "ডিজি 3 এন", "ডাব্লুজি 3 এস", "ওজি 3 ও"}, {"ওআর 1 এন", "ডাব্লুপি 2 এন", "ডিজি 3 এন"}, O "ডাব্লুপি 2 এন", "ডিআর 1 ডি", "ওজি 3 ও"}


সদৃশ অনুমতি দেওয়া হলে এটি আরও খাটো হতে পারে। f=Select[StringSplit@#~Subsets~{3},FreeQ[Tally/@Thread@Characters@#,2]&]&আউটপুট হবে{{"OR1N", "WP2N", "DG3N"}, {"WP2N","DR1D", "OG3O"}, {"WP2N", "DR1D", "OG3O"}, {"DG3N", "WG3S", "OG3O"}}
আলেফাল্ফ

"সমস্ত একই" বা "সমস্ত আলাদা" পরীক্ষা করার জন্য খুব চতুর উপায়!
ডেভিডসি

4

গণিত 73

f = Select[StringSplit@#~Subsets~{3}, FreeQ[Tally /@ Thread@Characters@#, 2] &] &

ব্যবহার

f["OR1N WP2N DG3N DR1D WG3S WG1N WR2D WP3N DR2O DR1D OG3O OR2D"]

OR "OR1N", "WP2N", "DG3N"}, {"WP2N", "DR1D", "OG3O"}, O "WP2N", "DR1D", "OG3O"}, D "DG3N", "WG3S "," OG3O "}


4

ব্র্যাচল্যাগ , 12 বাইট

ṇ₁⊇Ṫz{=|≠}ᵐz

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

ইনপুট ভেরিয়েবলের মাধ্যমে ইনপুট নেয় এবং আউটপুট ভেরিয়েবলের মাধ্যমে আউটপুট উত্পন্ন করে।

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

                The output variable is
  ⊇             a subsequence
   Ṫ            of length 3
ṇ₁              of the input split on spaces,
    z      z    the columns of which
     {   }ᵐ     are all
       |        either
      =         the same element repeated,
        ≠       or entirely free of duplicates.


3

গল্ফস্ক্রিপ্ট, 53 টি অক্ষর

" "/:w,,{:a,{:^,{a^]{w=}%.0\zip{.&,2=|}/!{.p}*;}/}/}/

এসটিডিআইএন-তে অবশ্যই ইনপুট সরবরাহ করতে হবে, উদাহরণস্বরূপ অনলাইনে :

> OR1N WP2N DG3N DR1D WG3S WG1N WR2D WP3N DR2O DR2D OG3O OR2D
["OR1N" "DG3N" "WP2N"]
["WP2N" "OG3O" "DR1D"]
["DG3N" "OG3O" "WG3S"]
["WR2D" "OR2D" "DR2D"]

মন্তব্য করা কোড:

" "/:w          # split the input at spaces and assign it to variable w
,,              # create the array [0..n-1] (n being the length of w)
{:a,{:^,{       # three nested loops: a=0..n-1, ^=0..a-1, _=0..b-1 
                # (third loop has no variable assigned but just pushes on stack)
    a^]         # make an array [a,^,_] of the three loop variables
    {w=}%       # take the corresponding list items, i.e. [w[a],w[^],w[_]]
    .0\         # push zero, add duplicate of the the array
    zip         # zip transposes the array, thus [OR1N WP2N DG3N] -> [OWD RPG 123 NNN]
    {           # loop over those entries
      .&        # unique
      ,2=       # length equals 2?
      |         # "or" with top of stack (two zero pushed before)
    }/          # end of loop, on stack remains the results of the "or"s
    !{.p}*      # if no length of 2 is there, make a copy of the set and print it
    ;           # discard stack item
}/}/}/          # closing the three nested loops

2
আমি একটি কোড-গল্ফের জন্য একটি পরিষ্কার বিজয়ী বলতে চাই। নিখুঁতভাবে অপঠনযোগ্য ..
ডাঃ জেরি

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

0\zip{.&,2=|}/!সংক্ষিপ্ত করা যেতে পারেzip{.&,}%2&!
পিটার টেলর

1

জাভাস্ক্রিপ্ট 323 313

function a(b){d=h=[];c=e=f=0;for(i in b){for(j in b){for(k in b[i]){if(b[i][k]==b[j][k]){if(c+f<4)c++;else if(c==4){h+=b[j];if(h.length=3)return h}}else{for(l in d){for(m in d[l]){g=f;if(d[l][2]==i){if(d[l][3]==k)if(b[j][k]!=d[l][0]&&b[j][k]!=d[l][1])f++;}else{continue}}if(g==f)d[e++]=[b[i][k],b[j][k],j,k]}}}}}}

এটি এমন একটি ফাংশন যা বস্তুর অ্যারে নেয় এবং বস্তুর একটি অ্যারে প্রদান করে।

ডেমো ভাজা (পরিপাটি করে)


আপনাকে ভেরিয়েবলগুলি ঘোষণা করতে হবে না ...
ডুরকনব

@ ডুরকনব আমি এটি ফিরিয়ে নিই, আপনি ঠিক বলেছেন। সম্পাদনা করা হয়েছে। ধন্যবাদ!
ম্যাথ চিলার

1

এপিএল (আইবিএম), 76

⍉¨x/⍨{{⍵≡1⌽⍵}⍵=1⌽⍵}¨x←⊃¨(∘.,/3⍴⊂⍪¨(' '≠y)⊂y←⍞)⌷⍨¨z/⍨∧/¨2</¨z←,⍳3⍴12

আমার কাছে আইবিএম এপিএল নেই, তবে আমি বিশ্বাস করি এটি কার্যকর হবে।

নমুনা রান (ডায়ালগ এপিএলে এমবিলেট আইবিএম এপিএল)

OR1N WP2N DG3N DR1D WG3S WG1N WR2D WP3N DR2O DR1D OG3O OR2D
 OR1N  WP2N  WP2N  DG3N 
 WP2N  DR1D  DR1D  WG3S 
 DG3N  OG3O  OG3O  OG3O 

আমি প্রথমবার এপিএল কোডটি দেখি ধন্যবাদ!
ডাঃ জেরি

1

Ageষি, 71

যদি Cস্ট্রিং হয়, বলুন "OR1N WP2N DG3N DR1D WG3S WG1N WR2D WP3N DR2O DR1D OG3O OR2D", এক্সিকিউট করুন

[c for c in Subsets(C.split(),3)if{1,3}>={len(set(x))for x in zip(*c)}]

পেতে [{'DR1D', 'OG3O', 'WP2N'}, {'DR2D', 'WR2D', 'OR2D'}, {'WG3S', 'OG3O', 'DG3N'}, {'DG3N', 'WP2N', 'OR1N'}]

এবং সেটটি একটি প্রজেক্টিভ লাইন এমন ব্যাখ্যার সাহায্যে এখানে একটি খুব আলাদা পদ্ধতি রয়েছে GF(3)^4:

[c for c in Subsets(C.split(),3)if sum(matrix(3,map('WODRPG123N'.find,''.join(c))))%3==0]

আমি কিছুটা বিরক্ত Dছিলাম যা দুবার ব্যবহার করা হয়েছিল ... যতক্ষণ না বুঝেছি কীভাবে এটি অপব্যবহার করতে হয়। তবে আরও ভাল, আমিও findপদ্ধতিটি অপব্যবহার করি। str.findকোনও চিঠি পাওয়া না গেলে -1 প্রদান যেহেতু -1 = 2 mod 3, চিঠিটি Sযথাযথভাবে পরিচালনা করা হয়েছে কারণ এটি ঘটে না 'WODRPG123N'


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