কোয়ারির টাইমলেস খনন করা হচ্ছে


11

আপনি কি নির্মানের শীতল টাইমলেসগুলি দেখতে বা মিনিটের মধ্যে করা অন্য বিশাল কাজগুলি দেখতে পছন্দ করেন? এখানে একটি তৈরি করা যাক।
আমরা পুরো অগ্রগতি দেখতে প্রতিদিন খননকৃত খননকারী খনির দিকে তাকিয়ে থাকব। এবং আপনার কাজটি আমাদের এই প্রক্রিয়াটি দেখানো হয়!

ক্যারিটি তার প্রথম স্তরের প্রস্থ দ্বারা সংজ্ঞায়িত করা হয়।
একদিন খনন করার ক্ষমতা দ্বারা খননকারীকে সংজ্ঞায়িত করা হয়।

ইনপুট

কোয়ারির প্রস্থ। পূর্ণসংখ্যার নম্বর, সর্বদা> = 1.
খননকারীর খননের গতি। পূর্ণসংখ্যার নম্বর, সর্বদা> = 1।

আউটপুট

প্রতিদিন খনন খনির অগ্রগতি। ফ্ল্যাট অপ্রচলিত স্থল দিয়ে শুরু এবং সমাপ্ত কোয়ারিতে সমাপ্ত।

বিধি

  • শেষ দিনে খনন করতে সক্ষমের চেয়ে কম খনন করতে ইউনিট থাকতে পারে। অতিরিক্ত কাজ কোথাও ব্যবহার করা হবে না, সুতরাং আপনার খালি খনির পুরোপুরি আউটপুট করা উচিত।

  • সমস্ত দিন অগ্রগতি একবারে আউটপুট উপস্থিত থাকতে হবে। আপনি আউটপুটে আগের দিনের অগ্রগতি সাফ বা ওভাররাইট করতে পারবেন না।

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

  • এটি , সুতরাং আপনার কোডটি যথাসম্ভব কমপ্যাক্ট করুন।

ব্যাখ্যা

সমতল মাটি দিয়ে কাজ শুরু হয়। প্রদর্শিত গ্রাউন্ডের দৈর্ঘ্য কোয়ারির প্রস্থ + ২ So

__________

সমতল প্রস্থের জন্য খনির খোঁজটি এমন দেখাচ্ছে:

_        _      
 \      /
  \    /
   \  /
    \/

বিজোড় প্রস্থের জন্য এটি পছন্দ করুন

_       _      
 \     /
  \   /
   \ /
    V

এখানে কোয়ারির অগ্রগতির উদাহরণ রয়েছে:

_ _______
 V          dug 1 unit

_  ______
 \/         dug 2 units

_     ___
 \___/      dug 5 units


_       _
 \   __/    dug 10 units
  \_/

সম্পূর্ণ অগ্রগতির উদাহরণ। কোয়ারি প্রস্থ: 8. খননকারীর গতি: প্রতিদিন 4 ইউনিট

__________

_    _____
 \__/

_        _
 \______/

_        _
 \    __/
  \__/

_        _
 \      /
  \  __/
   \/

_        _
 \      /
  \    /
   \  /
    \/

Cornercases

খননকারীকে শেষ দিন ঠিক তার সক্ষমতা (গতি) খনন করতে হবে

Width: 7, Speed: 3
Width: 10, Speed: 4 

উত্তর:


1

স্ট্যাক্স , 65 বাইট

Θ└R4∞√4Fµ■zJ┐╚▌▼ZJ╧fφ½à╘▲☼å♥s≥┤ÖòOúU╬ΩmPê|ë↕ƒ].Y┴↓á÷>}St☺┐B╒╞O☼╧O

এটি চালান এবং এটি ডিবাগ করুন

প্রথমটি যদি একটি সমতল স্ট্রিংয়ে খনন করা অক্ষর গণনা করে। তারপরে এটি গভীরতা যুক্ত করে। উদাহরণস্বরূপ "_V___"খননের একদিন এবং "_\V/_"এটি সমাপ্ত ফ্ল্যাট স্ট্রিং।

এটি খননের এক ইউনিট করার জন্য এই পদ্ধতিটি ব্যবহার করে।

  1. একটি একক "\" দিয়ে শুরু করুন, এবং "_" অক্ষরের উপযুক্ত সংখ্যা।
  2. যদি "V_" স্ট্রিংটিতে থাকে তবে এটিকে "/" দিয়ে প্রতিস্থাপন করুন।
  3. অন্যথায়, যদি "/ _" স্ট্রিংটিতে থাকে তবে এটিকে "_ /" দিয়ে প্রতিস্থাপন করুন।
  4. অন্যথায়, "\ _" যদি স্ট্রিংটিতে থাকে তবে এটিকে "\ V" দিয়ে প্রতিস্থাপন করুন।
  5. নতুন স্ট্রিংটি খননের এক ইউনিট থেকে প্রাপ্ত ফলাফল। পদক্ষেপ 2 থেকে পুনরাবৃত্তি করুন।

