क्या इलेक्ट्रिक गैराज का दरवाजा खुला है?


24

मेरा इलेक्ट्रिक गेराज दरवाजा इस तरह काम करता है:

  • दरवाजे को नियंत्रित करने के लिए सिर्फ एक पुश बटन है
  • यदि दरवाजा पूरी तरह से बंद है और मैं बटन दबाता हूं, तो दरवाजा खुलने लगता है। इसे पूरी तरह से खुलने में 10 सेकंड का समय लगता है
  • यदि दरवाजा पूरी तरह से खुला है और मैं बटन दबाता हूं, तो दरवाजा बंद होने लगता है। पूरी तरह से बंद होने में 10 सेकंड लगते हैं
  • यदि दरवाजा खोलने या बंद करने के माध्यम से हिस्सा है और मैंने बटन मारा है, तो दरवाजा बंद हो जाता है और आंशिक रूप से खुला रहता है।
  • जब भी दरवाजा चलना बंद हो जाता है, या तो एक खुली या करीबी कार्रवाई के स्वत: पूर्ण होने से, या एक कार्रवाई के माध्यम से बटन भाग को धक्का देकर मैन्युअल रुकावट से, तो तंत्र रिवर्स होगा और अगली कार्रवाई के लिए अपनी दिशा याद रखेगा।
  • यदि दरवाजा बंद होने पर बटन को धक्का दिया जाता है, लेकिन आंशिक रूप से खुला है, तो इसके पूरा होने के लिए समय की मात्रा 10 सेकंड का एक अंश होगी, जिस राशि को कार्रवाई को पूरा करने के लिए इसे स्थानांतरित करने की आवश्यकता होती है।

मान लें कि दरवाजा शुरू में पूरी तरह से बंद है।

पूर्णांकों की एक इनपुट सूची दी जाएगी। ये पूर्णांक सेकंड की संख्या हैं जो मैं नियंत्रण बटन के लगातार पुश के बीच प्रतीक्षा करता हूं।

आउटपुट दो चीजें:

  • सभी बटन पुश पूरा होते ही दरवाजे की स्थिति को दर्शाने वाला प्रतिशत और दरवाजा स्थिर अवस्था में पहुंच गया है। %प्रतीक का आउटपुट वैकल्पिक है।
  • अगले बटन पुश पर दरवाजा किस दिशा में यात्रा करेगा, इसका एक स्पष्ट संकेत। यह up/ down, U/ D, +/ -, 1/ 0या जो भी आप चुनते हैं , हो सकता है ।

आप मान सकते हैं कि एक खुली या करीबी कार्रवाई को पूरा करने के लिए दरवाजा 10 सेकंड से कम का समय लेता है।

उदाहरण इनपुट:

<empty list>  # button was pushed just once
20            # button was pushed twice with 20 seconds between
10
5
20 20
10 10
5 5
1 2 3
8 9 10 11
11 10 9 8 7

उपरोक्त इनपुट के अनुरूप अपेक्षित आउटपुट

100% D
0% U
0% U
50% D
100% D
100% D
0% U
100% D
0% U
20% U

पिछले परीक्षण का काम किया उदाहरण

  • दरवाजा बंद होने लगता है। बटन धकेल दिया जाता है
  • 11 सेकंड रुकें। दरवाजा पूरी तरह से खुल गया। बटन धकेल दिया जाता है।
  • 10 सेकंड प्रतीक्षा करें। दरवाजा पूरी तरह से बंद हो गया। बटन धकेल दिया जाता है।
  • 9 सेकंड प्रतीक्षा करें। बटन धकेल दिया जाता है। दरवाजा 90% खुला रहता है।
  • 8 सेकंड प्रतीक्षा करें। बटन धकेल दिया जाता है। दरवाजा बंद होने लगता है।
  • 7 सेकंड रुकें। बटन धकेल दिया जाता है। दरवाजा 20% खुला है। अगली दिशा होगी।

यदि आप बटन दबाते हैं तो आप गैराज का दरवाजा आधे-खुले में बंद कर देते हैं? मेरा नहीं, केवल खोलने के लिए।
Bálint

