টেট্রিস ট্যাংগ্রামস


13

ভূমিকা

টেংগ্রামগুলি একটি ক্লাসিক ধাঁধা যা বিভিন্ন আকারে ব্লকগুলি সাজানোর / ফিটিং জড়িত। চীনা 七巧板 থেকে - আক্ষরিক অর্থ "দক্ষতার সাত বোর্ড" " আসুন এই ধারণাটি নেওয়া যাক এবং গ্রিড পূরণের জন্য সাতটি টেট্রোমিনোস টুকরা ব্যবহার করুন ।

চ্যালেঞ্জ

কোনও ফাংশন বা প্রোগ্রাম লিখুন যা গ্রিড স্থানাঙ্কগুলির একটি অ্যারে ইনপুট হিসাবে নেয় এবং নির্দিষ্ট স্থানাঙ্ক ছাড়া টেট্রিস টুকরা দ্বারা পূর্ণ 10 বাই 20 গ্রিড আউটপুট দেয়।

টুকরা বিতরণ একরকম রাখার চেষ্টা করে আপনার স্কোরটি অপ্টিমাইজ করুন।

নির্ণায়ক

আপনার কাজটি সম্পাদনের জন্য স্থানাঙ্কের এই পেস্টবিনটি ব্যবহার করুন । পাঁচটি স্থানাঙ্ক রয়েছে। স্থানাঙ্কগুলি যে বিন্যাসে লিখিত আছে তা সংশোধন করতে দ্বিধা বোধ করবেন তবে মানগুলি নয়।

ডেটা সেট # 2 সমাধান করা যায় না - এক্ষেত্রে কেবল পূরণ করা ইনপুট সেলগুলি দিয়ে গ্রিড আউটপুট করুন (যেমন, Xগর্তগুলি যেখানে রয়েছে)।

ইনপুট

গ্রিডের স্থানাঙ্কগুলি গ্রিডে 'গর্ত' উপস্থাপন করে। এগুলি এমন কোষ যা কোনও টেট্রোমিনোর কোনও অংশই ধারণ করতে পারে না।

গ্রিড স্থানাঙ্ক:

(0,0), (1,0), (2,0), ... (9,0)
(0,1), (1,1), (2,1), ... (9,1)
.
.
.
(0,19), (1,19), (2,19), ... (9,19)
  • স্থানাঙ্কগুলি ইনপুট করতে আপনার প্রোগ্রামিং ভাষার পছন্দের অ্যারে স্টাইলটি ব্যবহার করুন।

  • গ্রিডের কোনও Xবা অন্য মুদ্রণযোগ্য এএসসিআইআই সহ গর্তগুলির প্রতিনিধিত্ব করুন ।

আউটপুট

20 কোষ দ্বারা লম্বা 10 টি কোষের একটি স্ট্যান্ডার্ড টেট্রিস গ্রিড আকার ব্যবহার করে, কোনও গ্রিড সম্পূর্ণ এবং নিখুঁতভাবে টেট্রোমিনো টুকরা ব্যবহার করে পূরণ করা যায় তবেই একটি সমাধান গ্রিড প্রিন্ট করুন।

অক্ষর দিয়ে নির্মিত টুকরা I, O, L, J, T, Z, Sনিম্নরূপ:

I          
I          L      J
I    OO    L      J     T     ZZ      SS
I    OO    LL    JJ    TTT     ZZ    SS

উদাহরণ

কোনও ইনপুট সমন্বয় ছাড়াই আউটপুট সমাধানের উদাহরণ:

ZZIIIILLLI
JZZTTTLLLI
JJJSTLOOLI
SZZSSLOOLI
SSZZSLLJJI
TSOOSLLJII
TTOOSSLJII
TZOOSSLZII
ZZOOSSZZII
ZJJJJSZLLI
TTTJJOOILI
ITZJJOOILI
IZZTTTLIII
IZOOTZLIII
IJOOZZLLII
LJJJZSSTII
LLLTSSTTTI
LLLTTSSZJI
OOLTSSZZJI
OOIIIIZJJI

বিতরণ সহ নিম্নরূপ:

I          
I          L      J
I    OO    L      J     T     ZZ      SS
I    OO    LL    JJ    TTT     ZZ    SS

11   6     8     6      6     7      6

