সরলতম টাইলিং অফ ফ্লোর


10

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

মেঝেটি একটি বর্গ গ্রিডের একটি অংশ। প্রতিটি বর্গক্ষেত্র টাইল হয় রঙিন রঙিন হয় আজার বা কালো ( ইনপুট দ্বারা aএবং প্রতিনিধিত্ব করে b)।

একটি উদাহরণ মেঝে:

  aaaa
ababab
aaaaa

একটি মেটা টাইলিং

  • আজুর এবং কালো স্কোয়ারগুলির আয়তক্ষেত্রাকার মেটা-টাইল Nদ্বারা নির্মিতM
  • ব্যবহৃত মেটা-টাইলগুলি অনুবাদ অনুসারে অভিন্ন (আপনি এগুলি ঘোরান বা আয়না করতে পারবেন না)
  • যদি দুটি মেটা-টাইলসের দিকগুলি সংযুক্ত থাকে তবে তাদের পুরো দৈর্ঘ্যের সাথে সংযুক্ত হওয়া উচিত (যেমন মেটা-টাইলস গ্রিডের মতো ফ্যাশনে স্থান টাইল)

একটি উদাহরণ মেটা টাইল:

ba
aa

এবং এর দ্বারা তৈরি মেটা টাইলিং:

       .
       .
       .
    babababa
    aaaaaaaa
... babababa ...
    aaaaaaaa    
    babababa
    aaaaaaaa
       .
       .
       .

বাম অক্ষরগুলি দেখানোর সাথে সাথে এই মেটা টাইলিং উপরের দেখানো তলটি তৈরি করে:

       .
       .
       .
    ********
    ***aaaa*
... *ababab* ...
    *aaaaa**    
    ********
    ********
       .
       .
       .

মেটা-টাইলিংয়ের ক্ষেত্রটি যদি অন্যটির চেয়ে ছোট হয় তবে তার চেয়ে আরও সহজ- আমাদের উদাহরণটিতে এমন একটি ক্ষেত্র রয়েছে 2*2 = 4যার উদাহরণ তলটির জন্য সম্ভব সবচেয়ে ছোট। সুতরাং আউটপুট 4উদাহরণের জন্য হওয়া উচিত ।

