ทำนายการปะทะกัน: โจรจะหนีไปหรือไม่


20

คิดว่าถนนเป็นเส้นจำนวนเริ่มต้น0และดำเนินการต่อไปเรื่อย ๆ :

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

มีรถสองคันบนท้องถนนที่มีและC เป็นตำรวจที่พยายามจะจับโจร เริ่มที่และเริ่มที่อื่นบนถนน:RCRC0R

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

ตำรวจกำลังเคลื่อนไหว - เขากำลังไล่โจร เขามีความเร็วคงที่ โจรเพิ่งกระโดดเข้าไปในรถของเขา เขาเร่ง แต่ละเห็บความเร็วของโจรจะเพิ่มขึ้นตามการเร่งความเร็วของเขา

Say ความเร็วของตำรวจเป็นและเร่งโม่งคือ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 อ้างอิงที่สร้างภาพ: ลองออนไลน์!

นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ


Sandbox (ลบแล้ว)
Stephen

8
โอ้ ... นี่ไม่ใช่ความท้าทายของตำรวจและโจร ที่เหมาะสมมากขึ้น
Magic Octopus Urn

อินพุตรับประกันว่าอยู่ในรูปแบบที่กำหนดหรือเราสามารถป้อนข้อมูลในรูปแบบใดก็ได้ที่เราต้องการ (เหมือนrobber acceleration, cop speed, robber positionแทน) หรือไม่?
TehPers

@TehPers สิ่งที่คุณต้องการ (สอดคล้องกันในแต่ละครั้ง) แต่ถ้าคุณกำลังทำสิ่งที่แตกต่างพูดในคำตอบของคุณ
สตีเฟ่น

2
คำขอกรณีทดสอบ: 100, 451, 10. (คำตอบไม่เห็นด้วยกับผลลัพธ์)
Neil

คำตอบ:



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


ลองออนไลน์! - พอร์ตไร้ยางอายถึง 05AB1E เป็นเวลา 9 ไบต์ (คุณอาจใช้มันเพราะฉันแย่กับฟิสิกส์และอาจไม่สามารถอธิบายได้)
Magic Octopus Urn

1
สิ่งนี้ไม่ล้มเหลวสำหรับกรณีทดสอบ "100, 451, 10 -> truey" หรือไม่
Mark S.

ฉันขาดอะไรบางอย่างหรือเราควรตรวจสอบว่ามีจำนวนเต็มระหว่างคำตอบของสมการกำลังสอง(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, 2 * W ... ]Uจนกว่าจะถึง xจากนั้นจึงสรุปสิ่งนี้ซึ่งทำให้โจรเดินทางไปไกลเท่าไหร่ถึงความเร็วตำรวจ เราจะเรียกสิ่งนี้ว่าR