মন্তব্য

স্থানাঙ্কগুলি গ্রিডে একটি একক Xএবং Yঅবস্থান উপস্থাপন করে। গ্রিড 0 ভিত্তিক, যার অর্থ স্থানাঙ্ক (0,0)হয় শীর্ষ বাম বা নীচের বাম ঘর, লেখকের পছন্দ হওয়া উচিত।

ইটগুলি পারেন:

  • লেখকের বিবেচনার ভিত্তিতে নির্বাচন করা।
  • লেখক হিসাবে উপযুক্ত হিসাবে ঘোরানো হবে।
  • লেখকের বিবেচনার ভিত্তিতে গ্রিডে যে কোনও জায়গায় রাখা উচিত (ওরফে: কোনও টেট্রিস মাধ্যাকর্ষণ নেই)

ইটগুলি পারবেন না:

  • গ্রিডের সীমানার বাইরে স্থাপন করা উচিত।
  • গ্রিডে বিদ্যমান ইট বা গর্তকে ওভারল্যাপ করুন।
  • একটি অ-মানক টেট্রিস টেট্রোমিনো টুকরা হোন।

স্কোরিং

আপনার স্কোরটি ফর্ম্যাটে রয়েছে:

(1000 - [কোডে বাইটস]) * (এম / 10 + 1)

যেখানে এম আপনার সমাধান সেটগুলিতে ব্যবহৃত টুকরো বিতরণের জন্য গুণক।

আইডস অফ মার্চ দ্বারা সর্বোচ্চ স্কোর জিতেছে।

এম গণনা করতে, প্রতিটি সেটের জন্য সর্বনিম্ন স্বতন্ত্র টেট্রোমিনো বিতরণ মান যুক্ত করুন এবং তারপরে এম গণনা করতে গড়কে গোল করে নিচে নামান

উদাহরণ স্বরূপ:

Set 1: 5
Set 2: 4
Set 3: 5
Set 4: 6
Set 5: 3

6 + 4 + 5 + 4 + 4 = 21/5 = 4.6

সুতরাং আপনি 4আপনার এম মান হিসাবে ব্যবহার করবে ।

দ্রষ্টব্য: যদি কোনও সেটের কোনও সমাধান না থাকে, তবে এটি এম তে গণনা করার জন্য সেট করে না কারণ এটির কোনও টেট্রোমিনো বিতরণ নেই।


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

@ মার্টিনব্যাটনার ডিউলি উল্লেখ করেছেন, প্রতিক্রিয়ার জন্য ধন্যবাদ।
সিজারম্যাট

2
মার্চ এর আইডিস = মার্চ 15। আমি এটি সন্ধান করতে হবে।
লেভেল নদী সেন্ট

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

@ পিটারটেলর ফেয়ার যথেষ্ট, আমি যোগ করেছি কোন সমাধান সেটটি সমাধান করা যায় না। সাহায্য করার জন্য ধন্যবাদ.
সিজারম্যাট

উত্তর:


2

পাইথন 3 , 819 বাইট, এম = 0, স্কোর = 181

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

এটি 0 এর এম রয়েছে, যেহেতু এটি একটি নির্ধারিত ক্রমে টুকরো ব্যবহার করার চেষ্টা করে এবং প্রায় সর্বদা তালিকার শেষটি ছাড়াই সমাধান সন্ধান করে। প্রতিটি চক্রকে আরও বেশি বিতরণ করার জন্য আমি এলোমেলোভাবে অর্ডার করা তালিকা ব্যবহার করার চেষ্টা করেছি, তবে আমি কেবল 2 এর এম পেয়েছি , যা এলোমেলো শ্যাফেল আমদানির জন্য প্রয়োজনীয় বাইটের জন্য মূল্যবান নয় ।

