Bình đẳng dao động


15

Chúng ta có các đối tượng dao động giữa hai điểm nguyên [l, r], với tốc độ một đơn vị trên một đơn vị thời gian, bắt đầu từ lngày t=0. Bạn có thể giả định l < r. Ví dụ: nếu một đối tượng dao động [3, 6], thì chúng ta có:

t=0 -> 3
t=1 -> 4
t=2 -> 5
t=3 -> 6
t=4 -> 5
t=6 -> 4
t=7 -> 3
t=8 -> 4

V.v. Nhưng các vật dao động liên tục, nên ta cũng có t=0.5 -> 3.5t=3.7 -> 5.3.

Cho hai vật dao động giữa [l1, r1], [l2, r2]xác định xem có bao giờ thai vật đó có cùng vị trí không. Bạn thực hiện l1, r1, l2, r2ở bất kỳ định dạng thuận tiện và xuất ra bất kỳ giá trị trung thực / giả mạo nào.


Đầu vào trung thực:

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

Đầu vào giả:

[[0, 3], [3, 5]] 
[[0, 2], [2, 4]]
[[5, 8], [9, 10]]
[[6, 9], [1, 2]]
[[1, 3], [2, 6]]
code-golf  array-manipulation  decision-problem  code-golf  math  number-theory  palindrome  integer-partitions  code-golf  math  decision-problem  geometry  code-golf  string  random  code-golf  ascii-art  code-golf  kolmogorov-complexity  primes  code-golf  kolmogorov-complexity  code-golf  graphical-output  code-golf  number-theory  primes  integer  factoring  code-golf  sequence  array-manipulation  integer  code-golf  array-manipulation  matrix  code-golf  sequence  binary  code-golf  game  cellular-automata  game-of-life  binary-matrix  code-golf  string  ascii-art  code-golf  random  generation  logic  code-golf  string  code-golf  code-golf  sequence  array-manipulation  random  apl  code-golf  code-golf  sequence  primes  code-golf  math  sequence  integer  code-golf  number  arithmetic  array-manipulation  decision-problem  code-golf  ascii-art  number  code-golf  restricted-source  quine  code-golf  chess  board-game  code-golf  math  sequence  code-golf  number  sequence  kolmogorov-complexity  code-golf  number  sequence  arithmetic  code-golf  math  number  alphabet  code-golf  ascii-art  classification  statistics  apl  code-golf  array-manipulation  matrix  code-golf  string  kolmogorov-complexity  code-golf  sequence  binary  base-conversion  binary-matrix  code-golf  string  classification  code-golf  tips  python  code-golf  combinatorics  binary  subsequence  restricted-time  code-golf  number  number-theory  code-golf  math  number  complex-numbers  code-golf  string  code-golf  string  code-golf  string  random  game  king-of-the-hill  python  code-golf  number  sequence  code-golf  number  sequence  code-golf  code-golf  math  number  array-manipulation  code-golf  array-manipulation  decision-problem  code-golf  string  code-golf  sequence  integer 

Vì vậy, nó là một sóng nhọn không phải là một hình sin, phải không?
HyperNeutrino

Để tham khảo thử thách này, hãy tham khảo trò chơi này , nơi bạn phải phát hiện xem có thể nhảy từ khối này sang khối khác không.
dùng202729

@HyperNeutrino Đúng.
orlp

Giá trị giả có thể 0và trung thực bất kỳ số nguyên dương nào hoặc chúng phải nhất quán. Thậm chí nhiều hơn, có thể giả mạo là danh sách trống và sự thật là bất kỳ danh sách không trống?
Ông Xcoder

3
Một thử nghiệm [[1,3],[2,6]]giả mạo tốt là : điều này làm sai lệch heuristic "các khoảng trùng nhau và không cùng độ dài".
Misha Lavrov

Câu trả lời:



6

Husk , 13 byte

VEΣUẊeTmȯ…¢mD

Đưa đầu vào ở định dạng [[l,r],[L,R]]. Trả về 0các trường hợp giả và một số nguyên dương cho các trường hợp trung thực. Hãy thử trực tuyến!

Giải trình

Ý tưởng chính là

  1. Xung đột chỉ có thể xảy ra tại tọa độ số nguyên hoặc nửa số nguyên.
  2. Nó đủ để mô phỏng hệ thống cho đến khi gặp phải sự lặp lại của hai trạng thái liên tiếp.

Đây là mã chú thích.

