আসুন রুমিকুব খেলি!


11

দ্রষ্টব্য: এটি গেমের রুম্মিকুব-এর পরিবর্তনের সাথে সম্পর্কিত


পটভূমি এবং বিধিগুলি

Rummikub একটি টাইল ভিত্তিক খেলা is চারটি রঙ রয়েছে: লাল, কমলা, নীল এবং কালো। প্রতিটি রঙের জন্য 13 টি টাইল রয়েছে (1 থেকে 13 পর্যন্ত লেবেলযুক্ত) এবং সেখানে 2 জন জোকার রয়েছে যা রঙ-স্বতন্ত্র, সুতরাং এখানে মোট 54 টি টুকরা রয়েছে। রুম্মিকুবের এই প্রকরণে, প্রতিটি খেলোয়াড় 14 টি টাইল পেয়ে থাকে এবং আরও একটি টাইল পেতে হবে এবং প্রতিটি রাউন্ডে অন্য একটি ড্রপ করতে হবে, যেমন টাইলের গণনা স্থির থাকে। খেলোয়াড়রা একে অপরের টাইলস দেখতে পায় না। লক্ষ্যটি হ'ল টাইলগুলি গ্রুপ করা, যেমন সমস্ত টুকরো অন্তত একটি গ্রুপের অন্তর্ভুক্ত (নীচে দেখুন)। যখন কোনও খেলোয়াড়ের সমস্ত টুকরা গোষ্ঠীভূত হয়, তারা তাদের টাইল বোর্ডটি ফেলে দেয় এবং তাদের টুকরোগুলি প্রকাশ করে। অন্যরা তখন যাবতীয় সংযুক্তিগুলি বৈধ কিনা তা পরীক্ষা করে দেখুন এবং যদি তা হয় তবে প্লেয়ারটি রাউন্ডটি জিততে পারে।

টাইলগুলি কীভাবে গ্রুপ করা যায়?

দুটি ধরণের গ্রুপ রয়েছে:

  • বহু রঙের গ্রুপ:

    • এগুলিতে 3 বা 4 টাইল থাকে।
    • তারা কেবল তাদের উপর একই সংখ্যা সহ টাইলস ধারণ করে।
    • সমস্ত টাইলস বিভিন্ন রঙের।
    • উদাহরণ: RED 9, BLUE 9, BLACK 9
  • মনো-রঙের গ্রুপগুলি:

    • এগুলিতে কমপক্ষে 3 টি টাইল থাকে।
    • এগুলিতে 13 টির বেশি টাইল থাকতে পারে না।
    • এগুলিতে কেবল আরোহী ক্রমে বিভিন্ন, টানা সংখ্যার টাইল থাকে।
    • সমস্ত টাইল একই রঙ আছে।
    • টাইলস লেবেলযুক্ত টাইলস লেবেলযুক্ত টাইলগুলির পরে জায়গা 1 নাও থাকতে পারে 13
    • উদাহরণ: RED 5, RED 6, RED 7

অপেক্ষা করুন, জোকাররা কী করে?

জোকাররা গেমের যেকোন অংশকে প্রতিস্থাপন করতে পারে। উদাহরণস্বরূপ, আমাদের প্রথম উদাহরণটি হয়ে উঠতে পারে JOKER, BLUE 9, BLACK 9, RED 9, JOKER, BLACK 9বা RED 9, BLUE 9, JOKER। আমাদের অন্যান্য উদাহরণেও এটি একই প্রযোজ্য। তবে, কেউ একই গ্রুপে দু'জন জোকার স্থাপন করতে পারে না , সুতরাং এই জাতীয় জিনিস JOKER, ORANGE 8, JOKERনিষিদ্ধ।


কার্য

রুম্মিকুব টাইল গ্রুপ দেওয়া, এটি বৈধ কিনা তা নির্ধারণ করুন। আপনি গ্যারান্টিযুক্ত যে 2 জন জোকার এবং আপনি যে টাইলগুলি ইনপুট হিসাবে পাবেন তা ব্যতীত কোনও নকল টাইলস উপস্থিত 60হবে না (যেমন। পছন্দ মতো জিনিস প্রদর্শিত হবে না)।

