আমি কি ব্লক, স্ল্যাব এবং সিঁড়ি দিয়ে এই আকারটি তৈরি করতে পারি?


13

একটি আয়তক্ষেত্রাকার দ্বিমাত্রিক গ্রিড বিবেচনা করুন যেখানে প্রতিটি ঘর খালি ( .) বা পূর্ণ ( 0) হতে পারে।

যেমন

..00....
0000....
.00000..
000...00
..000000
000.00..

গ্রিডটিকে অসীম হিসাবে বিবেচনা করা হয়, চিত্রিত অঞ্চলের বাইরের সমস্ত ঘর খালি রয়েছে।

লক্ষ্যটি হ'ল ভরাট স্থানগুলি coverেকে রাখা এবং 7 টি স্বতন্ত্র আকারের ইটের একটি সেট ব্যবহার করে খালি স্থানগুলি খোলা ছেড়ে দেওয়া উচিত যা প্রতিটি গ্রিডের 4 টি কোষ (2 × 2) নেয়।

এটি 7 টি ইট:

  • ব্লক - 1 বৈকল্পিক

    11
    11
    
  • স্ল্যাব - 2 ভেরিয়েন্ট

    ..
    22
    33
    ..
  • সিঁড়ি - 4 ভেরিয়েন্ট

    .4
    44
    5.
    55
    66
    .6
    77
    7.

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

সুতরাং উপরের উদাহরণটি আড়াল করার একটি উপায় (ওরফে সমাধান) এর মত:

..11....
2211....
.47733..
447...22
..771133
227.11..

(অভিজাত প্রতিবেশী ইটগুলি এখনও অস্পষ্টতা সৃষ্টি করতে পারে তবে বৃহত্তর গ্রিডটি সাবধানতার সাথে চিহ্নিত করা এটি সমাধান করে))

এর জন্য একটি অবৈধ সমাধান

000000
000000

হয়

566774
556744

কারণ ইটগুলি সমস্ত বৃহত্তর গ্রিডের সাথে একত্রিত হয় না বা কেবল এটির একটি ঘরও দখল করে না।

এখানে একটি বৈধ সমাধান একটি সারিতে 3 টি ব্লক:

111111
111111

এবং অন্য বৈধ সমাধানে 6 টি স্ল্যাব জড়িত:

......
222222
333333
......

সুতরাং নোট করুন যে কয়েকটি ইনপুট গ্রিডের একাধিক সমাধান রয়েছে

এর জন্য একটি অবৈধ সমাধান

00.00
00...

হয়

11.33
11...

কারণ ইটগুলি বড় গ্রিডের সাথে সারিবদ্ধ হয় না। স্ল্যাবটির জন্য বাম বা ডান একের পর এক চলতে হবে তবে অবশ্যই কভারটি অসম্পূর্ণ থাকবে। এই ইনপুট গ্রিডটির কোনও সমাধান নেই

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম লিখুন যা (স্ট্ডিন / কমান্ড লাইনের মাধ্যমে) গ্রন্থটি আবরণে গ্রিডের প্রতিনিধিত্ব করে .এবং এর পাঠ্যের একটি আয়তক্ষেত্রাকার ব্লক গ্রহণ করে 0

যদি কোনও বৈধ আচ্ছাদন সমাধান থাকে তবে উপরের মতো একইভাবে কোনও একটি সমাধান মুদ্রণ করুন (স্টাডাউটের মাধ্যমে) , ইটের মাধ্যমে সমস্তগুলি যথাযথের 0সাথে প্রতিস্থাপন করুন ।17

যদি কোনও সমাধান না হয়, আপনার প্রোগ্রামের কিছু আউটপুট করা উচিত নয়, কেবল চুপচাপ স্বাভাবিকভাবে শেষ হয়।

