충돌 예측 : 강도가 사라질까 요?


20

도로를 시작점으로 0무한정 계속되는 수선 으로 생각하십시오 .

.................................................................

이 도로에 두 차량은 다음과 같습니다 CR. C잡으려고 경찰 R, 강도입니다. C에서 시작 0하고, R도로에 시작 어딘가에 :

C.............................R..................................

경찰은 벌써 움직이고 있어요-강도를 쫓고 있어요 그는 일정한 속도를 가지고 있습니다. 강도가 방금 차에 탔어요 그는 가속하고 있습니다. 각 진드기, 강도는 그의 가속에 의해 증가합니다.

말 경찰의 속도는 7과 강도의 가속이다 1. 강도가에서 시작 30하면 도로가 각 진드기처럼 보일 것입니다.

C.............................R..................................
.......C.......................R.................................
..............C..................R...............................
.....................C..............R............................
............................C...........R........................
...................................C.........R...................
..........................................C........R.............
.................................................C........R......

위의 마지막 진드기 후, 강도는 경찰의 속도와 같으며 여전히 앞서 있습니다. 경찰이 일정한 속도로 움직이고 강도가 여전히 속도를 높이고 있기 때문에 강도가 탈출하여 진실한 값을 출력합니다. 그러나 경찰의 속도가 9... 이라면

C.............................R..................................
.........C.....................R.................................
..................C..............R...............................
...........................C........R............................
....................................C...R........................
.............................................X...................

... 경찰은 강도가 도망 치기 전에 강도를 따라 잡기 X때문에 (로 표시 ) 거짓 값을 출력합니다.

당신의 작업

경찰의 속도, 강도, 강도 등 세 가지 입력이 주어지면 강도가 도망 칠지 여부가 결정됩니다.

규칙

  • 경찰은 항상에서 시작합니다 0.
  • 모든 입력은 양의 정수입니다.
  • 틱 후 경찰의 위치가 강도보다 크거나 같은 경우 경찰은 강도를 잡습니다.
  • 아직 잡히지 않았을 때 강도는 도망 치며 그의 속도는 경찰보다 큽니다.
  • 출력 후 프로그램을 종료해야합니다.
  • 강도는 각 진드기를 움직이기 전에 가속합니다.

테스트 사례

Cop Speed, Robber Position, Robber Acceleration -> Output

7, 30, 1 -> truthy
9, 30, 1 -> falsey
2, 1, 3 -> truthy
100, 100, 50 -> truthy
60, 60, 20 -> falsey
10, 1, 1 -> falsey
10, 50, 2 -> truthy
11, 50, 2 -> truthy
12, 50, 2 -> truthy
13, 50, 2 -> truthy
14, 50, 2 -> truthy
15, 50, 2 -> truthy
16, 50, 2 -> falsey
17, 50, 2 -> falsey
18, 50, 2 -> falsey
100, 451, 10 -> truthy

비주얼을 만드는 참조 Python 3 구현 : 온라인으로 사용해보십시오!

이것은 이므로 바이트 단위의 최단 답변이 이깁니다.



8
오 .. 이것은 경찰과 강도 도전이 아닙니다. 더 이해가 되네요
Magic Octopus Urn

입력이 주어진 형식으로 보장 robber acceleration, cop speed, robber position됩니까 , 아니면 원하는 형식으로 입력 할 수 있습니까 ( 대신)?
TehPers

@TehPers 당신이 원하는 무엇이든 (매번 일치하지만) 당신이 당신의 대답에서 다른 말을하고 있다면
Stephen

2
테스트 케이스 요청 : 100, 451, 10. (답변이 모두 결과에 동의하는 것은 아닙니다).
Neil

답변:



16

파이썬 3 , 29 바이트

lambda s,p,a:(a-2*s)**2<8*a*p

온라인으로 사용해보십시오!

설명

당시 경찰의 위치 tst입니다.

당시 강도의 위치 ta(t)(t+1)/2 + p입니다.

경찰에서 강도까지의 서명 거리는입니다 (a/2)t^2 + (a/2-s)t + p.

판별자가 음수이면 판별자가 (a/2 - s)^2 - 4(a/2)(p) = [(a-2s)^2-8ap]/4와 같고 부호가 같은 경우 절대 0에 도달하지 않습니다 (a-2s)^2-8ap.


온라인으로 사용해보십시오! -9 바이트 동안 05AB1E 로의 뻔뻔한 포트
매직 문어 Urn

