कितने कदम चले?


14

एक साधारण पेडोमीटर को विपरीत दिशा में दो स्विचों के साथ एक पेंडुलम द्वारा तैयार किया जा सकता है - एक x = 0 पर और एक x = l पर । जब पेंडुलम दूर के स्विच से संपर्क करता है, तो एंबुलेटर को आधा कदम उठाने के लिए माना जा सकता है। जब यह निकट स्विच से संपर्क करता है, तो चरण पूरा हो जाता है।

पेंडुलम की स्थिति का प्रतिनिधित्व करने वाले पूर्णांक की एक सूची को देखते हुए, पेडोमीटर पर दर्ज पूर्ण चरणों की संख्या निर्धारित करें।

इनपुट

  • एक पूर्णांक l > 0, ट्रैक की लंबाई।

  • प्रत्येक समय पेडोमेटर्स के पेंडुलम की स्थिति का प्रतिनिधित्व करने वाले पूर्णांक की एक सूची।

उत्पादन

पूर्ण चरणों की संख्या को मापा गया। पेंडुलम दूर के स्विच (x> = l) और फिर पास के स्विच (x <= 0) से संपर्क करने पर एक कदम उठाया जाता है।

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

8, [8, 3, 0, 1, 0, 2, 2, 9, 4, 7]
1

पेंडुलम तुरंत x = 8 पर t = 0 पर दूर के स्विच के साथ संपर्क बनाता है। फिर यह एक कदम पूरा करते हुए t = 2 और t = 4 पर पास स्विच को छूता है। उसके बाद, यह x = 9 पर t = 8 पर सुदूर स्विच को फिर से छूता है, लेकिन यह फिर से पास के स्विच को कभी नहीं छूता है।

1, [1, 5, -1, -4, -1, 1, -2, 8, 0, -4]
3

15, [10, -7, -13, 19, 0, 22, 8, 9, -6, 21, -14, 12, -5, -12, 5, -3, 5, -15, 0, 2, 11, -11, 12, 5, 16, 14, 27, -5, 13, 0, -7, -2, 11, -8, 27, 15, -10, -10, 4, 21, 29, 21, 2, 5, -7, 15, -7, -14, 13, 27]
7

7, [5, 4, 0]
0

7, [5, 8, 6, 1, 2] 
0   

1
किस बारे में 7, [5, 4, 0]? क्या वह 0 या 1 है? यही है - क्या आप मानते हैं कि एक स्विंग हमेशा "पूर्ण लंबाई" होती है? या 7, [5, 8, 6, 1, 2]? क्या वह 0 या 1 है?
नहीं कि चार्ल्स

1
@NotthatCharles जोड़ा गया।
lirtosiast

मैं हमेशा एक कदम मानता हूं: दूर अंत में संपर्क, फिर अंत के पास। वह है: निकट अंत, तो दूर अंत एक पूर्ण कदम नहीं है। तो इनपुट 8, [0 8 0 8]देना चाहिए 1, नहीं 2। क्या मैं सही हूँ?
लुइस मेन्डो

@DonMuesli हां।
lirtosiast

जवाबों:


4

सीजेएम, 27 24 बाइट्स

l~:Xfe<0fe>_[XT]:Y--Y/,(

इनपुट प्रारूप lएक पंक्ति में उसके बाद पेंडुलम पदों की सूची है ।

इसका परीक्षण यहां करें।

व्याख्या

l~     e# Read and evaluate input.
:X     e# Store track length in X.
fe<    e# Clamp each position to X from above.
0f>    e# Clamp each position to 0 from below.
_      e# Duplicate.
[XT]   e# Push the array [X 0].
:Y     e# Store it in Y.
-      e# Set subtraction from the clamped input list. This gives all the
       e# intermediate values.
-      e# Another set subtraction. Remove intermediate values from input list.
Y/     e# Split remaining list around occurrences of ...X 0...
,(     e# Count them and decrement. This is the number of times the pendulum
       e# moved from X to 0.

2

MATL , 22 बाइट्स

>~2G0>~-XzY'nw1)0<-H/k

यह भाषा / संकलक के वर्तमान संस्करण (14.0.0) का उपयोग करता है ।

इनपुट एक ही क्रम और प्रारूप में हैं जैसे कि चुनौती में, एक नई लाइन द्वारा अलग किया गया।

इसे ऑनलाइन आज़माएं!

व्याख्या

>~     % take the two inputs implicitly. Generate an array that contains true 
       % where the second input (array of positions) is >= the first input (l)
2G     % push second input (positions) again
0      % push a 0
>~     % true where the second input (array of positions) is <= 0
-      % subtract: array of 1, -1 or 0
Xz     % discard the 0 values
Y'     % run-length encoding: push values and number of repetitions
n      % length of the latter array: number of half-steps, perhaps plus 1
w1)    % swap. Get first element
0<     % true if that element is -1. We need to discard one half-step then
-      % subtract
H/k    % divide by 2 and round down

1

जावास्क्रिप्ट ईएस 6 57 बाइट्स

(t,a)=>a.map(a=>a<t?a>0?'':0:1).join``.split`10`.length-1

शुक्रिया @NotThatCharles -4 के लिए


1
पर क्यों नहीं बंटा /10/?
चार्ल्स

@NotthatCharles मैं इतना निश्चित था कि काम नहीं किया, बस कोशिश की और यह बहुत अच्छा है! - धन्यवाद
चार्ली व्यान

4
एक चार्ल्स दूसरे को;)
नहीं कि चार्ल्स

