Kesetaraan osilasi


15

Kami memiliki objek yang berosilasi antara dua titik integer [l, r],, dengan kecepatan satu unit per unit waktu, mulai dari lpada t=0. Anda mungkin berasumsi l < r. Misalnya, jika suatu objek berosilasi [3, 6], maka kita memiliki:

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

Dll Tapi objek berosilasi terus menerus, jadi kami juga punya t=0.5 -> 3.5dan t=3.7 -> 5.3.

Dengan adanya dua objek yang berosilasi di antara [l1, r1],, [l2, r2]tentukan apakah ada waktu tsedemikian rupa sehingga kedua objek memiliki posisi yang sama. Anda mengambil l1, r1, l2, r2dalam format apa pun yang nyaman, dan menampilkan nilai kebenaran / kepalsuan apa pun.


Masukan yang benar:

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

Masukan palsu:

[[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 

jadi itu gelombang runcing bukan sinusoid, kan?
HyperNeutrino

Untuk referensi tantangan ini merujuk ke game ini , di mana Anda harus mendeteksi apakah mungkin untuk melompat dari satu blok ke yang lain.
user202729

@HyperNeutrino Benar.
orlp

Dapatkah nilai palsu menjadi 0dan kebenaran bilangan bulat positif atau harus konsisten. Terlebih lagi, bisakah palsu menjadi daftar kosong dan benar-benar menjadi daftar kosong?
Tn. Xcoder

3
Tes kepalsuan yang baik adalah [[1,3],[2,6]]: ini memalsukan heuristik "intervalnya tumpang tindih dan tidak sama panjangnya".
Misha Lavrov

Jawaban:



6

Sekam , 13 byte

VEΣUẊeTmȯ…¢mD

Mengambil input dalam format [[l,r],[L,R]]. Pengembalian 0untuk instance palsu dan bilangan bulat positif untuk instance kebenaran. Cobalah online!

Penjelasan

Gagasan utamanya adalah

  1. Tabrakan hanya dapat terjadi pada koordinat bilangan bulat atau setengah bilangan bulat.
  2. Ini cukup untuk mensimulasikan sistem sampai pengulangan dua negara berturut-turut ditemui.

Berikut kode yang dianotasi.

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

Jawaban yang licin. Mengapa Anda perlu menggandakan masing-masing? Apakah itu untuk mengubah pernyataan "tumbukan hanya dapat terjadi pada bilangan bulat atau setengah bilangan bulat" menjadi "tumbukan hanya dapat terjadi pada bilangan bulat"?
Jonah

@ Jonah Ya, tepatnya.
Zgarb

2

JavaScript (ES6), 104 100 byte

Implementasi naif yang hanya menjalankan simulasi. Mengambil (a, b, c, d) sebagai 4 variabel berbeda.

(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)

Uji kasus


2

Bahasa Wolfram (Mathematica) , 77 69 61 byte

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

Fungsi murni mengambil empat argumen l1, r1, l2, r2sebagai input: misalnya, [0,3,2,4]ketika intervalnya adalah [0,3]dan [2,4].

Cobalah online!

Bagaimana itu bekerja

Untuk mendapatkan titik di [a,b]dekat titik di [c,d], dengan asumsi a<c<b<d, kita ingin beberapa aneh b-adalam b-csebuah beberapa bahkan d-c. Jika b-amemiliki lebih banyak faktor2 daripada d-c, kita dapat mewujudkannya dengan tepat: akan ada saat ketika titik pertama di bdan titik kedua di c, dan kemudian kita berada dalam kondisi yang baik. Jika tidak, maka yang terbaik yang bisa kita lakukan adalah GCD dari b-adan d-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))

Dibawa l1,r1,l2,r2sebagai argumen terpisah. Penjelasan: Simulasi dijamin akan diulang setelah (r1-l1)*(r2-l2)*2unit waktu (atau faktornya); gmenghitung offset objek yang sesuai setelah i/2unit waktu, jadi iperlu berkisar hingga (r1-l1)*(r2-l2)*4.


1

05AB1E , 12 10 14 byte

+4 byte untuk menangani rentang negatif

Kembalikan 0 jika falsy, atau bilangan bulat positif sebaliknya

Gunakan ide Zgarb tentang menggandakan nilai untuk membuat deteksi posisi yang sama lebih mudah

Terima kasih kepada @ Zacharý karena menunjukkan kesalahan saya

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

Cobalah online!

Penjelasan:

Ä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

Saya tidak berpikir ini akan bekerja untuk rentang daftar besar, karena 100 tampaknya cukup arbitrer.
Zacharý

@ Zacharý Terima kasih! Saya sudah memperbaikinya dengan cara yang sangat tidak efektif, karena sekarang daftar terlalu sering diulang. :-)
scottinet

Sebenarnya, ini mungkin tidak bekerja lagi (saya tidak akan repot-repot untuk mencari tahu bagaimana, karena itu akan memakan waktu terlalu lama, dan sejujurnya, daftar tersebut harus berupa rentang kecil dan rentang BESAR dari apa yang saya pikir tidak akan berhasil) )
Zacharý

@ Zacharý Ini harus bekerja untuk bilangan bulat positif besar yang sewenang-wenang, karena kasus terburuk adalah [[0,n],[n-1, n]]dan bahkan dalam kasus itu, daftar kedua akan diulangi cukup banyak (dan lebih banyak) untuk yang pertama mencapai batas atasnya. Tapi saya lupa memperhitungkan angka negatif: [[-100, 1], [0, 1]]tidak berfungsi. Memperbaikinya dengan biaya 4 byte :-(
scottinet

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.