ইনপুট

  • একটি স্ট্রিং অক্ষর নিয়ে গঠিত a b spaceএবং newlineঅন্তত একটি ধারণকারী aবা b
  • বর্ণগুলি ( ab4 টি সংযুক্ত (পাশাপাশি পাশাপাশি সংযুক্ত) আকার তৈরি করে।
  • সারিগুলির সামনের দিকে অপ্রয়োজনীয় স্পেস থাকবে না অর্থাৎ কমপক্ষে একটি সারি শুরু হবে aবা দিয়ে হবে b
  • আপনি দুটি ইনপুট ফর্ম্যাট চয়ন করতে পারেন:

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

আউটপুট

  • একটি একক পূর্ণসংখ্যা, সবচেয়ে ছোট সম্ভাব্য মেটা টাইলের ক্ষেত্র যার টাইলিংটিতে ইনপুট ফ্লোর রয়েছে।

উদাহরণ

উদাহরণগুলি ড্যাশ দ্বারা সীমিত করা হয়। উদাহরণের তিনটি অংশ হ'ল ইনপুট, আউটপুট এবং সম্ভাব্যতম ক্ষুদ্রতম মেটা-টাইলগুলির একটি।

a

1

a
-----------------
 aaaa
aaa
a

1

a
-----------------
aabaab
abaa
aaba

6

aab
aba
-----------------
aabaab
a  a a
aabab

18

aabaab
aaaaaa
aababa
-----------------
ba
aaab

8

baaa
aaab
-----------------
 aaaa
ababb
aaaa

10

aaaaa
ababb
-----------------
 a aa
ab ba
 aba

6

aa
ab
ba
-----------------
 aaaa
abab
aaaa

4

aa
ab
-----------------
ba
 ba
  b

4

ba
ab
-----------------
baa
aba
aab

9

baa
aba
aab
-----------------
 aaaa
aabaa
aaaa

6

aaa
aab

এটি কোড গল্ফ তাই সংক্ষিপ্ত এন্ট্রি জিতেছে।


@Ypnypn প্রতিটি কোণে 3 টি অন্যান্য কোণ স্পর্শ করতে হবে (টাইলিংয়ের কিনারায় মেটা-টাইলগুলি বাদ দিয়ে)। আমি এটি হিসাবে বলেছিলাম "যদি দুটি মেটা-টাইলের দিকগুলি সংযুক্ত থাকে তবে তাদের পুরো দৈর্ঘ্যের সাথে সংযুক্ত হওয়া উচিত"। সুতরাং আপনার প্রদত্ত উদাহরণটি অবৈধ।
এলোমেলো

উত্তর:


3

সি - 208 বাইট

w,q,n,m,r,g,u;t(char*f){for(w=0;f[w++]-10;);for(q=1;;q++)for(n=1;m=q/n,n<=q;++n)if(n*m==q){char t[q];bzero(t,q);r=q;for(g=0;f[g];++g){u=g/w%m*n+g%w%n;r=t[u]+f[g]-195?r:0;if(f[g]&64)t[u]=f[g];}if(r)return r;}}

গল্ফ করার আগে সমান কোড:

#include <stdio.h>
#include <strings.h>

int t(char* f) {
    int w = 0;
    for ( ; f[w++] - 10; );

    for (int q = 1; ; q++) {
        char t[q];
        for (int n = 1; n <= q; ++n) {
            int m = q / n;
            if (n * m == q) {
                bzero(t, q);
                int r = q;
                for (int g = 0; f[g]; ++g) {
                    int u = g / w % m * n + g % w % n;
                    if (t[u] + f[g] == 195) {
                        r = 0;
                    }
                    if (f[g] & 64) {
                        t[u] = f[g];
                    }
                }
                if (r) {
                    return r;
                }
            }
        }
    }
}

অ্যালগরিদম মোটামুটি দৃ force় শক্তি, সুতরাং কোডের ভিত্তিতে এটি কীভাবে কাজ করে তা যুক্তিসঙ্গতভাবে সুস্পষ্ট হওয়া উচিত। যাইহোক এখানে কয়েকটি মন্তব্য দেওয়া হয়েছে:

  • ইনপুটটির অনুমান করা হয় যে পিছনের জায়গাগুলি সহ ফর্ম থাকবে যাতে সমস্ত লাইনের দৈর্ঘ্য একই থাকে।
  • প্রথম লুপটি প্রথম নতুন লাইন অক্ষরের সন্ধান করে প্রস্থটি সন্ধান করে।
  • আউটটার লুপটি প্রার্থী মেটা-টাইল মাপের চেয়ে বেশি qreturnমেটা টাইল মেঝেটি কভার করতে পারে এমন সময় দিয়ে প্রস্থান করে । নোট করুন যে লুপটি অন্য প্রস্থান শর্তের প্রয়োজন হয় না কারণ সর্বদা একটি সমাধান থাকে (সবচেয়ে খারাপ ক্ষেত্রে ইনপুটটির আকার)।
  • প্রথম নেস্টেড লুপ এবং নীচের ifআকারের জন্য বৈধ মেটা-টাইল প্রস্থ / উচ্চতার সংমিশ্রণগুলি গণনা করে q
  • প্রার্থীর মেটা-টাইল আকারের সাথে মিলে যায় এমন একটি অক্ষর অ্যারে শূন্য-আরম্ভ হয়।
  • অভ্যন্তরীণ লুপটি মেঝেতে থাকা সমস্ত টাইলগুলির উপরে পুনরাবৃত্তি করে।
  • u মেটা টাইলের সূচক যা মেঝে টাইলের সাথে মিলে যায়।
  • যদি মেঝে টাইল এবং মেটা-টাইল টাইল উভয় হয় aবা bএবং বিভিন্ন (যোগফল a = 97এবং b = 98হয় 195) হয় তবে একটি মিল নেই এবং চেষ্টা করা মাত্রা সহ মেটা টাইল আকার কাজ করবে না।
  • অন্যথায়, যদি মেঝে টাইল হয় aবা b, টালি রঙ প্রার্থী মেটা-টাইল অনুলিপি করা হয়।
  • সফল ম্যাচটি তৈরি হওয়ার সময় মেটা-টাইলের আকারটি ফেরৎ দেয়, অর্থাত্ যদি চেষ্টা করা ম্যাচটি ব্যর্থ হিসাবে চিহ্নিত না হয়।

পরীক্ষিত কোড ব্যবহৃত:

#include <stdio.h>

extern int t(char* s);

int main()
{
    printf("%d\n", t(
        "a\n"
    ));
    printf("%d\n", t(
        " aaaa\n"
        "aaa  \n"
        "a    \n"
    ));
    printf("%d\n", t(
        "aabaab\n"
        "abaa  \n"
        "aaba  \n"
    ));
    printf("%d\n", t(
        "aabaab\n"
        "a  a a\n"
        "aabab \n"
    ));
    printf("%d\n", t(
        "ba  \n"
        "aaab\n"
    ));
    printf("%d\n", t(
        " aaaa\n"
        "ababb\n"
        "aaaa \n"
    ));
    printf("%d\n", t(
        " a aa\n"
        "ab ba\n"
        " aba \n"
    ));
    printf("%d\n", t(
        " aaaa\n"
        "abab \n"
        "aaaa \n"
    ));
    printf("%d\n", t(
        "ba \n"
        " ba\n"
        "  b\n"
    ));
    printf("%d\n", t(
        "baa\n"
        "aba\n"
        "aab\n"
    ));
    printf("%d\n", t(
        " aaaa\n"
        "aabaa\n"
        "aaaa \n"
    ));
    return 0;
}

আউটপুট:

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