衝突の予測:強盗は逃げますか?


20

道路は数直線である0と考えてください。開始から無期限に続く:

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

道路には2台の車があります:CRCキャッチしようとしている警官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)、falsey値を出力しますので。

あなたのタスク

3つの入力(警官の速度、強盗の位置、強盗の加速度)が与えられると、強盗が逃げるかどうかを決定します。

ルール

  • 警官は常にから始まり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
ああ...これは警官と強盗の挑戦ではありません。それはより理にかなっています。
魔法のタコUr

入力は指定された形式であることが保証されていますか、または希望する形式で入力を取得できrobber acceleration, cop speed, robber positionますか(代わりに)。
-TehPers

@TehPersあなたが望むものは何でも(毎回一貫しています)、しかしあなたがあなたの答えでそう言う何か違うことをしているなら
スティーブン

2
テストケースのリクエスト:100、451、10(回答がすべて結果に同意するわけではありません)。
ニール

回答:



16

Python 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と同じ符号を持ち、(a-2s)^2-8ap


オンラインでお試しください!-9バイトの05AB1Eへの恥知らずなポート(私は物理学が苦手で、おそらく説明ができなかったので、それを取るかもしれません)。
魔法のタコUr

1
「100、451、10-> truthy」テストケースではこれは失敗しませんか?
マークS。17年

私は何かが足りませんか、二次方程式の解の間に整数がある(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

オンラインでテストしてください!

説明

UV、およびW暗黙の入力です。まず、に到達するまでUo0W範囲[0、W、2 * W、...]を作成しますUx次にこれを合計します。これは、警官の速度に達するまでに強盗が移動する距離を示します。これを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

Pyke、14バイト

完全に人間のPython回答のポート。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

Pyke、15バイト

私の最初のパイクの答え!Leaky のPythonサブミッションに触発されたPythソリューションのポート。戻り値1truthy用と0

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の答え)

ラムダパラメータの周りの括弧を削除して27から25になりました(thanks human)


2
PPCGへようこそ!関数の名前をhitからhまたは同様に変更することで、答えを少しゴルフすることができます。あなたはまた、procのに方法から変更することによって、いくつかのバイトを保存することができるかもしれなので、好き:->c,p,a{(c-a*0.5)**2<2*p*a}
コナー・オブライエン

1
またcollision、TIOリンクを正しいメソッド名に置き換える必要があります。
リーキー修道女

Pssst、ユーザー名を見てください。:P-
完全に人間

1
括弧を必要としないと確信していますc,p,a
完全に人間


1

パイソン231の 30 29バイト

Xcoder氏のおかげで-1バイト。

Rubyの答えの移植として始まりました。

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

オンラインでお試しください!


1
.5代わりに0.5> _>
ミスターXcoder

ハハ、私はそれだけで移植できると思った。XDありがとう!
完全に人間

a/2整数除算を使用していますが、これは間違っているのでしょうか?
-itdoesntwork

整数除算を使用します。私は何も計算していませんが(正直なところ、私はできると確信していません)、すべてのテストケースで動作します。
完全に人間

1

Swift 3、55バイト

t式が複雑すぎて、そうでなければ妥当な時間で解決できないため、変数を宣言したことに注意してください(Swiftのせい!)。

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

テストスイート。

または55バイト、完全に同等のクロージャー(最後の部分は複雑な構造なので必要です):

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

テストスイート。

Swift 3、57バイト

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

テストスイート。


1

Python 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ソリューションのもう1つの移植

実行

入力順序は、警官の速度、強盗の位置、強盗の加速です。

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.