মন্তব্য

  • ইনপুট এবং আউটপুট একই আয়তক্ষেত্রাকার মাত্রা প্রয়োজন হয় না। আপনার আউটপুটটিতে বহিরাগত সারি এবং / অথবা সকলের কলাম থাকতে পারে .(যতক্ষণ না তারা সমাধানটিকে অকার্যকর করে দেয়)।

  • এটি .যদি ভরাট স্থানগুলিকে প্রভাবিত করে না তবে সারণী এবং কলামগুলির সকলের ছাঁটাও ঠিক আছে । যেমন

    222222
    333333
    

    এর একটি বৈধ সমাধান

    000000
    000000
    

    বিপরীতে, দুটি খালি কলামগুলি 00..00অপসারণ করা যায়নি কারণ এটি ভরাট স্থানগুলিকে বিশৃঙ্খলা করবে।

  • আপনি বিকল্পভাবে ধরে নিতে পারেন ইনপুটটির একটি একক ট্রেলিং নিউলাইন রয়েছে। আউটপুটে একটি একক পেছনের নতুন লাইন ঠিক আছে, এমনকি কোনও সমাধানের ক্ষেত্রেও।

  • সম্পূর্ণ খালি (সমস্ত .) গ্রিড এবং তুচ্ছ 0 × 0 গ্রিডগুলি আপনাকে উদ্বিগ্ন হওয়া দরকার ইনপুট ক্ষেত্রে নয়। তবে 1 × 1 0গ্রিডটি হ'ল অন্যান্য গ্রিড যেমন অন্তত একটি করে থাকে 0। (আপনি ইনপুট গ্রিডের প্রস্থ বা উচ্চতা সমানও বোধ করবেন না!)

  • কোনও প্রোগ্রামের পরিবর্তে আপনি একটি ফাংশন লিখতে পারেন যা ইনপুটটিকে স্ট্রিং আর্গুমেন্ট হিসাবে গ্রহণ করে এবং আউটপুটটিকে সাধারণত প্রিন্ট করে বা স্ট্রিং হিসাবে ফেরত দেয়। কোনও সমাধান না হলে যে কোনও মিথ্যা মান ফিরে পাওয়া যাবে।

  • আপনি এর পরিবর্তে 9 টি পৃথক মুদ্রণযোগ্য ASCII অক্ষর ব্যবহার করতে পারেন . 0 1 2 3 4 5 6 7। আপনার প্রতিস্থাপনগুলি কী ছিল তা নিশ্চিতভাবে নিশ্চিত করুন! নিউলাইনগুলি অবশ্যই যেমন রয়েছে তেমন থাকবে।

স্কোরিং

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

এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত হয় ব্লক , স্ল্যাবসিঁড়ি মধ্যে Minecraft , যা এখানে বর্ণিত একই নিয়ম অনুসরণ করুন। আপনি যদি পিপিসিজি এবং মাইনক্রাফ্ট উপভোগ করেন তবে আপনি পিপিসিজি মাইনক্রাফ্ট সার্ভারটি পরীক্ষা করে দেখতে চাইতে পারেন ।


3
দেখে মনে হচ্ছে মিনক্রাফ্ট সার্ভারটি গল্ফ স্ক্রিপ্টে প্রয়োগ করা হয়নি - বিরক্তিকর :-)
টমাস ওয়েলারের

5
@ থমাস ওয়েলারের কয়েকটি বাইট সংরক্ষণের জন্য এটি সিজেএম-এ পুনরায় প্রয়োগ করা হয়েছিল।
অ্যালেক্স এ।

উত্তর:


6

পাইথন - 525 491 478 430 বাইট

r=range
def t(s):
 m=s.find("\n")+1
 for q in r(4):
  try:
   for i in r(-q%2,m-1,2):
    for j in r(-q/2,len(s)/m,2):
     k,g=j*m+i,""
     b=[k,k+1,k+m,k+m+1]
     for z in b:g+=a(s,z)
     for z in b:
      if a(s,z)!="d":s=s[:z]+`dict(dddd=0,zzdd=3,ddzz=2,zzzd=7,zzdz=6,zdzz=5,dzzz=4,zzzz=1)[g]`+s[z+1:]
   return s
  except:d
def a(v,i):
 try:
  if v[i]!="\n":return v[i]
  return "d"
 except:return "d"

ব্যাখ্যা: এটি আমার প্রথম কোড গল্ফ, সুতরাং এটি অনুকূল নাও হতে পারে তবে এটি কীভাবে কাজ করে তা এখানে's টি (গুলি) ফাংশনটি স্ট্রিংটি পাস করার জন্য ফলাফল দেয় First প্রত্যেকের জন্য. এটি প্রতিটি 2x2 ব্লকের দিকে নজর রাখে এবং অভিধান দ্বারা প্রদত্ত একটি বৈধ ব্লক নম্বরে মানচিত্র করে এবং শূন্যকে সংখ্যায় পরিবর্তন করে।

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

সম্পাদনা করুন: অক্ষরের আলাদা ম্যাপিং ব্যবহৃত হয়:। -> ডি, 0 -> z, অন্যান্য সমস্ত নম্বর নিজের কাছে যায়। এটি ইনপুট এবং আউটপুট উভয় ক্ষেত্রেই প্রযোজ্য।


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