এএসসিআইআই গুনে হামান্তেছন!


18

আজ পুরীম, যার উপর একটি প্রথা হ্যামন্তাস্চেন (একবচন: হামন্তাস্চ ) নামে ভরাট দিয়ে ত্রিভুজ আকারের কুকি প্রদান করে । আরেকটি প্রথা হ'ল ভারী পান করা।

আমি সর্বাধিক নিখুঁত বেকার নই .... আমার হাতে অনেকগুলি অনিয়মিত আকারের হামান্তসঞ্চন আছে এবং এতগুলি বন্ধু তাদের দেওয়ার জন্য রয়েছে! আমি যদি আপনাকে আমার কুকিজের একটি ছবি পাঠিয়েছি তবে আপনি কি আমাকে বলতে পারবেন যে আমার কতটি আকার এবং ফিলিং রয়েছে? তবে এটি পুরিম এবং আমি প্রচুর কোড পড়ার জন্য খুব মাতাল, এটি আপনার তৈরির মতো ছোট কোড হওয়া দরকার।

সংজ্ঞা

আয়তন

একটি হামানট্যাশ যে কোনও আকারের হতে পারে । সবচেয়ে ছোট হামানটশ 1 এর আকার এবং এটি দেখতে দেখতে:

/\  --
--  \/

কখনও কখনও, একাধিক হামানটশেন ওভারল্যাপ করতে পারে । নীচের আকারটি দুটি হামানটাসচেণ হিসাবে গণনা করা হয় (একটি আকার 1, একটি আকার 2):

 /\
/\ \
----

কিছু হামানটশনে ভরাট আছে । এটি একটি অক্ষরের সাথে ভিতরে সমস্ত সাদা স্থান পূরণ করে নির্দেশিত হবে। নোট করুন যে 1 মাপের হামান্টশ্চিনে ফিলিং থাকতে পারে না।

আমরা ভরাট এবং আকারের উপর ভিত্তি করে হামানট্যাশনের নাম দেব । আসুন বিন্যাসটি ব্যবহার করুন <filling> <size>এবং যদি পূরণ - <size>না করা হয় (আপনি পরিবর্তে একটি স্থান ব্যবহার করতে পারেন -তবে মার্কডাউন এটি পছন্দ করে না)।

এখানে একটি . 2, ক . 4এবং একটি রয়েছে - 3:

          /\
         /./\
 ----   /./  \
 \../  /./    \
  \/   --------

এগুলি হ'ল ক @ 3, ক . 2এবং ক - 4:

          /\
         / /\
  /\    / /@@\
 /..\  / /@@@@\
 ----  --------

এখানে আরও কিছু কঠিন। & 2ওভারল্যাপিংয়ের কারণে স্যালেন্টের কারণে আপনি যে আশা করতে এসেছেন তার চেয়ে কম ফিলিং কীভাবে রয়েছে - 3? এটিতে একটি - 1, & 2একটি - 3এবং একটি রয়েছে & 4:

--------
\   \/&/
 \  /\/
  \/&/
   \/

ইনপুট

আপনাকে একটি টেক্সট ফাইল বা হামানটাসচেনের একক স্ট্রিং দেওয়া হবে (alচ্ছিক ট্রেলিং নিউলাইন এবং allyচ্ছিকভাবে প্যাডেল ট্রেলিং হোয়াইটস্পেস এমনকি))

সীমা

  • আপনি স্ট্রিংটি বৈধ হওয়ার প্রত্যাশা করতে পারেন - এটি হ'ল প্রতিটি অ-শ্বেতস্থান অক্ষর একটি সুস্বাদু মিষ্টি হামানটাসচে (কেন নষ্ট নষ্ট?) অবদান রাখে।
  • এছাড়াও আপনি আশা করতে পারেন এটি করা সঠিকভাবে পূর্ণ বা না - প্রতিটি hamantasch এটা কোনও সামঞ্জস্যপূর্ণ হওয়া ASCII অক্ষর দিয়ে ভরে উঠবে যে, - ভরাট নয় জন্য হওয়া ASCII 32, অথবা পরিপূর্ণ (ব্যতীত কিছু 32..127 /, \এবং -)।
  • এই হামানটাসেঞ্চ 3-স্পেসে স্ট্যাক করা নেই। সমস্ত /এবং \দৃশ্যমান হবে। -যেগুলি দ্বারা অবরুদ্ধ নয় /এবং সমস্ত \দৃশ্যমান হবে। ফিলিং খুব শেষ আসে।
  • সমস্ত হামান্তাসচেণ তাদের অনুভূমিক রেখার কমপক্ষে অর্ধেক (রাউন্ডিং) দৃশ্যমান থাকবে।
  • পূরণের যে কোনও সংকীর্ণ ব্লক কেবল তার চারপাশে থাকা ক্ষুদ্রতম হামানটশকে পূরণ করে

আউটপুট