1

पर्ल, 28 बाइट्स

के लिए +1 शामिल है -p

STDIN पर अंतरिक्ष से अलग पूर्णांक की एक लंबी रेखा के रूप में इनपुट के साथ चलाएं, पहली संख्या लंबाई है:

perl -p steps.pl <<< "8 8 3 0 1 0 2 2 9 4 7"

steps.pl:

s; ;$'>=$_..$'<1;eg;$_=y;E;

पर्ल फ्लिप-फ्लॉप ऑपरेटर का उपयोग करता है और कई बार गिना जाता है कि यह झूठी है


1

पायथ, 18 बाइट्स

/.:@J,Q0m@S+Jd1E2J

परीक्षण सूट

स्पष्टीकरण:

/.:@J,Q0m@S+Jd1E2J
                      Implicit: Q is the length of the track.
    J,Q0              Set J to [Q, 0]
        m      E      Map over the list
           +Jd        Add the current element to J
          S           Sort
         @    1       Take the middle element.
                      This is the current element, 
                      clamped above by Q and below by 0.
   @J                 Filter for presence in J.
 .:             2     Form 2 element substrings
/                J    Count occurrences of J.

0

रूबी, ४२

->i,a{r=!0
a.count{|v|r^r=v>=i||r&&v>0}/2}

rके रूप में शुरू होता है false। हम rट्रैक के प्रत्येक छोर पर टॉगल करते हैं, और इसे हमारी गिनती में जोड़ते हैं। फिर, चरणों की संख्या प्राप्त करने के लिए (नीचे चक्कर) गिनती को आधा करें।


0

रेटिना, ३४

-1*

^(1*)((?>.*?\1.*? \D))*.*
$#2

इसे ऑनलाइन आज़माएं! या इसे दशमलव इनपुट के साथ आज़माएँ

इनपुट को एकात्मक में ले जाता है, ऋणात्मक एकात्मक संख्याओं को माना जाता है -111...और शून्य रिक्त स्ट्रिंग है। गणना करता है कि पहली संख्या शून्य के बाद दिखाई देती है। एक परमाणु समूह का उपयोग यह सुनिश्चित करने के लिए करता है कि मैच न्यूनतम हैं (दुख की बात है कि परमाणु समूह गैर-कैप्चरिंग हैं इसलिए इसे दूसरे समूह में लपेटना होगा)।


0

पायथन 3, 82

2 बाइट डीएसएम के लिए धन्यवाद बचा लिया।

सुपर गोल्फ अभी तक नहीं।

def f(x,s):
 c=l=0
 for a in s:
  if a>=x:l=x
  elif a<1:c+=l==x;l*=l!=x
 return c

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

assert f(8, [8, 3, 0, 1, 0, 2, 2, 9, 4, 7]) == 1
assert f(1, [1, 5, -1, -4, -1, 1, -2, 8, 0, -4]) == 3
assert f(15, [10, -7, -13, 19, 0, 22, 8, 9, -6, 21, -14, 12, -5, -12, 5, -3, 5, -15, 0, 2, 11, -11, 12, 5, 16, 14, 27, -5, 13, 0, -7, -2, 11, -8, 27, 15, -10, -10, 4, 21, 29, 21, 2, 5, -7, 15, -7, -14, 13, 27]) == 7

0

क्लोजर, 64 बाइट्स

#(count(re-seq #"10"(apply str(for[i %2](condp > i 1 0 %""1)))))

मैप्स शून्य से कम-या-बराबर-बराबर 0, बड़े-से-या-बराबर-बराबर लंबाई 1और अन्य एक खाली स्ट्रिंग के मान को दर्शाता है ""। इसके बाद इसे एक स्ट्रिंग में समेट लिया जाता है और होने वाली घटनाओं "10"को गिना जाता है।


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