এখানে পুরো প্রোগ্রামটি আনপ্যাকড, অবরুদ্ধ এবং মন্তব্য করেছে।

'_*'\s+                 initial string e.g. "\_______"
{                       generator block to get each day's flat digging results
  {                     block to repeat digging within each day
    "V_\//__/\_\V"4/    replacement strings
    {[2:/|em|!H         find the first substring that exists and do replacement
  };*                   repeat digging within day specified number of times
gu                      get all unique results
                            when digging is complete, the result duplicates
{Dm                     drop the leading "\" characters from each result
F                       for each day's flat result, execute the rest of the program
  '_|S                  surround with "_"
  M                     split into chars; e.g. ["_", "\", "/", "_"]
  c|[                   copy and get all prefixes
  {                     mapping block to get "depth" of each character
    '\#                 get number of backslashes in this prefix (A)
    _1T'/#-             get number of forward slashes prior to last character of prefix (B)
    'V_H=+^             is the current character "V"? 1 for yes. (C)
  m                     map prefixes to A - B + C + 1
  \                     zip depths with original characters
  {E)m                  prefix each character with spaces; e.g. ["_", " \", " /", "_"]
  M                     transpose grid; e.g. ["_  _", " \/ "]
  m                     print each row

এটি চালান এবং এটি ডিবাগ করুন


সাবাশ! ব্যাখ্যার অপেক্ষায়: ডি
ডেড পসসাম

@ ডেডপসসাম: আপনাকে কেবল এক সপ্তাহ অপেক্ষা করতে হবে!
পুনরাবৃত্তির

3

রেটিনা 0.8.2 , 163 156 বাইট

.+
$*_
(_+)¶(_+)
$2¶$1¶$1
r`__\G
$%`$&
¶
;
(?<=(_+);.*)(?<=;_+;\1*)_
¶$`_
m`^_+;
__
+`(>*)_(_+)(_+<?;)\2
$1_$.2$* $3¶$1>$2<;
T`>\_` \\`>+_
T`\\\_;<`V/_`.<|;

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

.+
$*_

ইনপুটগুলিকে অচেনা রূপান্তর করুন। এটি আমাদের দেয় W¶S

(_+)¶(_+)
$2¶$1¶$1

ইনপুটগুলি অদলবদল করুন এবং প্রস্থটি সদৃশ করুন। এটি আমাদের দেয় S¶W¶W

r`__\G
$%`$&

কোয়ারির ভলিউম গণনা করুন। এটি আমাদের দেয় S¶W¶V

¶
;

ইনপুটগুলিকে এক লাইনে যোগ দিন। এটি আমাদের দেয় S;W;V

(?<=(_+);.*)(?<=;_+;\1*)_
¶$`_

তার নিজস্ব লাইনে প্রতিটি দিনের অগ্রগতির পরিমাণ গণনা করুন। প্রতিটি দিন বিন্যাস রয়েছে S;W;Dযেখানে, Dহয় 0প্রথম লাইন দ্বারা বাড়তি উপর Sপ্রতিটি দিন পর্যন্ত এটি ছুঁয়েছে V

m`^_+;
__

মুছুন Sএবং Wপ্রতিটি লাইনে 2 দ্বারা বৃদ্ধি করুন। এটি আমাদের G;Dপ্রতিটি দিনের জন্য দেয় ।

+`(>*)_(_+)(_+<?;)\2
$1_$.2$* $3¶$1>$2<;

Dননজারো থাকাকালীন , উভয়ই লাইনটি থেকে Dবা খনন করুন G-2(যাতে প্রথম এবং শেষ অক্ষর সর্বদা বাম হয়), গভীরতাটি পরবর্তী লাইনে সরান। প্রতিটি লাইন >পূর্বের তুলনায় আরও একটি দিয়ে ইন্ডেন্ট করা হয় । নতুন খনন করা লাইনের মধ্যে একটিও রয়েছে <

T`>\_` \\`>+_

স্থানে ইন্ডেন্ট এবং নিম্নলিখিত ঘুরুন _একটি মধ্যে \

T`\\\_;<`V/_`.<|;

যদি একটি <একটি অনুসরণ করে থাকে \তবে এটিকে একটিতে পরিণত করুন V, যদি এটি অনুসরণ করে _তবে এটিতে পরিণত করুন /। সমস্ত <গুলি এবং ;গুলি মুছুন ।


রেটিনা কিছু কারণে আমাকে অবাক করে ._। সাবাশ!
ডেড পসসাম

1

পাইথন 2 , 265 বাইট

w,s=input();R=range((3+w)/2)
d=0
while d-s<sum(range(w%2,w+1,2)):
 q=[[' _'[i<1]]*(w+2)for i in R];D=d
 for i in R[:-1]:
  a=min(D,w-i*2);D-=a
  if a:q[i][1+i:1+i+a]=[' ']*a;q[i+1][1+i:1+i+a]=(['\\']+['_']*(a-2)+['/'])*(a>1)or['v']
 for l in q:print''.join(l)
 d+=s

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


2x 1+i+aথেকে i-~a
কেভিন ক্রুইজসেন

sum(range(0,w+1,2))হতে পারেw/2*(w/2+1)
ovs

@ovs এগুলি tসম্ভবত অন্তর্ভুক্ত করা যেতে পারে, ফলে 257 বাইট হয়
জনাথন ফ্রেচ

@ ডেডপসাম ফিক্সড
টিফিল্ড

@ফিল্ড ভাল কাজ!
ডেড পসসাম

1
  • গল্ফ চলছে

জাভাস্ক্রিপ্ট (নোড.জেএস) , 329 315 307 300 301 298 285 275 260 254 বাইট

  • বিজোড় ত্রুটিতে ত্রুটিযুক্ত স্থির সমাধানের দ্বৈত (@ শেগি ধন্যবাদ) + 2 বাইট কমিয়ে দিন
  • 1 বাইট কমিয়ে দেওয়ার জন্য @ হারমান লাউস্টেইনকে ধন্যবাদ
(w,s)=>{h=[...Array(-~w/2+1|0)].map((x,i)=>[...(i?" ":"_").repeat(w)])
for(t=S="";t<s&&h.map((x,i)=>S+=(p=i?" ":"_")+x.join``+p+`
`);)for(y in t=s,h)for(x in D=h[y])if(D[x]=="_"&&t){(d=h[-~y])[x]=x^y?(d[x-1]=x^-~y?"_":"\\","/"):"v"
D[x]=" "
t--}return S}

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

ব্যাখ্যা

(w,s)=>{
h=[...Array(-~w/2+1|0)]                       //the height of the quarry when finished is w/2+1 if even or (w+1)/2+1 if odd
.map((x,i)=>                                  
    [...(i?" ":"_").repeat(w)]                //the first row is the _ w times (i will explain why w and not w+2 in the following lines) afterwards lets just fill with spaces so the output would be clear(when convertion to string)
    )                                         
for(t=S="";                                   //t="" is like t=0(we actually need t to be different from s in the start and s>=1), S will hold the final output
t^s&&                                         //if t not equals s -> it means that now changes were made to the quarry->it means we finished digging
h.map((x,i)=>                                 
S+=(p=i?" ":"_")+x.join``+p+`                 //here comes the reason for w and not w+2. because the border _XXXX_ are not to be touched i only add them to the output and not woking with them in the solution
                                              //that ways its much easier to replace the correct chars. so here i just add _ to either sides if its the first row otherwise space(to pad correctly).
                                              //in the end i add a new line to differ from the previous day
`);)
    for(y in t=s,h)                           //always update t back to s so we know weve passed a day
        for(x in D=h[y])
            if(D[x]=="_"&&t)                  //if the current cell is _ we need to work, but only if the day have yet to pass(t)
            {
                (d=h[-~y])[x]=                //updating the row below us because we just dug a hole
                x^y?                          //if x == y that means we are digging the first hole in the row below
                (d[x-1]=x^-~y?"_":"\\", //we want to update the row below and cell before([y+1][x-1]) only if its not the first cell(AKA not space). if v we need \ other wise _
                    "/")                          //other wise (x!=y) we put "/"
                :"v"                          //so we should put v (if they are equal)
                D[x]=" "                      //always remove the _ from the current one because we dug it
                t--}                          //decrement the counter for the day by one digging
return S}

wবিজোড় হলে কাজ করে না ।
শেগি

@ শেগি স্থির করেছেন :)
ড্যানিয়েলইন্ডি

@ হারমানলাউনস্টাইন আপনি কি আরও নির্দিষ্ট করে বলতে পারেন?
ড্যানিয়েলইন্ডি

আপনাকে ভেরিয়েবল অ্যাসাইনমেন্ট ( f=) নির্ধারণ করতে হবে না এবং আপনি প্যারামিটারগুলি ( w=>s=>)গুলি কারি করে অন্য একটি বাইট সংরক্ষণ করতে পারেন ।
শেগি

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