@ मेरा दोनों के लिए रास्ता।
डिजिटल ट्रामा

@ माल्टीसेन अब प्रतिशत के साथ रहने की अनुमति देता है।
डिजिटल ट्रामा

क्या यह ठीक है अगर फ्लोटिंग पॉइंट नंबर आउटपुट है अगर इनपुट में फ्लोटिंग पॉइंट नंबर (ओं) भी हैं?
आर। काप

@ R.Kap हाँ, यह ठीक है।
डिजिटल ट्रामा

जवाबों:


6

लुआ, 258 248 242 बाइट्स

u,s,p=1>0,0>1,0;io.read():gsub("%d+",function(a)if(not s)then p=u and p+a or p-a;if(p>=10 or p<=0)then s,p=1>0,p>0 and 10 or 0;end;u,s=not u,not s else s=0>1;end end)if(not s)then p=u and 10 or 0;u=not u;end;print(10*p.."% "..(u and"U"or"D"))

Ungolfed

u,s,p=true,false,0;                          -- Up direction, Stopped, Position
io.read():gsub("%d+",function(t)             -- For each number in input
    if(not s)then                            -- If door wasn't stopped
        p=u and p+t or p-t;                  -- Position = Moving up ? +t : -t
        if(p>=10 or p<=0)then                -- If door fully opened or closed
            s,p=true,p>0 and 10 or 0;        -- Then door stopped at 0 or 10
        end 
        u,s=not u,not s;                     -- Toggle direction and toggle stopped
    else 
        s=false;                             -- If stopped, nothing happened, un-stop.
    end 
end)
-------------------- Done pressing the button --------------------
if(not s)then                                -- If left off moving
    p=u and 10 or 0;                         -- Finish movement
    u=not u;                                 -- Toggle direction
end 
print(10*p.."% "..(u and"U"or"D"))           -- Output answer

मैं नहीं देखता कि आपके परीक्षण के मामले कैसे सही हो सकते हैं ...

20 20 -- Initial push, after 20, garage is at 100, push to start it down, after 20, garage is at 0, push to start it up, garage finishes up.
10 10 -- Same as above
1 2 3 -- 0 U Moving, wait 1, 1 D Stopped, wait 2, 0 U stopped, wait 3, 100 D stopped

ओपी निश्चित


मैंने अभी अपनी प्रविष्टि पूरी की है और मैं आपके परिणामों से भी सहमत हूँ।
नील


3

जावास्क्रिप्ट (ईएस 6), 109 106 बाइट्स

a=>a.map(e=>(s^=1)?(r-=e*(d=-d))>9?(s=0,r=10):r<1?(r=s=0):r:r,r=s=0,d=1)&&(s?r:5*++d)*10+(d-s?"% D":"% U")

@DigitalTrauma एक अनुकूलन त्रुटि रही होगी। मैंने इसे दोबारा अपनाया और किसी तरह इस बार 3 और बाइट्स बचाने में कामयाब रहा!
नील

3

रूबी, 152 बाइट्स

->v{u,s,a=!!1,!0,0;v.map{|w|!s ?(a=u ? a+w : a-w;a>=10 ?(s,a=!!1,10):a<=0 ?(s,a=!!1,0):0;u,s=!u,!s):s=!0};!s ?(a=(u=!u)?0:10):0;p"#{10*a}% #{u ??U:?D}"}

परीक्षण के मामलों:

f=->v{u,s,a=!!1,!0,0;v.map{|w|!s ?(a=u ? a+w : a-w;a>=10 ?(s,a=!!1,10):a<=0 ?(s,a=!!1,0):0;u,s=!u,!s):s=!0};!s ?(a=(u=!u)?0:10):0;p"#{10*a}% #{u ??U:?D}"}

f[[]]            # => "100% D"
f[[20]]          # => "0% U"
f[[10]]          # => "0% U"
f[[5]]           # => "50% D"
f[[20,20]]       # => "100% D"
f[[10,10]]       # => "100% D"
f[[5,5]]         # => "0% U"
f[[1,2,3]]       # => "100% D"
f[[8,9,10,11]]   # => "0% U"
f[[11,10,9,8,7]] # => "20% U"