ทีนี้ตำรวจเดินทางไปเท่าไหร่ในเวลานี้ เราสามารถคำนวณโดยใช้U * (U // W - 1)ซึ่งสามารถจัดใหม่เพื่อ(U * U) // W - U เราจะเรียกสิ่งนี้ค

ตอนนี้สำหรับขั้นตอนสุดท้าย: โจรจะหนีหรือไม่ ทั้งหมดที่เราต้องทำนี่คือการตรวจสอบถ้าค <R + Vหรือจัดเตรียมค - V <R


5

ตามลำดับ 61 ไบต์

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

ลองออนไลน์! เพื่อให้สามารถใช้งานได้ใน TIO คุณอาจต้องแทนที่&ด้วย&1เนื่องจากข้อบกพร่องในล่าม

นี้เป็นท่าเรือที่ไร้ยางอายของคำตอบรั่วของแม่ชี อินพุตอยู่ในรูปแบบa s pโดยaมีการเร่งความเร็วของโจรsคือความเร็วของตำรวจและpเป็นตำแหน่งของโจร

หากความเร่งสูงเกินไปสิ่งนี้จะล้มเหลว ผมไม่ทราบว่าวิธีการที่สูงของการเร่งความเร็วโปรแกรมนี้จะสนับสนุนแต่ฉันรู้ว่ามันไม่ได้สูงกว่า 1,260 ปัจจัยที่ จำกัด คือมันเก็บความเร่งในคิวบ์และตรวจสอบว่าคิวบ์นั้นถูกแก้ไขโดยการตรวจสอบเฉพาะในกรณีที่ผลรวมของใบหน้าด้านบนเป็น 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 ไบต์

คำตอบ Pyke แรกของฉัน! พอร์ตของการแก้ปัญหา Pyth ของฉันซึ่งเป็นแรงบันดาลใจจากรั่วเป็นส่งหลาม ผลตอบแทน1สำหรับความจริงและ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

Ruby , 29 27 25 ไบต์

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

ลองออนไลน์!

ได้ตั้งแต่ 29 ถึง 27 โดยขโมยความคิดในการทวีคูณทั้งสองด้านด้วย 4 (คำตอบหลามของ Leaky Nun)

ได้ 27-25 โดยลบ parens รอบพารามิเตอร์แลมบ์ดา (ขอบคุณทั้งมนุษย์)


2
ยินดีต้อนรับสู่ PPCG! คุณสามารถตีกอล์ฟคำตอบของคุณได้โดยเปลี่ยนชื่อฟังก์ชั่นจากhitเป็นhหรือคล้ายกัน คุณอาจสามารถบันทึกไบต์โดยการเปลี่ยนจากวิธีการเป็น proc ดังนี้:->c,p,a{(c-a*0.5)**2<2*p*a}
Conor O'Brien

1
คุณต้องแทนที่collisionลิงค์ TIO ด้วยชื่อวิธีที่ถูกต้อง
Leun Nun

Pssst ดูที่ชื่อผู้ใช้ของพวกเขา : P
มนุษย์

1
c,p,aผมค่อนข้างมั่นใจว่าคุณไม่จำเป็นต้องวงเล็บรอบ
สิ้นเชิงมนุษย์

2

C # (. NET Core) 33 ไบต์

(v,p,a)=>v/a*v<p+v/a*(1+v/a)*.5*a

ลองออนไลน์!

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


1

Python 2 , 31 30 29 ไบต์

-1 ไบต์ขอบคุณ Mr. Xcoder

เริ่มต้นจากเป็นท่าเรือที่คำตอบทับทิม

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

ลองออนไลน์!


1
.5แทน0.5> _>
Mr. Xcoder

ฮ่าฮ่าฉันคิดว่ามันคงจะพอแล้ว ขอบคุณ XD!
มนุษย์

a/2ใช้การแบ่งจำนวนเต็มนี่จะผิดหรือเปล่า?
ต้องทำงาน

มันใช้การแบ่งจำนวนเต็ม ในขณะที่ฉันไม่ได้คำนวณคณิตศาสตร์ (พูดตามตรงฉันไม่แน่ใจว่าทำได้) แต่มันใช้ได้กับทุกกรณีทดสอบ
สิ้นเชิงมนุษย์

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

ชุดทดสอบ

สวิฟท์ 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 's อิทธิพลแก้ปัญหาทับทิมแก้ปัญหาทับทิม

การกระทำ

ลำดับการป้อนข้อมูลคือความเร็วตำรวจตำแหน่งโจรการเร่งความเร็วโจร

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+
$*

แปลงอินพุตเป็น unary

$
;

ทำให้มีที่ว่างสำหรับความเร็วของโจร

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

เร่งโจรในแต่ละรอบ

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

ย้ายโจรออกจากตำรวจ

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

ย้ายตำรวจไปสู่โจร

.*,,.*

ตำรวจจับโจรได้ไหม?

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

โจรจะเพิ่มความเร็วตำรวจหรือไม่?


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