खुदाई खदान समयबद्धता


11

क्या आप निर्माणों के शांत समय को देखना पसंद करते हैं या मिनटों में बड़े पैमाने पर काम करते हैं? आओ यहाँ एक बनाते हैं।
हम एक उत्खनन उत्खनन करते हुए उत्खनन करते हुए देखेंगे, जिससे प्रत्येक दिन पूरी प्रगति देखने के लिए चित्र बनेंगे। और आपका काम हमें इस प्रक्रिया को दिखाना है!

क्वारी को इसकी पहली परत की चौड़ाई से परिभाषित किया गया है।
खुदाई एक दिन में खोदने की अपनी क्षमता से परिभाषित होती है।

इनपुट

खदान की चौड़ाई। पूर्णांक संख्या, हमेशा> = 1.
खुदाई खुदाई की गति। पूर्णांक संख्या, हमेशा> = 1।

उत्पादन

प्रत्येक दिन खदान खोदने की प्रगति। फ्लैट अछूता जमीन के साथ शुरू हुआ और पूरा खदान के साथ समाप्त हुआ।

नियम

  • अंतिम दिन खुदाई करने में कम इकाइयाँ हो सकती हैं, खुदाई करने में सक्षम है। अत्यधिक काम का उपयोग कहीं भी नहीं किया जाएगा, इसलिए आपको बस पूरी तरह से खोदने का उत्पादन करना चाहिए।

  • सभी दिनों की प्रगति एक बार में आउटपुट में मौजूद होनी चाहिए। आप आउटपुट में पिछले दिन की प्रगति को स्पष्ट या अधिलेखित नहीं कर सकते।

  • प्रत्येक दिन के आउटपुट के लिए अनुगामी और अग्रणी न्यूलाइन्स किसी भी उचित संख्या में स्वीकार्य हैं।

  • यह , इसलिए अपने कोड को यथासंभव कॉम्पैक्ट बनाएं।

स्पष्टीकरण

काम एक समतल जमीन से शुरू होता है। प्रदर्शित जमीन की लंबाई खदान की चौड़ाई + 2 है। इसलिए खदान के दोनों किनारों पर हमेशा एक अंडरस्कोर चरित्र होगा।

__________

डग खदान इस तरह की चौड़ाई के लिए भी लग रही है:

_        _      
 \      /
  \    /
   \  /
    \/

और विषम चौड़ाई के लिए इस तरह

_       _      
 \     /
  \   /
   \ /
    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

इसे चलाएं और डीबग करें


बहुत बढ़िया! स्पष्टीकरण की प्रतीक्षा में: D
मृत पोस्सम

@DeadPossum: आपको केवल एक सप्ताह इंतजार करना था!
पुनरावर्ती

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`^_+;
__

प्रत्येक पंक्ति में 2 को हटाएं Sऔर बढ़ाएं W। यह हमें G;Dप्रत्येक दिन के लिए देता है ।

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

जबकि Dनॉनज़ेरो है, Dया तो G-2लाइन से खोदो (इसलिए पहले और आखिरी अक्षर हमेशा बचे रहते हैं), गहराई को अगली पंक्ति में ले जाना। प्रत्येक पंक्ति >पिछले की तुलना में एक अधिक से प्रेरित है । नई खोदी गई लाइनों में ए भी शामिल है <

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

रिक्त स्थान में इंडेंट को चालू करें और निम्नलिखित _को ए में \

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

यदि a <अनुसरण \कर रहा है V, तो इसे a में बदलें , यदि यह अनुसरण कर रहा है , तो इसे a में _बदल दें /। सभी <एस और ;एस को हटा दें ।


रेटिना मुझे किसी कारण से परेशान करता है ।_ बहुत बढ़िया!
मृत पोस्सम

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)
16

@ ओव्स tसंभवतः इनबिल्ट भी हो सकते हैं, जिसके परिणामस्वरूप 257 बाइट्स होंगे
जोनाथन फ्रीच

@ डेडपॉसम फिक्स्ड
TFeld

@TFeld अच्छा काम!
मृत पोसुम

1
  • गोल्फ प्रगति पर है

जावास्क्रिप्ट (Node.js) , 329 315 307 300 301 298 285 275 260 254 बाइट्स

  • अजीब w पर त्रुटि के लिए निश्चित समाधान जोड़ी (@ @ धन्यवाद के लिए) 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अजीब है अगर काम नहीं करता है।
शैगी

@ शागि तय :)
डैनियलइंडी

@HermanLauenstein क्या आप अधिक विशिष्ट हो सकते हैं?
डैनियलइंडी

आपको चर असाइनमेंट ( f=) की गणना करने की आवश्यकता नहीं है और आप पैरामीटर्स पर करीकरण करके एक और बाइट बचा सकते हैं ( w=>s=>)।
शैगी

@DeadPossum 7,3 के लिए काम करने लगता है क्या आपको यकीन है? क्या आप अपेक्षित आउटपुट डाल सकते हैं?
डैनियलइंडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.