ডাবল / স্পটআইটি কার্ড জেনারেটর


15

ভূমিকা

ডাবল / স্পটআইটি একটি কার্ড গেম, যেখানে লোকজনকে স্বল্পতম সময়ে জোড় কার্ডের ক্ষেত্রে একই চিহ্নটি চিহ্নিত করতে হবে, এটি চিহ্নিত করতে হবে এবং পরবর্তী জোড়ায় যেতে হবে। প্রতিটি কার্ডে একাধিক চিহ্ন রয়েছে (সাধারণ সংস্করণে 8) তবে প্রতিটি জোড় কার্ডের মধ্যে এক একটি সাধারণ is

খেলার শারীরিক অনুলিপি থেকে উদাহরণ: জোড়া উদাহরণ সহ কার্ড

চ্যালেঞ্জ

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

এটি একটি কোড-গল্ফ, তাই কোডটি আরও খাটো, আরও ভাল।

এটিও দুর্দান্ত হবে যদি সর্বাধিক জটিল ক্ষেত্রে মহাবিশ্বের তাপ মৃত্যুর আগে গণনা শেষ হয়।

ইনপুট

স্ট্যান্ডিং / স্টিডিনের জন্য দুটি যুক্তি (আপনার পছন্দ)

  • তার মধ্যে প্রথমটি প্রতীক সংগ্রহ, 'ABCDE' বা ['A', 'B', 'C', 'D', 'E'] এর মতো কিছু - আপনার পছন্দ মতো ফর্ম্যাট, সেটিং, তালিকা, স্ট্রিম হোক , বা পছন্দের ভাষার জন্য যা কিছু মুখ্য নয় is [A-Za-z0-9] এর সেট থেকে অক্ষর দেওয়া হবে, কোনও সদৃশ হবে না (সুতরাং ইনপুট প্রতীক সেটটির সর্বাধিক আকার 62 হবে)) সেগুলি খুব সহজেই আদেশ করা হবে না ( যাতে আপনি "yX4i9A" পাশাপাশি 6-চিহ্নের ক্ষেত্রেও পেতে পারেন)।

  • দ্বিতীয় যুক্তি হ'ল পূর্ণসংখ্যা, একক কার্ডে চিহ্নগুলির পরিমাণ নির্দেশ করে। এটি প্রতীক সেট আকারের চেয়ে <= হবে।

আউটপুট

একাধিক লাইনগুলি নিউলাইন দ্বারা পৃথক করে মুদ্রণ করুন, তাদের প্রত্যেকটিতে একক কার্ডের জন্য চিহ্ন রয়েছে।

উদাহরণ

ABC
2
>>>>
AB
BC
AC

অথবা

ABCDEFG
3
>>>>
ABC
BDE
CEF
BFG
AEG
CDG
ADF

অথবা

ABCDE
4
>>>>
ABCD

সংকেতগুলি

  • উত্পাদিত কার্ডের সংখ্যা পৃথক চিহ্নের পরিমাণের চেয়ে বড় হতে পারে না এবং অনেকগুলি সংমিশ্রণে এটি যথেষ্ট কম হবে
  • আপনার যদি সমস্যাটির গণিতের দিকের সাহায্যের প্রয়োজন হয় তবে আপনি কিছু গণিতের পটভূমি পড়তে চাইতে পারেন

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



প্রস্তাবিত পরীক্ষার ক্ষেত্রে ('abcdefghijklmnopqrstu', 5)-> ['abcde', 'afghi', 'ajklm', 'anopq', 'arstu', 'bfjnr', 'bgkpt', 'bhlou', 'bimqs', 'cfkqu', 'cgjos', 'chmpr', 'cilnt', 'dfmot', 'dglqr', 'dhkns', 'dijpu', 'eflps', 'egmnu', 'ehjqt', 'eikor']বা অন্য কোনও 21-কার্ড ওয়ার্কিং-সলিউশন। (দ্রষ্টব্য যে এটি অর্ডার 4 এর সম্ভাব্য সসীম সমতল)।
জোনাথন অ্যালান

উত্তর:


5

পাইথন 2 , 192 162 বাইট

আমার একটি যুক্তি রয়েছে যে এটি প্রতিটি দৃশ্যের জন্য সর্বাধিক সেট কার্ড তৈরি করে এবং এটি 3 পরীক্ষার কেসগুলি পরিচালনা করে।

from itertools import*
def m(a,s):
    C=["".join(x)for x in combinations(a,s)]
    while len(C):
        print C[0]
        C=list(set(A for A in C if len(set(A)&set(C[0]))==1<s))

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

অ্যালগরিদম

একটি বর্ণমালা aএবং কার্ডের আকার দেওয়া হয়েছে s, এতে sউপাদানগুলির সমস্ত সংমিশ্রণ নিন aএবং এটিকে কল করুন C, তারপরে:

  • এর প্রথম উপাদানটি ধরুন C, কল করুনC0
  • সংরক্ষণ C0
  • সমান নয় Cএমন ইউনিয়ন থাকা সমস্ত উপাদান থেকে সরানC01
  • এর দ্বিতীয় উপাদানটির সাথে পুনরাবৃত্তি করুন C
  • Cখালি না হওয়া পর্যন্ত চালিয়ে যান

তারপরে সংরক্ষিত উপাদানগুলি মুদ্রণ করুন।

যুক্তি