1
"100, 451, 10-> truthy"테스트 사례에서 이것이 실패하지 않습니까?
Mark S.

뭔가 빠졌 습니까? 아니면 2 차 방정식의 해 사이에 정수 가 있는지 확인해야 (a/2)t^2 + (a/2-s)t + p = 0 -> 10t^2 - 50t + 61 = 0합니까? 예를 들어 60, 61, 20의 경우 강도가 쉽게 사라집니다 (방정식 : 2.1과 2.9는 2와 3 사이에 있음).
mackoo13

5

Japt , 13 바이트

²/W-V-U<o0W x

온라인으로 테스트하십시오!

설명

U, V그리고 W암시 적 입력합니다. 첫째로 Uo0W우리 범위를 작성 [0, W, W * 2, ...] 가 될 때까지 U. x그리고 이것을 합하면 강도가 경찰 속도에 도달하기 전에 이동하는 거리를 알려줍니다. 우리는 이것을 r 이라고 부를 것 입니다.

자, 이번에는 경찰이 얼마나 멀리 여행합니까? 우리는 이것을 U * (U // W-1)를 사용하여 계산할 수 있으며, 이는 (U * U) // W-U 로 재 배열 될 수 있습니다 . 우리는 이것을 c 라고 부를 것 입니다.

이제 마지막 단계 : 강도가 도망 치나요? 여기서 우리가해야 할 일은 c <r + V 또는 재 배열 된 c-V <r인지 확인하는 것 입니다.


5

큐빅 으로 61 바이트

$:7(U1R3U1F3D2*1-1/1)6+7$-77*6$(-77777777D2F1U3R1U3!0{<0%6&})

온라인으로 사용해보십시오! 이 TIO에서 작동하려면, 당신은 교체해야합니다 &으로 &1인해 인터프리터의 버그로.

이것은 Leaky Nun의 대답의 부끄러운 항구입니다 . 입력 형태 인 a s p, a, 강도의 가속도이다 s경찰의 속도 및 p강도의 위치이다.

가속도가 너무 높으면 실패합니다. 이 프로그램이 얼마나 높은 가속도를 지원할지는 모르겠지만 1260보다 높지 않다는 것을 알고 있습니다 . 제한 요소는 큐브에 가속도를 저장하고 상단면의 합계가 0 (불완전한 검사)인지 확인하여 큐브가 해결되는지 확인하는 것입니다. 가속 = 50에서 작동하는 것 같지만 얼마나 높은지 테스트하지 않았습니다.

작동 원리

$:7(U1R3U1F3D2*1-1/1)6
$:7                             Store the first number in the notepad
   (                )6          Loop until notepad is 0
    U1R3U1F3D2                  Rotate the cube a certain way
              *1-1/1            Subtract 1 from the notepad

+7$-77*6                
+7                              Add first input to the notepad
  $-77                          Subtract second input from the notepad twice
      *6                        Multiply the notepad by itself (square it)

$(-77777777D2F1U3R1U3!0{<0%6&})
$                               Get next input
 (                            ) Loop indefinitely
  -77777777                     Subtract third input 8 times
           D2F1U3R1U3           "Unrotate" the cube
                     !0{     }  If the top face is 0
                        <0        Check if notepad < 0, store in notepad
                          %6      Output notepad as number
                            &     End the program

1
6에서 %6그리고는 *6그들은 지금 암시 적으로 호출 할 수 있습니다으로 제거 할 수 있습니다.
MD XF


4

파이크 , 14 바이트

완전히 인간의 파이썬 답변 포트 . 1진실하고 허위로 돌아 0옵니다.

hQee-XQ1@Qe*}<

여기 사용해보십시오!


설명

hQee-XQ1@Qe*}< - Full program with implicit input added in the beginning (which automatically splits the components)

h              - First input
 Qee           - Last Input halved (through integer division)
    -          - Subtact the above
     X         - Square.
             < - Is smaller than?
      Q1@      - The second input
         Qe*   - Multiplied by the last input
            }  - Doubled

파이크 , 15 바이트

나의 첫 번째 파이크 답변! Leaky의 Python 제출에서 영감을 얻은 내 Pyth 솔루션의 포트 . 진실하고 허위로 돌아 옵니다.10

eQh}-XQe8*Q1@*<

여기 사용해보십시오!


설명

eQh}-XQe8*Q1@*< - Full program with implicit input added in the beginning (which automatically splits the components)