एक मजेदार पक्ष नोट के रूप में, आप (मुझे लगता है) ->v{को बदलकर, एक बाइट की कीमत पर अतिरिक्त कोष्ठक की आवश्यकता को हटा सकते हैं ->*v{। इसके अलावा, क्या आपको पहले के :साथ-साथ रिक्त स्थान की आवश्यकता है ? और क्या आपको यकीन है कि :a<=0यह नहीं है (:a) <= 0?
निधि मोनिका का मुकदमा

अच्छी टिप! हालांकि संस्करण तक पहुंच के साथ तौला जाना चाहिए। के रूप में :a<=0, मैं एक ArgumentError: comparison of Symbol with 0 failedअगर यह काम नहीं किया मिल जाएगा । मुझे लगता है कि क्योंकि यह हैरान था ?और जानता है कि यह एक टर्नरी ऑपरेटर में है, यह सिर्फ काम करता है। नियम वास्तव में अजीब हैं। मैंने उन स्थानों पर रिक्त स्थान या कोष्ठक लगाए हैं, जो सिंटैक्स त्रुटियों जैसे SyntaxError: unexpected tLABELऔर NoMethodError: undefined method यू से बचने के लिए आवश्यक हैं ? '`।
br3nt

यदि आप कोई सुधार देख सकते हैं तो एक संपादन करने के लिए स्वतंत्र महसूस करें। मैं उम्मीद कर रहा था कि मैं इससे छुटकारा पा सकता हूं a=u ? a+w : a-wऔर इसे बदलकर a=a+w*dजहां dहै 1या -1दिशा के आधार पर है, लेकिन मैंने अभी तक इस पर काम नहीं किया है।
br3nt

जो मैं समझता हूं, कोड को बेहतर बनाने के लिए संपादन आमतौर पर हतोत्साहित किया जाता है; इसके बजाय, आपको टिप्पणी करनी चाहिए। सुधार के लिए अपने विचार के लिए, मुझे पता नहीं; ऐसा लगता है कि यह काम कर सकता है, लेकिन मुझे यकीन है।
निधि मोनिका का मुकदमा

2

पायथन 3.5, 193 187 185 181 175 173 172 बाइट्स:

def G(*p):
 O=100;y=0;l=10;z,v='UG'
 for g in[*p,O]:
  if v=='G':Q=O*g//10;y=min(max(0,[Q,y-Q][z=='D']),O);l=min(10,g);z='UD'[z=='U']
  v='GS'[(O>y>0)*(v!='S')]
 print(y,z)

उदाहरण के लिए 1,2,3,4,5या यहां तक ​​कि अल्पविराम से अलग किए गए नंबरों के रूप में इनपुट लेता है 1.2,3.4,7.8,9.2। आउटपुट अगले चरण में दरवाजा ऊपर या नीचे जा रहा है कि क्या Uया Dक्रमशः। समय के साथ अधिक गोल्फ जाएगा।

यह ऑनलाइन की कोशिश करो! (Ideone) (यहाँ इनपुट को एक सूची के रूप में लिया गया है जिसमें अल्पविराम से अलग संख्याएँ हैं, उदाहरण के लिए [1,2,3,4,5]।)


1

PHP, 128 120 बाइट्स

$d=$argv[]=10;
foreach($argv as$a)
  if($r){$p=min(max($p+$a*$d,0),100);$r=$p<1||99<$p;$d=-$d;}else$r=1;
echo"$p% ".DU[$d>0];

कोड बॉक्स में फिट करने के लिए कोड को यहां लपेटा गया है। सब कुछ एक लाइन पर रखो, इसके सामने PHP ओपन मार्कर रखो और इसे एक फ़ाइल में सहेजें। या कमांड लाइन का उपयोग करके इसे चलाएं php -d error_reporting=0 -r '...the code...' [arguments]

Ungolfed स्रोत कोड, टेस्ट स्वीट और उपयोग के उदाहरण पर पाया जा सकता GitHub

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.