ฉันเดินได้กี่ก้าว


14

pedometer ง่ายสามารถสร้างแบบจำลองโดยลูกตุ้มที่มีสองสวิทช์ตรงข้ามด้านหนึ่งที่ x = 0 และเป็นหนึ่งในที่ x = ลิตร เมื่อลูกตุ้มสัมผัสกับสวิตช์ไกลสามารถคาดเดาความทะเยอทะยานได้ครึ่งก้าว เมื่อติดต่อสวิตช์ใกล้ขั้นตอนจะเสร็จสมบูรณ์

รับรายการเลขจำนวนเต็มแทนตำแหน่งของลูกตุ้มกำหนดจำนวนขั้นตอนเต็มที่บันทึกไว้ในเครื่องนับก้าว

อินพุต

  • จำนวนเต็ม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
ไม่ใช่ Charles

1
@NotthatCharles เพิ่มแล้ว
lirtosiast

ฉันถือว่าขั้นตอนเสมอคือ: ติดต่อที่ไกลสุดแล้วใกล้จบ นั่นคือ: ใกล้จบแล้วสุดปลายไม่ใช่ขั้นตอนเต็ม ดังนั้นการป้อนข้อมูล8, [0 8 0 8]ควรจะให้ไม่ได้1 2ฉันถูกไหม?
Luis Mendo

@DonMuesli ใช่
lirtosiast

คำตอบ:


4

CJam, 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

Javascript ES6 57 ไบต์

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

ขอบคุณ @NotThatCharles สำหรับ -4


1
ทำไมไม่แยกจากกัน/10/?
ไม่ใช่ชาร์ลส์ที่

@NotthatCharles ฉันแน่ใจว่ามันใช้งานไม่ได้ลองเลยและมันยอดเยี่ยมมาก! - ขอบคุณ
Charlie Wynn

4
หนึ่ง Charles ไปยังอีก;)
ไม่ใช่ Charles

1

Perl, 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;

ใช้โอเปอเรเตอร์ flip-flop ของ perl และนับจำนวนครั้งที่มันกลับเป็นเท็จ


1

Pyth, 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

ทับทิม, 42

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

rfalseเริ่มต้นเป็น เราสลับrที่ส่วนท้ายของแต่ละแทร็กและเพิ่มเข้าไปในการนับของเรา จากนั้นให้นับครึ่ง (การปัดเศษลง) เพื่อลดจำนวนขั้นตอนลง


0

จอประสาทตา, 34

-1*

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

ลองออนไลน์! หรือลองกับการป้อนข้อมูลทศนิยม

รับอินพุตเป็น unary ตัวเลข unary เชิงลบจะถูกใช้เป็น-111...และศูนย์คือสตริงว่าง นับจำนวนครั้งที่ตัวเลขแรกปรากฏตามด้วยศูนย์ ใช้กลุ่มอะตอมเพื่อรับประกันว่าการแข่งขันมีน้อย (กลุ่มอะตอมที่น่าเศร้านั้นไม่ได้จับภาพดังนั้นจึงต้องมีการห่อในกลุ่มอื่น ... )


0

Python 3, 82

บันทึก 2 ไบต์ด้วย DSM

ยังไม่ได้เล่นกอล์ฟสุด

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

Clojure 64 ไบต์

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

แผนที่ค่าน้อยกว่าหรือเท่ากับศูนย์จะ0มีขนาดใหญ่กว่าหรือเท่ากันของความยาว1และอื่น ๆ ""เพื่อเป็นสตริงว่าง สิ่งนี้จะถูกรวมเข้ากับสตริงและ"10"จะถูกนับจำนวน


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.