উপরের মানদণ্ডগুলি পূরণ করে পাওয়া যেতে পারে এমন সমস্ত হামন্তচঞ্চনের "নামের" একটি তালিকা ফেরত দিন। আউটপুটটি আপনি যে যা আকারে চান তা হতে পারে (একটি স্ট্রিং, একটি হ্যাশ, স্টাডআউট ইত্যাদি)।

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

পরীক্ষার কেস # 1

ইনপুট # 1:

          /\
         / /\
  /\    / /@@\
 /..\  / /@@@@\
 ----  --------
    /\
   /**\
  /*/\*\
 /*/..\*\
 --------

আউটপুট # 1:

. 2
. 2
- 4
@ 3
* 4

পরীক্ষার কেস # 2

ইনপুট # 2:

  /\----
 /\/\*\/
/ /\d\/
------

আউটপুট # 2:

- 3
- 2
d 2
- 1    
* 2
- 1

পরীক্ষা # 3

ইনপুট # 3:

----
\/\/
/\/\  /\
---- /::\
     ----

আউটপুট # 3:

- 1
- 1
- 2
- 1
- 1
- 2
: 2

পরীক্ষা # 4

ইনপুট # 4:

 /\/\
/ /\$\
-/--/\\
 --/--\
  /xxx/\
 /xxx/##\
 ---/----\
   /      \
   -------- 

আউটপুট # 4:

$ 2
x 4
- 3
- 2
- 4
- 1
- 1
# 2

অবৈধ পরীক্ষার কেস # 5

ইনপুট:

/\
\/

আউটপুট:

আপনার এটি হ্যান্ডেল করার দরকার নেই।


কীভাবে এমন একটি পরীক্ষার কেস যা সম্পর্কে হ্যামেন্টাসেচেন ওভারল্যাপিং করছে তবে একই অনুভূমিক রেখা নেই? একজন এমনকি অন্যের অনুভূমিক রেখাটি ব্লক করতে পারে।
অভিমানী হাসেল্লার

পছন্দ করুন যাইহোক, এবং আমি এটি কেবল পাঠ্যে রেখেছি, এটি 2-স্পেস। আমরা সবসময় সব দেখতে পাব /এবং \ , এবং -সর্বদা ট্রাম্প ভরাট করব।
চার্লস

2
@ ইস্টারলিআইর্ক আরও কিছু গুরুত্বপূর্ণ বিট রয়েছে, এছাড়াও - এস্থার বইটি পড়া (এবং খারাপ লোকদের দিকে ঝুঁকানো), দরিদ্রদের দেওয়া - এবং পোশাক পরিধানের মতো কম ভিত্তিযুক্ত বিষয়গুলি।
চার্লস

1
আবার প্রাসঙ্গিক করা!
ডাউনরেপ_নেশন

1
শূন্যের প্রাথমিক কলামের ভিত্তিতে আপনার সমস্ত ভার্টেক্স কলাম ব্যতীত (1,0)বন্ধ রয়েছে +1। তবুও, আমি কী বলতে চাই তা আমি জানি এবং আমি একমত নই। সেখানে কি ইঙ্গিত(2, 2)- 2উপরের দুটি কেন্দ্রের উপরের কেন্দ্রটি এবং উপরের দুটি অংশের কেবল উপরের ডান এবং বামে নয়- 1 ? আমি দেখতে পাচ্ছি না যে কিছুই। এবং একই যুক্তি প্রযোজ্য (3, 2)। যতক্ষণ না আপনি সর্বাধিক সম্ভাব্য হামান্তাসেচেন ধরে নিতে কোনও নিয়ম যোগ করতে চান না ...
মাইকেল

উত্তর:


4

সি #, 496 452 বাইট

সম্পাদনা করুন: বাউন্ড চেকিং সহ একটি বাগ পাওয়া গেছে ... তবে আমার নিজের কোডটি বোঝার জন্য বাধ্য করা হয়েছে এমন একটি বাইটের স্ট্র্যাপও। স্থানীয় ফাংশনটিকে তালিকাভুক্ত করা কিছুটা সহায়তা করেছিল এবং C # 7 নির্দিষ্ট কোড সরিয়ে দিয়েছে। এই প্রশ্নটি অনেক মজার হয়েছে।

using C=System.Console;class P{static void Main(){string D="",L;int W=0,H=0,z=0,d,q,c,j,b;for(;(L=C.ReadLine())!=null;H+=W=L.Length)D+=L;var B=new int[H];for(d=W;(d=-d)>0||++z<H*H;)for(c=1,q=z%H;c<=z/H&q%W+c<W&q>=d&q<H+d&&D[q]==(d>0?92:47)&D[j=q+c]==(d<0?92:47);q-=d+1,c+=2){for(b=0;j>q;)b+=D[--j-d]==45?2:0;for(char h='-',e;c==z/H&b>c;C.WriteLine(h+" "+c/2))for(b=c++;b>1;j=q+=d+1,b-=2)for(;j<q+b;)B[j]=h=B[j]<1&h==45&(e=D[j++])!=47&e!=92&e>32?e:h;}}}

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

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

এটি 'অনুমোদিত' আকার বাড়িয়ে বৈধ হামানটাসচেঞ্চের জন্য পুরো গ্রিডটি বারবার অনুসন্ধান করে কাজ করে। প্রতিটি কক্ষের জন্য, এটি নীচের দিকে এবং নীচে \এবং /যতদূর সম্ভব এটি পরীক্ষা করে দেখায়। যদি এটি লক্ষ্য করে যে পরের সারিতে প্রচুর পরিমাণ রয়েছে -এবং বর্তমান আকারটি 'অনুমোদিত' আকার হয়, তবে এটি ফিলিং নির্ধারণ করে এবং প্রবেশটি প্রিন্ট করে।

একটি 'অব্যবহৃত' ঘর সন্ধান করে কুকির পুরো স্থান অনুসন্ধান করে এই ফিলিংটি পাওয়া যায়। যখন কোনও অব্যবহৃত ঘর পাওয়া যায়, তখন এটি ব্যবহার হিসাবে চিহ্নিত করা হয় (যেহেতু আমরা অনুমোদিত আকার বাড়িয়েছি, আমরা জানি যে আমরা এটির মধ্যে সবচেয়ে ছোট কুকি) এবং আমরা ফিলিংটি রেকর্ড করি।

ফর্ম্যাট এবং মন্তব্য কোড:

using C=System.Console;

class P
{
    static void Main()
    {
        //   32
        // - 45
        // / 47
        // \ 92
        // range 32..127 (no mod for you)

        string D="", // the whole map
            L; // initally each line of the map, later each line of output

        int W=0, // width
            H=0, // length (width * height)
            z=0, // search tracker
            d, // check direction (this is backwards (1 byte saving!))
            q, // check tracker
            c, // counter (truely, this is the distance from the right to the left)
            //M, // c max (now inlined as z/H)
            j, // horiontal tracker
            b; // - count, and reverse counter

        // read map and width
        for(;(L=C.ReadLine())!=null; // read a line, while we can
                H+=W=L.Length) // record the width, and increment height
            D+=L; // add the line to the map

        var B=new int[H]; // whether this filling has been used already (0 -> false, >0 -> true)

        for(d=W; // init direction
            (d=-d)>0|| // swap direction, else increment z (this allows us to run the check for the same z twice with opposite direction)
            ++z<H*H; // for all M, for all q (z<H -> M=z/H=0 -> no valid cookies, so we can safetly skip them)
            )
            for(//M=z/H, // c allow (now inlined)
                c=1, // reset counter
                q=z%H; // note position
                c<=z/H& // counter check
                // no need for a left check: if we run off the left end, then the right check will necessarily fail
                q%W+c<W& // right check
                q>=d& // high check
                q<H+d&& // low check (short-circuit lookups)
                D[q]==(d>0?92:47)&D[j=q+c]==(d<0?92:47); // /\ or \/ check, and set j=q+c
                    q-=d+1, // move left tracker
                    c+=2) // increase counter (move right tracker)
            {
                // count the number of '-' into b
                for(b=0; // zero b
                    j>q; // for each element in the row below
                        ) // empty
                    b+=D[--j-d]==45?2:0; // add 2 to b if we tap a '-'

                // j = q

                // check valid before looking up cHaracter (so we don't mark unused stuff as taken)
                // if we are at the current max count, and we have enough -, then we are valid and should be commited
                for( // this runs either one or zero times, we only have a for here (rather than an if) so we can ditch a pair of braces
                    char h='-', // default filling
                         e; // filling we are considering
                    c==z/H&b>c;
                        C.WriteLine(h+" "+c/2)) // print filling and count
                    // continuously compute character
                    for(b=c++; // count b backwards, starting from c (add 1 to c so we can /2 in print)
                        b>1;j=q+=d+1,b-=2) // count q backwards toward z%H (where q came from), and b backwards toward 1 (for each row)
                        for(;j<q+b;) // for each cell in row
                            B[j]= // mark cell as taken (h,e > 0)
                            h= // record filling
                                B[j]<1& // check cell not already used
                                h==45& // '-'
                                (e=D[j++])!=47& // '/'
                                e!=92& // '\'
                                e>32 // ' '
                                ?e:h; // take first filling we can
                    // c runs out after this (exists both loops), so no need to action
            }
    }
}

৪ টি পরীক্ষার ক্ষেত্রে আউটপুট:

testcase #1
. 2
. 2
@ 3
- 4
* 4

testcase #2
- 1
- 1
- 2
d 2
* 2
- 3

testcase #3
- 1
- 1
- 1
- 1
- 2
- 2
: 2

testcase #4
- 1
- 1
- 2
$ 2
# 2
- 3
x 4
- 4

এটি সি # তে কতটা কমপ্যাক্ট তা দেখে আমি অবাক! সাবাশ!
চার্লস

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