পেন্টোমিনো ভ্যালিডেটর


9

যেহেতু কেউ তাদের পেন্টোমিনোগুলি দেখার জন্য উদ্বিগ্ন হতে পারে না এটি আয়তাকার আকার তৈরি করে কিনা তা দেখার জন্য, আমি সিদ্ধান্ত নিয়েছি যে এটি আপনাকে একটি প্রোগ্রাম লিখতে বাধ্য করবে।

তোমার কাজ

12 টি স্বতন্ত্র অক্ষর সমন্বিত নিউলাইনগুলি দ্বারা কিছু ইনপুট বিভক্ত দেওয়া হয়েছে, এটি বৈধ সমাধান কিনা তা স্থির করুন।

একটি বৈধ সমাধান আবশ্যক

  • প্রতিটি চরিত্রের 5 টি রয়েছে (নিউলাইনগুলি বাদে)
  • প্রতিটি অক্ষরের সেট পুরোপুরি সংযুক্ত থাকতে হবে
  • প্রতিটি অক্ষরের একটি স্বতন্ত্র আকার থাকতে হবে
  • নিয়মিত আয়তক্ষেত্রাকার আকারে থাকুন

যদি এটি একটি বৈধ সমাধান হয় তবে একটি সত্যবাদী মান আউটপুট করুন, অন্যথায় একটি মিথ্যা মান আউটপুট করুন।

আপনার প্রোগ্রামটি কোনও ফাংশন বা একটি সম্পূর্ণ প্রোগ্রাম হতে পারে তবে স্ট্যান্ডিন এবং আউটপুট থেকে স্টাডআউটে অবশ্যই ইনপুট নিতে হবে।

পরীক্ষার মামলা

বৈধ সমাধান

000111
203331
203431
22 444
2   46
57 666
57769!
58779!
58899!
5889!!

00.@@@ccccF111//=---
0...@@c))FFF1//8===-
00.ttttt)))F1/8888=-

অবৈধ কনফিগারেশন

invalid (doesn't contain 12 unique characters)

111112222233333444445555566666
77777888889999900000qqqqqwwwww (Each set has the same shape)

1234567890qw
w1234567890q
qw1234567890
0qw123456789
90qw12345678 (None of the characters are connected)

1234567890qw (Not 5 characters in every set)

1111122222333334444455555666666
77777888889999900000qqqqqwwwwww (More than 5 characters in some sets)

00
0                   
00.@@@ccccF111//=---
 ...@@c))FFF1//8===-
  .ttttt)))F1/8888=- (Doesn't form a rectangular shape)

১. পেন্টোমিনোর প্রতিবিম্বের কি মূলটির মতো আকৃতি রয়েছে? ২. আমরা কী ধরে নিতে পারি যে ইনপুটটিতে ছাপার যোগ্য এএসসিআইআই অক্ষর এবং নতুনলাইন থাকবে?
ডেনিস

@ ডেনিস হ্যাঁ এবং হ্যাঁ
ব্লু

@ ডিজিটালট্রামুম এটি দূরবর্তীভাবে এর সদৃশ নয়। বিটিডাব্লু যে একটি দুর্দান্ত প্রশ্ন ছিল, এটা লজ্জার বিষয় যে আমি যখন নতুন জিজ্ঞাসা করা হয়েছিল তখন তার উত্তর দেওয়ার সময় আমার হাতে ছিল না।
স্তর নদী সেন্ট

@ ধীরে ধীরে আপনি ঠিক বলেছেন - আমি এই প্রশ্নটি সঠিকভাবে পড়িনি
ডিজিটাল ট্রমা

উত্তর:


3

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

f=p=>(m=[],s=[],d=0,l=p.indexOf`
`+1,[...p].map((c,i)=>(i+1)%l&&!m[i]?g=d-2<s.indexOf((t=a=>m[a]|p[a]!=c?r=0:(m[a]=y.push(a),n=a<n?a:n,t(a+1)+t(a-1)+t(a+l)+t(a-l)+1))(n=i,y=[])!=5?g=0:s[d++]=y.map(a=>r+=a-n)|r):0),d==12&g)

@ ড্যাঙ্কমিমেসকে ধন্যবাদ 2 বাইট সংরক্ষিত !

ব্যবহার

f(`000111
203331
203431
22 444
2   46
57 666
57769!
58779!
58899!
5889!!`);
=> true

ব্যাখ্যা

এই সমাধান সম্পর্কে কয়েকটি নোট:

  • এই উত্তরটি বৈধ নয় এটি সম্ভব। এটি ঘোরানো পেন্টোমিনোয়াস একই আকারের কিনা তা যাচাই করে না, তবে আমি চেষ্টা করেছিলাম তবে নিয়মের প্রয়োজনীয়তা পূরণ করে এমন দুটি বৈধ পেন্টোমিনো আয়তক্ষেত্রটি খুঁজে পেলাম না এবং একই আকারের দুটি বা আরও বেশি ঘোরানো থাকি includes তবে আমি কোনও পেন্টোমিনো বিশেষজ্ঞ না তাই যদি আপনি কোনও বৈধ সংমিশ্রণটি খুঁজে পান যা এটির সাথে ব্যর্থ হয় তবে আমাকে জানান।
  • বিধিগুলির ব্যবহারের জন্য STDINএবং STDOUTইনপুট এবং আউটপুটগুলির জন্য উত্তরগুলির প্রয়োজন হয় তবে prompt()কেবলমাত্র একক লাইন ইনপুট জন্য ডিজাইন করা হয়েছে এবং আমার (উইন্ডোজ) কম্পিউটারটি স্বয়ংক্রিয়ভাবে \r\nপ্রতিটি নতুন লাইনে অক্ষর রেখে দেয় যখন আমি এটি স্ট্রিংকে গ্রহণ করে এমন একটি ফাংশন তৈরি করেছিলাম।
f=p=>(
  m=[],                      // m = map of checked characters
  s=[],                      // s = list of shapes found (stored as integer)
  d=0,                       // d = number shapes found
  l=p.indexOf`
`+1,                         // l = length of each line (including newline character)
  [...p].map((c,i)=>         // iterate through each character of the input
    (i+1)%l&&                // skip newline characters
      !m[i]?                 // skip the character if it has already been mapped
        g=                   // g = pentomino is valid
          d-2<s.indexOf(     // check if shape already existed before just now
            (t=a=>           // t() checks if character is part of the shape then maps it
              m[a]|          // skip if character is already mapped
                p[a]!=c      //    or if the current character is part of the shape
              ?r=0:(
                m[a]=        // mark the character as mapped
                  y.push(a), // y = list of shape character indices
                n=a<n?a:n,   // n = minimum index of all characters in the shape
                t(a+1)+      // check and map adjacent characters
                t(a-1)+
                t(a+l)+
                t(a-l)+
                1
              )
          )(n=i,y=[])
            !=5?g=0:         // make sure there are only 5 characters in the shape
            s[d++]=          // add the shape to the list
              y.map(a=>      // sum of (index of each character in the shape - minimum
                r+=a-n)|r    //     index) = unique integer representing the shape
        ):0
  ),
  d==12&g                    // ensure there is 12 shapes and return the 'is valid' result
)

1
আপনি l=p.indexOf`<newline here>`2 বাইট সংরক্ষণ করতে ট্যাগযুক্ত টেমপ্লেটগুলি অপব্যবহার করতে পারেন
ড্যানকমেস

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