আমি নীচের কোডটি মন্তব্য করতে পারি না, যেহেতু আমার গল্ফিংয়ে আমি এর অনেক কিছুই ভুলে গেছি। সাধারণ ধারণা:

  • 1-অক্ষরের নাম সহ নপি এবং ইটারল্টুল পণ্য আমদানি করুন
  • কিছু বিল্টিনকে 1-অক্ষরের ক্রিয়াকলাপ হিসাবে নতুন নামকরণ করুন এবং বাইটগুলি সংরক্ষণ করতে ল্যাম্বডা সংজ্ঞায়িত করুন
  • সম্ভাব্য টিট্রোমিনোসের অ্যারেটি নাম্পি এনডি-অ্যারে হিসাবে তৈরি করুন, সমস্ত ঘূর্ণন অন্তর্ভুক্ত
  • পুনরাবৃত্তি ফাংশনে:
    • পছন্দসই অসম্পূর্ণ টাইলের অবস্থান এবং টুকরো তালিকার মধ্য দিয়ে চক্র পান
    • প্রতিটি টুকরো জন্য, এর অনুবাদগুলির মাধ্যমে চক্র (এটিকে উপরে এবং নীচে নিয়ে যাওয়া)
    • যদি কিছু কাজ না করে (টুকরোটি বোর্ডের বাইরে চলে যায়, অন্য টুকরো টুকরো টুকরো করে, কোনও ছিদ্রকে আঘাত করে ইত্যাদি), পরবর্তী অনুবাদ বা পরবর্তী পুরো অংশটি চেষ্টা করুন
    • যদি এটি কাজ করে, দুর্দান্ত। এটি চেষ্টা করুন, তারপরে পুনরাবৃত্তভাবে ফাংশনটি কল করুন।
    • যদি সেই পথটি কাজ না করে তবে এটি 'ক' ফিরে আসবে, তাই আমরা আবার চেষ্টা করব। যদি এটি কাজ করে, তবে এটি বোর্ডটি ফিরিয়ে দেয় এবং আমরা এটি লাইনটি পাস করি।
  • পরিশেষে, প্রোগ্রাম। আমরা 10 এর বিশিষ্ট অ্যারে হিসাবে 10x20 বোর্ড তৈরি করি।
  • ইনপুটটি ফর্মের (x1, y1); (x2, y2); ... আমরা এতে প্রতিটি গর্তের জন্য একটি 9 রেখেছি, তারপরে এটির উপর ফাংশনটি চালানোর ফলাফল পেয়েছি
  • মুদ্রণ বিবৃতিটি তখন সফল ফলাফল বা খালি, মূল বোর্ড লাইন দ্বারা রেখা প্রদর্শন করে, সংখ্যার জন্য উপযুক্ত অক্ষর বা প্রতীক স্থাপন করে।
import numpy as n
from itertools import product as e
m,s=range,len
p=[n.rot90(a,k)for a,r in[([[2,2]]*2,1),([[3]*3,[1,3,1]],4),([[0]*4],2),([[1,1,6],[6]*3],4),([[7,1,1],[7]*3],4),([[4,4,1],[1,4,4]],2),([[1,5,5],[5,5,1]],2)]for k in m(r)]
o=lambda a:e(m(s(a)),m(s(a[0])))
def t(l,d=0):
	g=list(zip(*n.where(l==1)))[0]
	for a in p:
		for u,v in o(a):
			w,x=l.copy(),0
			for r,c in o(a):
				if a[r,c]!=1:
					i,j=g[0]+r-u,g[1]+c-v
					if any([i<0,i>19,j<0,j>9])or l[i,j]!=1:
						x=1
						break
					w[i,j]=a[r,c]
			if x==0:
				if len(w[w==1]):
					f=t(w,d+1)
					if type(f)==str:continue
					return f
				return w
	return'a'
b=n.ones((20,10))
b[list(zip(*[eval(k)[::-1]for k in input().split(';')]))]=9
a=t(b)
for r in(a,b)[type(a)==str]:
	print(''.join(map(dict(zip([0,2,3,4,5,6,7,9,1],'IOTZSLJX-')).get,r)))

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

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

In: (1,1);(8,1);(4,4);(5,8);(4,11);(5,15);(1,18);(8,18)
Out: 
IIIIOOOOLL
TXOOOOOOXL
TTOOOOOOTL
TOOIOOOOTT
TOOIXOOTTI
TTTITOOTTI
TTTITTTTII
OOTTTTTTII
OOTTTXOOII
TTTTOOOOII
TTTTOOOOII
TTTTXTOOII
ITTTTTTTII
ITTTTTTTII
IITTTLLTTI
IITOOXLTTI
IITOOTLTTI
IITTLTTTTI
IXTLLTJTXI
ILLLLLJJJI

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