ইনপুট আউটপুট

আপনি ইনপুট নিতে পারেন এবং কোনও মানক পদ্ধতি দ্বারা আউটপুট সরবরাহ করতে পারেন।

কিছু বৈধ ইনপুট ফর্ম্যাট: স্ট্রিংগুলির তালিকা, টিপলগুলির তালিকা, নেস্টেড তালিকাগুলি, স্ট্রিংগুলি বা অন্য যে কোনও কিছুকে আপনার উপযুক্ত মনে হয়। রঙগুলি স্ট্রিং (যেমন "Blue","Red", etc.:) হিসাবে স্ট্রিং সংক্ষেপণ হিসাবে গ্রহণ করা যেতে পারে (দয়া করে নীল এবং কালো টাইলগুলি পৃথকযোগ্য করুন), বা কোনও রঙের সাথে পূর্ণসংখ্যার হিসাবে পূর্ণসংখ্যার হিসাবে নেওয়া যেতে পারে। যখন জোকারদের কথা আসে, আপনার প্রোগ্রামটি কীভাবে ইনপুট হিসাবে তাদের গ্রহণ করবে তা উল্লেখ করা উচিত। আপনি যদি স্ট্রিংগুলি চয়ন করেন RED 9, JOKER, ...তবে আপনার মতো কিছু থাকতে পারে, আপনি যদি টিপলগুলি চয়ন করেন তবে আপনার কাছে (9,"RED"), ("JOKER")কিছু সমতুল্য থাকতে পারে। যদি এটি সহায়তা করে তবে আপনি সেই জোকারের জন্য রঙ পেতে পারেন (যা আপনার প্রোগ্রামের আউটপুটকে প্রভাবিত করবে না)। উদাহরণস্বরূপ, আপনার থাকতে পারে ("JOKER","RED")বা ("JOKER","BLUE"), তবে এটি কোনওভাবেই আউটপুটকে প্রভাবিত করে না।

আউটপুট সম্পর্কিত, কোনও জন্য মানক বিধি প্রযোজ্য।

কাজের উদাহরণ

আসুন একটি উদাহরণ নিই, আশা করি এটি বুঝতে সহজতর হবে। নিম্নলিখিত হিসাবে একটি গ্রুপ দেওয়া, যেখানে প্রতিটি tuple একটি টাইল প্রতিনিধিত্ব করে:

[(9, "লাল"), (9, "কমলা"), ("জোকার"), (9, "কালো")]

এটি সত্যবাদী মানটি ফিরিয়ে আনবে, কারণ ইনপুটটি বৈধ। এই ক্ষেত্রে, জোকার প্রতিস্থাপিত হয় (9, "BLUE")এবং তারা একটি বহু রঙের গ্রুপ গঠন করে।

আপনি নিম্নলিখিত গ্রুপ দেওয়া হবে:

[(9, "ব্লু"), (9, "কমলা"), (9, "লাল"), (9, "কালো"), ("জোকার")]

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

অতিরিক্ত পরীক্ষার কেস

এগুলি একটি বর্ধিত পরীক্ষার স্যুটের জন্য যা প্রায় সমস্ত সম্ভাব্য অবস্থাকে কভার করে:

ইনপুট -> আউটপুট 

[(1, "ব্লু"), (2, "ব্লু"), (3, "ব্লু"), (4, "ব্লু"), (5, "ব্লু"), (6, "ব্লু")] - > সত্যবাদী