e               - End; last input in this case
 Qh             - The first input
   }            - Double
    -           - Subtact the above
     X          - Square.
              < - Is less than?
      Qe        - Last Input
        8*      - Times 8 
             *  - Multiplied by
          Q1@   - The second input.


2

루비 , 29 27 25 바이트

->c,p,a{(a-c-c)**2<8*p*a}

온라인으로 사용해보십시오!

양측에 4를 곱하는 아이디어를 훔쳐서 29에서 27까지 얻었습니다. (Leaky Nun의 python answer)

람다 매개 변수 주변의 파렌을 제거하여 27에서 25까지 (전체적으로 감사합니다)


2
PPCG에 오신 것을 환영합니다! 당신은에서 함수 이름을 변경하여 골프 답변 조금 수 hith또는 유사한. 다음과 같이 메소드에서 proc로 변경하여 일부 바이트를 절약 할 수도 있습니다.->c,p,a{(c-a*0.5)**2<2*p*a}
Conor O'Brien

1
또한 collisionTIO 링크에서 올바른 메소드 이름 으로 바꿔야 합니다.
Leaky Nun

Pssst, 사용자 이름을 확인하십시오. : P
완전히 인간적인

1
나는 당신이 괄호를 필요로하지 않는다고 확신합니다 c,p,a.
totallyhuman


1

파이썬 2 , 31 30 29 바이트

Mr. Xcoder 덕분에 -1 바이트.

Ruby 응답 의 포트로 시작했습니다 .

lambda c,p,a:(c-a/2)**2<2*p*a

온라인으로 사용해보십시오!


1
.50.5> _> 대신
Mr. Xcoder

하하, 나는 그것이 그렇게 많은 것이 될 것이라고 생각했다. XD 감사합니다!
완전히 인간적인

a/2정수 나누기를 사용하면 잘못 될 수 있습니까?
itdoesntwork

정수 나누기를 사용합니다. 나는 어떤 수학도하지 않았지만 (정직하게, 나는 확신 할 수 없다) 모든 테스트 사례에서 작동합니다.
totallyhuman

1

스위프트 3 , 55 바이트

t표현식이 너무 복잡하여 합리적인 시간에 해결하기가 너무 어려우므로 변수를 선언했습니다 (Swift 's fault!).

func f(a:Int,b:Int,c:Int){let t=c-2*a;print(t*t<8*c*b)}

테스트 스위트.

또는 55 bytes , 정확한 클로저에 해당합니다 (복잡한 구문이므로 마지막 부분이 필요합니다).

{let t=$2-2*$0;return t*t<8*$2*$1}as(Int,Int,Int)->Bool

테스트 스위트.

스위프트 3 , 57 바이트

func f(a:[Int]){let t=a[2]-2*a[0];print(t*t<8*a[2]*a[1])}

테스트 스위트.


1

파이썬 2 , 30 바이트

lambda c,p,a:c/a*(c-a+c%a)/2<p

온라인으로 사용해보십시오! 경찰은 c/a강도를 잡을 수있는 진드기가 있으며 그 후 경찰을 가속합니다. 첫 번째 진드기 때 경찰 c-a은 강도를 얻는 반면 마지막 진드기 때 그는 단지 얻는다 c%a. 따라서 경찰이 얻을 수있는 총계는 틱 수와 틱당 평균 거리의 곱입니다. 이것은 단순히 강도가 가진 초기 리드와 비교됩니다.


1

TI BASIC (TI-83 / 84 시리즈), 18 바이트

Prompt C,R,A
(A-2C)²<8RA

itdoesntwork 의 또 다른 포트는 영향력있는 Ruby 솔루션 입니다.

실행

입력 순서는 경찰 속도, 강도 위치, 강도 가속입니다.

C=?7
R=?30
A=?1
               1

1

망막 , 79 바이트

\d+
$*
$
;
{`(1+);
$1;$1
,(1+;(1+))
$2,$1
1`(1+),\1
$1,
.*,,.*

^(1+),.*;\1.*
1

온라인으로 사용해보십시오!설명:

\d+
$*

입력을 단항으로 변환합니다.

$
;

강도의 속도를위한 공간을 확보하십시오.

{`(1+);
$1;$1

각 패스에서 강도를 가속화하십시오.

,(1+;(1+))
$2,$1

경찰에게서 강도를 멀리 옮기십시오.

1`(1+),\1
$1,

경찰을 강도쪽으로 옮깁니다.

.*,,.*

경찰이 강도를 잡았습니까?

^(1+),.*;\1.*
1

강도가 경찰보다 속도가 빠릅니까?


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.