এর কিছু খালি খালি সাবসেট Cহ'ল আমাদের সর্বাধিক সমাধান K,। যেহেতু এটা অন্তত একটি উপাদান রয়েছে এবং কোন দুটি উপাদান আলাদা করে চেনা হয়, একটি অবাধ উপাদান চয়ন করুন C0, এর Cমধ্যে হতে হবে K। এর যে কোনও উপাদানগুলির eজন্য K, eইউনিয়নের কার্ডিনালিটি ইন ইন x1 ; সুতরাং যার ইউনিয়নের কার্ডিনেলটিটি নেই তার সমস্ত উপাদানগুলি নির্মূল করুন the একই যুক্তি অনুসারে একটি নতুন স্বেচ্ছাচারী উপাদান বেছে নিন , এতে যুক্ত করুন এবং হ্রাস করুন । শেষ পর্যন্ত খালি সেট এবং এটি সর্বাধিক সমাধান হবে কারণ আমরা কোনও উপাদানই অন্য উপাদান থেকে পৃথক যে উপাদানটি বেছে নিই নি।x != eKCC0CKCCK


পরীক্ষার কেস

এই পরীক্ষার কেসগুলি আমি বুঝতে পেরেছিলাম যে মুদ্রণ একটি প্রয়োজনীয়তা ছিল আগে।

a=["a","b","c"]
b=2
c=3
d=m(a,b)
print d,len(d)==c
>> ['bc', 'ab', 'ac'] True

a=["a","b","c","d","e","f","g"]
b=3
c=7
d=m(a,b)
print d,len(d)==c
>> ['aef', 'abc', 'bde', 'ceg', 'adg', 'cdf', 'bfg'] True

a=["a","b","c","d","e"]
b=4
c=1
d=m(a,b)
print d,len(d)==c
>> ['abcd'] True

হালনাগাদ

  • +9 [16-12-07] মুদ্রণের প্রয়োজনীয়তা ফিট করুন
  • -11 [16-12-07] আমার Rপরিবর্তনশীলটি গল্ফ করেছে
  • -30 [16-12-09] আমার Kপরিবর্তনশীলটি গল্ফ করেছে , @ লিওকে ধন্যবাদ !

1
আপনার কি প্রতিটি পদক্ষেপে সি থেকে কে সেটটি বিয়োগ করা দরকার? আমি মনে করি আপনি যে ফিল্টারিং করবেন ( A for A in C if len(set(A)&set(C[0]))==1) তা ইতিমধ্যে নির্বাচিত উপাদানগুলি সরিয়ে ফেলবে, যদি না এস == 1 (এই ক্ষেত্রে লেন (সেট (সি [0]) এবং সেট (সি [0]) 1 হবে)। আপনি আপনার দ্বিতীয় থেকে শেষ লাইনে গল্ফ করতে পারেন:C=[A for A in C if len(set(A)&set(C[0]))==1<s]
লিও

আমি স্যান্ডবক্সে একটি ডাবল চ্যালেঞ্জ লিখছিলাম এবং ডম হেস্টিংস আমাকে এই প্রশ্নটির দিকে একটি সম্ভাব্য দ্বৈত হিসাবে চিহ্নিত করেছিলেন (যা এটি ভাল হতে পারে) তবে একটি জিনিস আমি লক্ষ্য করেছি যে এন * এন এর পূর্ণ ডাবল ডেক তৈরি করা অনেক কঠিন is + এন + 1 কার্ড (এবং চিহ্নগুলি) প্রতি কার্ডে এন + 1 চিহ্ন সহ এন-প্রাইম-প্রাইম-পাওয়ার being এন = 4 = 2 ^ 2 এর জন্য এটি 4 * 4 + 4 + 1 = 21 চিহ্ন এবং একই সংখ্যক কার্ড ব্যবহার করে একটি ডেক হবে; তবে এই সমাধানটি কেবলমাত্র 13 টি কার্ডের একটি ডেক তৈরি করে - 21 এখনও সম্ভব
জোনাথন অ্যালান

@ জোনাথান অ্যালান সবেমাত্র একটি টিআইও লিঙ্ক যুক্ত করেছেন। আমি 21 টি অক্ষরের বর্ণমালা এবং কার্ড প্রতি 5 টি অক্ষর সহ ফাংশনটি চালিয়েছি। এটি 21 কার্ড আউটপুট দেয়। আমি যদি ভুল বুঝতে না পারি তবে এটি সঠিক বলে আমি মনে করি।
ননলাইনারফ্রুট

হুঁ, দুঃখিত, আমি অবশ্যই স্থানীয়ভাবে এটি চালানোর পরে কিছু ভুল করেছিলাম! ( এটি অর্ডার অফ ফুল ডবল ডেক ৪। :) )
জোনাথন অ্যালান

2

হাস্কেল, 175 156 বাইট

আমার প্রথম গল্ফিংয়ের সময় নেওয়া, আমি কিছু গণ্ডগোল করেছি কিনা তা আমাকে জানান।

import Data.List
f 0_=[[]]
f n a=g$c n a
c n a=[a!!i:x|i<-[0..(length a)-1],x<-f(n-1)(drop(i+1)a)]
g[]=[]
g(x:t)=x:g(filter(\z->length(z`intersect`x)<= 1)t)

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

উন্নতি এবং -১৯ বাইটের জন্য @ পল মুটসারকে ধন্যবাদ


মূল সংস্করণ


1
পিপিসিজিতে আপনাকে স্বাগতম! নোট করুন যে আমদানিগুলি আপনার স্কোরের দিকে গণনা করে। সম্ভাব্য উন্নতি: আমদানি সহ 156 বাইট
পল মুটসার

মাথা আপ জন্য ধন্যবাদ, তারা নিশ্চিত কিনা আমি নিশ্চিত ছিল না!
বাগ

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