[(6, "ব্লু"), (6, "লাল"), (6, "কালো)] -> সত্য

[(5, "black"), (6, "black"), (7, "black"), (8, "black"), (9, "black"), (10, "black"), ( "জোকার"), (12, "কালো")] -> সত্য 

[("জোকার"), (3, "ব্লু"), (3, "লাল")] -> সত্য

[(8, "কালো"), (2, "লাল"), (13, "ব্লু")] -> মিথ্যা

[(4, "লাল"), (3, "লাল"), (5, "লাল")] - মিথ্যা

[(5, "কালো"), (6, "কালো)] -> মিথ্যা

[("জোকার"), (5, "লাল"), ("জোকার")] -> মিথ্যা

[(4, "লাল"), (5, "লাল"), (6, নীল ")] - মিথ্যা

[(4, "লাল"), ("জোকার"), (5, "লাল")] -> মিথ্যা

[(12, "কালো"), (13, "কালো), (1," কালো ")] -> মিথ্যা

এটি , তাই প্রতিটি ভাষার বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী!



চুরি করা রুমিকাকুবের সেরা অংশ। এমনকি এটি ছাড়া এটি মজাদার চ্যালেঞ্জের মতো দেখাচ্ছে।
জোশিয়ার

[] একটি বৈধ ইনপুট কি?
ভি। কুর্তোইস

@ V.Courtois অবশ্যই
মিস্টার এক্সকোডার

1
@ ভি.কোর্তোইস একই গ্রুপে দু'জন জোকার স্থাপন করতে পারে না , সুতরাং 2 জন জোকার যুক্ত দুটি ইনপুট মিথ্যা বলে মনে হয়।
মিঃ এক্সকোডার

উত্তর:


6

এপিএল (ডায়ালগ) , 58 বাইট

ডান আর্গুমেন্ট হিসাবে রঙের তালিকা (1-4) এবং বাম আর্গুমেন্ট হিসাবে সংখ্যার তালিকা নেয়। জোকারের সংখ্যাটি চিহ্নিত করা হয় (⍳4)যা এটি (1 2 3 4)যে কোনও একটি হতে পারে তা বোঝাতে সমান is তেমনি, এর রঙটি বোঝানো (⍳13)হয় যে এটি 1 থেকে 13 এর মধ্যে যে কোনও সংখ্যক হতে পারে indicate

{(3≤≢⍺)∧((s⍵)∧⍺≡∪⍺)∨((s←{1∊≢∘∪¨⊃,¨/⍵})⍺)∧∨/∊(⊃,¨/⍵)⍷¨⊂⍳13}

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

অ্যালগরিদম

তিনটি শর্ত রয়েছে, যার মধ্যে শেষ দুটিতে দুটিতে দুটি শর্ত রয়েছে:

  1. রানটির দৈর্ঘ্য 3 এর চেয়ে বড় বা সমান হতে হবে

এবং যেভাবেই

    1. একটি একক সংখ্যা এবং

    2. অনন্য রঙ

অথবা

    1. একটি একক রঙ এবং
    2. অনুক্রমিক সংখ্যা

রানটি বৈধ হওয়ার জন্য।

অর্ডার পঠন

3≤3 ≢⍺টাইলসের সংখ্যার চেয়ে কম বা সমান

এবং

   s⍵ সমস্ত সংখ্যা একই

   এবং

   ⍺≡∪⍺ রং অনন্য

অথবা

   1∊1 ≢∘∪¨অনন্য ⊃,¨/প্রসারিত  রঙের সংখ্যার মধ্যে

   এবং

   ∨/সমস্ত ⊃,¨/⍵বর্ধিত সংখ্যার মধ্যে কমপক্ষে একটি উপস্থিত রয়েছে ⍷¨⊂যার একটি রান রয়েছে যা ⍳131 থেকে 13 এর মধ্যে পাওয়া যায়

সম্পূর্ণ কোড ব্যাখ্যা

{} বেনামে ফাংশন যেখানে বাম আর্গুমেন্ট এবং ডান আর্গুমেন্ট

3.2।

⍳13 13 থেকে 13 নম্বর

()⍷¨নিম্নলিখিত রানগুলির প্রত্যেকটির শুরুর অবস্থানগুলি সন্ধান করুন:

  ,¨/⍵ সংখ্যার প্রতিটি উপাদান যোগ দিন (প্রতিটি জোকার মান জন্য একটি রান তৈরি)

   প্রকাশ (কারণ /পদ হ্রাস)

  ε nlist (চেপ্টা)

∨/ বা হ্রাস (ie কোন সত্য?)

()∧ এবং:

3.1

  ()⍺ রঙের তালিকায় নিম্নলিখিত ফাংশনটি প্রয়োগের ফলাফল:

   s←{... }গণ (জন্য গুলি নিম্নলিখিত বেনামী ফাংশন যা আমে) ( হয় তার যুক্তি):

    ,¨/⍵ প্রতিটি উপাদান জুড়ে যোগ দিন (প্রতিটি জোকার মানের জন্য একটি রান তৈরি করে)

     প্রকাশ (কারণ /পদ হ্রাস)

    ≢∘∪¨ প্রতিটি তালিকার অনন্য উপাদানের সংখ্যা

    1∊ একজন কি সদস্য? (অর্থাত্ এখানে কোনও অল-লিস্টের তালিকা রয়েছে?)

()∨বা:

2.2।

  ∪⍺ অনন্য রঙ

  ⍺≡ রঙগুলির সাথে অভিন্ন (যেমন তারা অনন্য)

  ()∧ এবং:

2.1।

   s⍵ সংখ্যা সব একই

  ()∧এবং

1।

   ≢⍺ রঙের সংখ্যা (যেমন টাইলসের সংখ্যা)

   3≤ তিনটি এর চেয়ে কম বা সমান


1
বাহ, দেখে মনে হচ্ছে এপিএল এই চ্যালেঞ্জের দুর্দান্ত সরঞ্জাম
মিঃ এক্সকডার

3

জেলি , 41 40 38 36 বাইট

EȧI=1ȦȯE
0,W€yµZç/ɓQ⁼⁸ȧ
L>2ȧ4p13ðç€Ṁ

এটি অনলাইন চেষ্টা করুন! (একটি পরীক্ষা-স্যুট ফুটার সাথে আসে)

(color, value)নিয়মিত টাইলস এবং 0জোকারদের জন্য একটি অ্যারের হিসাবে ইনপুট নেয় । রংগুলি পূর্ণসংখ্যা হিসাবে উপস্থাপন করা হয় (যদিও আমি নিশ্চিত নই যে এটি বর্তমান কোডের জন্যও গুরুত্বপূর্ণ কিনা)।

ফলাফল 1(সত্যবাদী) বা 0(মিথ্যা)

ব্যাখ্যা

L>2ȧ4p13ðç€Ṁ    Main link, checks if a sequence is valid. Args: sequence
L                 Get the length of the sequence.
 >2               Check if it's at least 3 tiles.
   ȧ4             And: yield 4 if it is, 0 otherwise.
     p13          Cartesian product: yield all possible tiles if
                  result was 4, empty array otherwise.
        ð         Begin a new dyadic chain with args (tiles, sequence).
         ç€       Call the first helper link for each tile with args (tile, sequence).

0,W€yµZç/ɓQ⁼⁸ȧ    First helper link, checks if a sequence is valid if jokers
                  are substituted for the given tile. Args: tile, sequence
0,                  Make a pair [0, tile].
  W€                Turn that into [[0], [tile]].
    y               Map all 0's (jokers) into tile in the sequence.
     µ              Begin a new monadic chain with args (sequence).
      Z             Transpose to get list [colors, values].
       ç/           Call the second helper link with args (colors, values).
         ɓ          Begin a new dyadic chain with args (sequence, valid).
          Q         Remove duplicate tiles from the sequence.
           ⁼⁸       Check if the sequence is unchanged (i.e. there were no duplicates).
             ȧ      And with the output of the second helper.

EȧI=1ȦȯE    Second helper link, checks if a sequence is valid assuming no duplicates.
            Args: colors, values
E             Check if all the colors are the same.
 ȧ            Logical and with the values array.
              Yields the values if they were, 0 if not.
  I           Find the differences between each value.
              Yields [] if the colors differed.
   =1         See if each difference is equal to 1.
              Yields [] if the colors differed.
     Ȧ        Check if the list was nonempty and all values were truthy.
              Yields 1 for valid mono-colors, 0 otherwise.
      ȯ       Logical or with the values array.
              Yields 1 for valid mono-colors, the values otherwise.
       E      Check if all the values are the same. For valid mono-colors
              this tests if all items of [1] are equal (obviously true).
              Yields 1 for valid sequences, 0 otherwise.

আমি মনে করি আপনাকে একটি ধারাবাহিক সত্য / মিথ্যা আউটপুট করতে হবে।
অ্যাডম

@ অ্যাডম সম্পাদিত, ভাগ্যক্রমে বাইট গণনা প্রভাবিত করে না।
পুরক্কা কুডারী

2

পাইথন 2 , 371 370 362 341 329 325 বাইট

  • @ মিস্টার এক্সকোডার 1 বাইট সংরক্ষণ করেছেন: str.split()পরিবর্তেlist literal
  • 8 টি বাইট সংরক্ষণ করা হয়েছে: শর্টহ্যান্ডের জন্য len(x)-1
  • 19 বাইট সংরক্ষণ করা হয়েছে: আক্ষরিক J O BK B Rজন্যJoker, Orange, Black, Blue, Red
  • @ মিঃ এক্সকোডার আরও 12 টি বাইট সংরক্ষণ করেছেন, ধন্যবাদ !!
  • @ মিস্টার এক্সকোডারকে আরও 4 টি বাইট ধন্যবাদ
def f(x):
 j=sum("J"in i for i in x);z=len(x)-1
 if j>1or z<2:return False
 if j<1:return(all(i[0]==x[0][0]for i in x)and sum(i[1]==x[0][1]for i in x)<2)or(all(i[1]==x[0][1]for i in x)and sum(int(x[m+1][0])==int(x[m][0])+1for m in range(z))==z)
 return any(f([[k,(i+1,j)]["J"in k]for k in x])for j in'RBbO'for i in range(13))

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




1
এটি আসলে আমার চেয়ে অনেক বেশি বাইট সংরক্ষণ করে: 329
মিঃ এক্সকোডার

1
325 বাইটখুব দেরিতে উন্নতির জন্য দুঃখিত ।
মিঃ এক্সকোডার

1

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

var testcases = [[{n:1,c:"BLUE"},{n:2,c:"BLUE"},{n:3,c:"BLUE"},{n:4,c:"BLUE"},{n:5,c:"BLUE"}, {n:6,c:"BLUE"}],[{n:6,c:"BLUE"},{n:6,c:"RED"},{n:6,c:"BLACK"}],[{n:5,c:"BLACK"},{n:6,c:"BLACK"},{n:7,c:"BLACK"},{n:8,c:"BLACK"},{n:9,c:"BLACK"},{n:10,c:"BLACK"},{n:0,c:"JOKER"},{n:12,c:"BLACK"}],[{n:0,c:"JOKER"},{n:3,c:"BLUE"},{n:3,c:"RED"}],[{n:8,c:"BLACK"},{n:2,c:"RED"},{n:13,c:"BLUE"}],[{n:4,c:"RED"}, {n:3,c:"RED"}, {n:5,c:"RED"}],[{n:5,c:"BLACK"}, {n:6,c:"BLACK"}],[{n:0,c:"JOKER"},{n:5,c:"RED"},{n:0,c:"JOKER"}],[{n:4,c:"RED"},{n:5,c:"RED"},{n:6,c:"BLUE"}],[{n:4,c:"RED"},{n:0,c:"JOKER"},{n:5,c:"RED"}],[{n:12,c:"BLACK"},{n:13,c:"BLACK"},{n:1,c:"BLACK"}],[{n:11,c:"BLACK"},{n:12,c:"BLACK"},{n:0,c:"JOKER"}],[{n:1,c:"BLACK"},{n:2,c:"BLACK"},{n:3,c:"BLACK"},{n:1,c:"BLUE"},{n:2,c:"BLUE"},{n:3,c:"BLUE"}]];

g=a=>a.length
j=a=>a.n==0
l=(x,y)=>x.c==y.c||j(x)||j(y)
a=s=>g(s)>2&&([q=[0],x=s[0],s.map(y=>q[0]+=x==y||((l(x,y)||x.n==y.n)&&!(j(x)&&j(y)))&&(([n=s.indexOf(y),n<1||([x=s[n-1],!l(x,y)||y.n>0&&x.n<y.n])[1]||(n<g(s)-1&&x.n+1<s[n+1].n)||(n==g(s)-1&&y.n==0&&x.n<13)])[1])?1:0)])[0][0]==g(s)

testcases.forEach(H=>console.log(a(H)));

(দ্রষ্টব্য যে উপরের পরীক্ষার কেসগুলিতে 2 টি অতিরিক্ত টেস্ট কেস রয়েছে যা প্রশ্নে নেই: এগুলি যথাক্রমে সত্য এবং মিথ্যা: পাঠযোগ্যতার জন্য বর্ণা .্য সংস্করণ দেখুন)।

রুক্ষ প্রক্রিয়া:

 Using first tile x:
   For each tile y:
     count for x: can group with y
 return: x matches n tiles, where n is the number of tiles

জোকারগুলিকে 0তাদের সংখ্যাসূচক মান হিসাবে চিহ্নিত করা হয় (aণাত্মক সংখ্যাটিও কাজ করবে); এটি ইনপুট স্ট্রাক্টকে সামঞ্জস্য রাখে (একটি রঙ এবং মান উভয়ই থাকে) এবং c=="JOKER"7 বাইট সংরক্ষণ করে কিনা তা পরীক্ষা করে দেখার উপর নির্ভর করে না ।

এটি সম্ভব যে কিছু বন্ধনী সরিয়ে ফেলা যায়, qঅ্যারে হিসাবে বাক্স না পাওয়া সম্ভব (আমি এটি চেষ্টা করেছি এবং মানটি হয় 0 বা তীব্র অনুনাসের কারণে হয়ে গেছে )।

Ungolfed:

var testcases = [
[{n:1,c:"BLUE"},{n:2,c:"BLUE"},{n:3,c:"BLUE"},{n:4,c:"BLUE"},{n:5,c:"BLUE"}, {n:6,c:"BLUE"}],//true
[{n:6,c:"BLUE"},{n:6,c:"RED"},{n:6,c:"BLACK"}],//true
[{n:5,c:"BLACK"},{n:6,c:"BLACK"},{n:7,c:"BLACK"},{n:8,c:"BLACK"},{n:9,c:"BLACK"},{n:10,c:"BLACK"},{n:0,c:"JOKER"},{n:12,c:"BLACK"}],//true
[{n:0,c:"JOKER"},{n:3,c:"BLUE"},{n:3,c:"RED"}],//true
[{n:8,c:"BLACK"},{n:2,c:"RED"},{n:13,c:"BLUE"}],//false
[{n:4,c:"RED"}, {n:3,c:"RED"}, {n:5,c:"RED"}],//false
[{n:5,c:"BLACK"}, {n:6,c:"BLACK"}],//false
[{n:0,c:"JOKER"},{n:5,c:"RED"},{n:0,c:"JOKER"}],//false
[{n:4,c:"RED"},{n:5,c:"RED"},{n:6,c:"BLUE"}],//false
[{n:4,c:"RED"},{n:0,c:"JOKER"},{n:5,c:"RED"}],//false
[{n:12,c:"BLACK"},{n:13,c:"BLACK"},{n:1,c:"BLACK"}],//false
[{n:11,c:"BLACK"},{n:12,c:"BLACK"},{n:0,c:"JOKER"}],//true
[{n:1,c:"BLACK"},{n:2,c:"BLACK"},{n:3,c:"BLACK"},{n:1,c:"BLUE"},{n:2,c:"BLUE"},{n:3,c:"BLUE"}]
];

g=a=>a.length
i=(a,v)=>a.indexOf(v)
j=x=>x.n==0
m=(x,y)=>
       (l(x,y)||x.n==y.n)
    &&!(j(x)&&j(y))
l=(x,y)=>x.c==y.c||j(x)||j(y)
c=(a,v)=>([n=i(a,v),
      n<1
    ||([x=a[n-1],!l(x,v)||v.n>0&&x.n<v.n])[1]
    ||(n<g(a)-1&&x.n+1<a[n+1].n)
    ||(n==g(a)-1&&v.n==0&&x.n<13)])[1]
a=s=>g(s)>2&&([q=[0],x=s[0],s.map(y=>q[0]+=x==y||m(x,y)&&c(s,y)?1:0)])[0][0]==g(s)

testcases.forEach(H=>console.log(a(H)));

যুক্তিটি সঠিক হওয়ার জন্য সংস্করণে আমি কাজ করেছি। একক-ব্যবহার লাম্বদাস ইন-রেখাযুক্ত হয়েছে; এখানে তাদের সম্পর্কিত ফাংশন:

g() -> string.length
i() -> indexof
j() -> isJoker
m() -> do tiles match
l() -> do colors match
c() -> same-color isConsecutiveOrder
a() -> main lambda

1

সি # (.নেট কোর) , 198 বাইট

using System.Linq;(C,N)=>{int l=C.Length,j=C.Count(x=>x<1),c=C.Distinct().Count(),n=N.Distinct().Count(),u=N.Min();foreach(var x in N)u*=0<(u&x)?2:0;return l>2&((u>0&n==l&c<2+j)|(n<2+j&c==l&l<5));};

সংখ্যার পৃথক তালিকা হিসাবে তাদের উপর টাইল এবং সংখ্যার রঙ নেয় akes যতক্ষণ না প্রতিটি রঙের আলাদা আলাদা পূর্ণসংখ্যা থাকে এবং জোকারগুলি 0 হিসাবে প্রতিনিধিত্ব করা হয় ততক্ষণ সেই ম্যাপিংয়ের সুনির্দিষ্ট বৈশিষ্ট্যগুলি বিবেচনা করে না।

সংখ্যা ইনপুট করার জন্য ফর্ম্যাটটি যদিও বেশ বিশেষ। যে সংখ্যার জন্য ইনপুট হওয়া দরকার সেই সংখ্যার nপরিবর্তে 2 ^ n, যখন জোকারকে উপস্থাপন করতে ব্যবহৃত নম্বরটি (2 ^ 14) -1 হওয়া উচিত। u&xযদি টাইল এক্স এর সমান মান আপনার কাছে থাকে বা জোকার হয় তবে এটি আপনার বিটওয়াস এবং আপনার মূল্যায়ন করতে সক্ষম করে ।

সি # (.নেট কোর) , 200 বাইট

using System.Linq;(C,N)=>{int l=C.Length,j=N.Count(x=>x<1),c=C.Distinct().Count(),n=N.Distinct().Count(),u=N.Min();foreach(var x in N)u=u==x|x<1?u+1:0;return l>2&((u>0&n==l&c<2+j)|(n<2+j&c==l&l<5));};

একটি 2 বাইট দীর্ঘ সমাধান যা ইনপুট সম্পর্কে সারগ্রাহী নয়। যে জায়গাগুলিতে তারা মোকাবেলা করতে শক্ত হয়েছিল, সেখানে জোকারদের জন্য কেবলমাত্র একটি বিশেষ কেস ব্যবহার করে দেখা যাচ্ছে, আমি যে চালাক বিটওয়াইজ অপারেশনটি নিয়ে গর্বিত হয়েছিল তার চেয়ে বেশি সময় ছিল না n't এখানে জোকারগুলি (0,0), অন্যান্য সংখ্যা প্রত্যাশার মতো, এবং রঙগুলি এমন কোনও 4 টি মানের প্রতিনিধিত্ব করে যা সি # এর ডিফল্ট তুলনা দ্বারা একে অপরের থেকে পৃথক (বিশেষত, লিনক Distinct()ক্রিয়াকলাপটিকে অবশ্যই 'স্বতন্ত্র নয়' হিসাবে একই রঙের মানগুলি বিবেচনা করতে হবে এবং পৃথক হিসাবে বিভিন্ন রঙের মানগুলি)।

অন্য ভাষার ব্যবহারে ব্যবহৃত হতে পারে u*=!u++^x*xএমন u=u==x|x<1?u+1:0কিছু কিছু ভাষার সমতুল্য হবে ; u ^ x 0 হয় if u == x, এবং কোনও int এর 0 গুণ 0 হয়, সুতরাং u ^ x * x এর জন্য 0 হবে u == x বা x == 0 যদি সি # বিটওয়াইজ অপারেশনগুলি নিম্নতর অগ্রাধিকার না করে তোলে গাণিতিক। সি # সুস্পষ্ট কাস্টিং ব্যতীত ইনসকে বুল হিসাবে ব্যাখ্যা করতে পারে না। একটি ল্যাঙ্গুয়েজ চেষ্টা কঠিন ধরনের কাজ মান রূপান্তর পারে করতে যে 0এবং not 0করতে falseএবং trueপ্রয়োগ করার আগে !যদিও তাদের, এবং তারপর যখন কোন int ফিরে যাচ্ছে ব্যাখ্যা !false1 এবং!true হিসাবে 0. যে সমস্ত বললেন, আমি অন্য ভাষায় নিশ্চয়তা দিতে পারে না আসলে would বাকি অ্যালগরিদম থেকে উপকার করুন যাতে এটি এমনকি নাও আসতে পারে।


1

স্কালা, 491 477 অক্ষর, 491 477 বাইট

এই চ্যালেঞ্জ মজা ছিল; ধন্যবাদ।

var c=Seq("O","B","b","R")
t match{case _ if t.length<3=>false
case _ if t.exists(x=>x._1==0)=>{var b=false
if(t.filter(q=>q._1!=0).exists(q=>q._1==0))b else{for(y<-1 to 13)for(u<-c)b=b|f(t.takeWhile(q=>q._1!=0)++:(y,u)+:t.reverse.takeWhile(q=>q._1!=0).reverse)
b}}
case _::(x,_)::_ if t.forall(_._1==x)=>true
case _ if t.forall(_._2==c(0))|t.forall(_._2==c(1))|t.forall(_._2==c(2))|t.forall(_._2==c(3))=>(t(0)._1 to t(0)._1+t.length-1).toList equals t.map(_._1)
case _=>false}

সুতরাং fলাইন 4 এ একটি পুনরাবৃত্ত কল রয়েছে যেখানে আমি অন্য জোড় টাইল দ্বারা "জোকার" প্রতিস্থাপন করার চেষ্টা করি। কোডটি পরিষ্কার করার জন্য টিও দেখুন । আমি ইনপুট হিসাবে 2 টি-টিপলস (ইন্ট, স্ট্রিং) এর ক্রম গ্রহণ করাকে বেছে নিয়েছি - tআমার কোডে ডাকা হয়েছে, দেখুন টিও দেখুন - সুতরাং "জোকার" 2-টিউপল (0, "জোকার") দ্বারা উপস্থাপন করা হয়।

সম্পাদনা করুন: 14 টি বাইটস মন্তব্যগুলির জন্য সংরক্ষিত ধন্যবাদ, আমি কমলা কালো ব্লু রেডের জন্য ওবি বি আর নিই।

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

সম্পাদনা করুন: -2 বাইট, মোছা বেহুদা (প্রায় অবস্থার case _ ifগুলি


আপনি কি বাইটস সংরক্ষণের O,B,b,Rপরিবর্তে ব্যবহার করতে পারবেন না ORANGE,BLUE,BLACK,RED? স্কালা কীভাবে কাজ করে তা আমার কোনও ধারণা নেই তবে আমি মনে করি আপনি এটি করতে পারেন।
মিঃ এক্সকোডার

আমি চেষ্টা করেছিলাম; প্রকৃতপক্ষে এটি এইভাবে করা বাইটগুলি সংরক্ষণ করে (স্ট্রিংগুলির একটি অংশ)। এটি var (O,B,b,R)=("ORANGE","BLACK","BLUE","RED")এবং কলগুলি হয় O B b R, মোট 49 বাইটের জন্য; যেখানে var c=Seq("ORANGE","BLACK","BLUE","RED")এবং কলগুলি মোট c(...)58 বাইট করে। তবে প্রথম কেসটি for(u<-c)স্থানে অনুমতি দেয় for(u<-Seq(O,B,b,R)), সুতরাং ব্যয় -9 নয়, তবে +2 হয়। চেষ্টা করার জন্য ধন্যবাদ।
ভি। কুর্তোয়া

@ ভি.কোর্তোইস আমি বিশ্বাস করি যে মিঃ এক্সকোডার var c=Seq("O","B","b","R")রঙের জন্য পুরো স্ট্রিংয়ের পরিবর্তে সেই অক্ষরগুলিকে আপনার ইনপুট হিসাবে ব্যবহার এবং গ্রহণ করার পরামর্শ দিচ্ছিলেন । মূল পোস্টে উল্লিখিত হিসাবে, "রঙগুলি ... স্ট্রিং সংক্ষেপণ হিসাবে নেওয়া যেতে পারে"।
কামিল দ্রাকারী

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