VEΣUẊeTmȯ…¢mD  Implicit input, say [[0,2],[2,3]]
       mȯ      For both pairs do:
           mD   Double each: [[0,4],[4,6]]
          ¢     Cycle: [[0,4,0,4..],[4,6,4,6..]]
         …      Rangify: [[0,1,2,3,4,3,2,1,0,1,2..],[4,5,6,5,4,5,6..]]
      T        Transpose: [[0,4],[1,5],[2,6],[3,5],[4,4],[3,5],[2,6]..
    Ẋe         Adjacent pairs: [[[0,4],[1,5]],[[1,5],[2,6]],[[2,6],[3,5]],[[3,5],[4,4]]..
   U           Prefix of unique elements: [[[0,4],[1,5]],[[1,5],[2,6]],[[2,6],[3,5]],[[3,5],[4,4]]..[[1,5],[0,4]]]
  Σ            Concatenate: [[0,4],[1,5],[1,5],[2,6],[2,6],[3,5],[3,5],[4,4]..[1,5],[0,4]]
VE             Index of first pair whose elements are equal (or 0 if not found): 8

Câu trả lời khéo léo. Tại sao bạn cần phải tăng gấp đôi mỗi? Có phải đó là để biến câu lệnh "va chạm chỉ có thể xảy ra ở số nguyên hoặc một nửa số nguyên" thành "va chạm chỉ có thể xảy ra ở số nguyên"?
Giô-na

@Jonah Vâng, chính xác.
Zgarb

2

JavaScript (ES6), 104 100 byte

Một thực hiện ngây thơ mà chỉ chạy mô phỏng. Lấy (a, b, c, d) là 4 biến khác biệt.

(a,b,c,d)=>(g=(X,Y)=>x==y|x+X==y&(y+=Y)==x||(x+=X)-a|y-c&&g(x>a&x<b?X:-X,y>c&y<d?Y:-Y))(1,1,x=a,y=c)

Các trường hợp thử nghiệm


2

Ngôn ngữ Wolfram (Mathicala) , 77 69 61 byte

If[#>#3,#0[##3,#,#2],(z=GCD[x=#-#2,#3-#4])Mod[x/z,2]<=#2-#3]&

Một hàm thuần túy lấy bốn đối số l1, r1, l2, r2làm đầu vào: ví dụ: [0,3,2,4]khi các khoảng là [0,3][2,4].

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Để có được một điểm trong [a,b]gần một điểm trong [c,d], giả định a<c<b<d, chúng tôi muốn bội lẻ b-atrong phạm vi b-ccủa một nhiều thậm chí của d-c. Nếu b-acó nhiều yếu tố 2hơn d-c, chúng ta có thể làm điều này xảy ra chính xác: sẽ có lúc điểm đầu tiên ở điểm bvà điểm thứ hai là c, và sau đó chúng ta đang ở trong tình trạng tốt. Nếu không, thì điều tốt nhất chúng ta có thể làm là GCD của b-ad-c.


1

JavaScript (ES6), 89 byte

(a,b,c,d)=>[...Array((b-=a)*(d-=c)*4)].some((g=e=>i/e&2?e-i/2%e:i/2%e,i)=>a+g(b)==c+g(d))

Đưa ra l1,r1,l2,r2như các đối số riêng biệt. Giải thích: Mô phỏng được đảm bảo lặp lại sau (r1-l1)*(r2-l2)*2các đơn vị thời gian (hoặc một yếu tố của chúng); gtính toán độ lệch của đối tượng thích hợp sau i/2các đơn vị thời gian, do đó icần phải dao động đến (r1-l1)*(r2-l2)*4.


1

05AB1E , 12 10 14 byte

+4 byte để xử lý các phạm vi âm

Trả về 0 nếu sai, hoặc số nguyên dương khác

Sử dụng ý tưởng nhân đôi giá trị của Zgarb để giúp phát hiện vị trí tương tự dễ dàng hơn

Cảm ơn @ Zacharý đã chỉ ra những sai lầm của tôi

ÄZU\·εXиŸ}øüQO

Hãy thử trực tuyến!

Giải thích:

ÄZU\·εXиŸ}øüQO 
ÄZU\            Store in X the largest absolute number in the lists
    ·           Double lists ([3,6],[4,8] => [6,12],[8,16])
     ε   }      For each...
      X             Push X
       и            List-repeat that much times ([6,12]*12 => [6,12,6,12,6,...])
        Ÿ           Rangify ([6,12,6,...] => [6,7,8,9,10,11,12,11,...])
          ø     Zip lists ([6,7,8,...],[8,9,10,...] => [6,8],[7,9],[8,10],...)
           üQ   1 if both elements of a pair are equal, 0 otherwise
             O  Sum result list (=0 if the same position is never shared)
                Implicit output

Tôi không nghĩ rằng điều này sẽ làm việc cho phạm vi danh sách lớn, bởi vì 100 có vẻ khá độc đoán.
Zacharý

@ Zacharý Cảm ơn! Tôi đã sửa nó theo một cách rất kém hiệu quả, vì bây giờ các danh sách được lặp đi lặp lại quá nhiều lần. :-)
scottinet

Trên thực tế, điều này có thể không hoạt động (tôi sẽ không bận tâm tìm hiểu làm thế nào, vì nó sẽ mất quá nhiều thời gian, và thành thật mà nói, các danh sách sẽ phải là một phạm vi nhỏ và một phạm vi lớn từ những gì tôi nghĩ sẽ không hoạt động )
Zacharý

@ Zacharý Nó nên hoạt động cho các số nguyên dương lớn tùy ý, vì trường hợp xấu nhất sẽ xảy ra [[0,n],[n-1, n]]và ngay cả trong trường hợp đó, danh sách thứ hai sẽ được lặp lại đủ số lần (và hơn thế nữa) để lần đầu tiên đạt đến giới hạn trên của nó. Nhưng tôi quên mất số âm vào tài khoản: [[-100, 1], [0, 1]]không hoạt động. Sửa nó với chi phí 4 byte :-(
scottinet

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.