Рівність коливань


15

Ми маємо об'єкти , які коливаються між двома цілими точками, [l, r]при швидкості однієї одиниці в одиницю часу, починаючи lз t=0. Ви можете припустити l < r. Наприклад, якщо об'єкт коливається [3, 6], ми маємо:

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

І т. Д. Але об'єкти коливаються постійно, тому ми також маємо t=0.5 -> 3.5і t=3.7 -> 5.3.

З огляду на два об'єкти, що коливаються між собою [l1, r1], [l2, r2]визначте, чи є колись такий час t, що два об'єкти мають одне і те саме положення. Ви приймаєте l1, r1, l2, r2в будь-якому зручному форматі та виводите будь-які значення truthy / false.


Основні входи:

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

Неправдиві входи:

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

значить, це точкова хвиля, а не синусоїда, правда?
HyperNeutrino

Для ознайомлення з цим викликом зверніться до цієї гри , де ви повинні виявити, чи можна переходити з одного блоку в інший.
користувач202729

@HyperNeutrino Правильно.
orlp

Чи може помилкове значення бути 0і правдоподібним будь-яким натуральним числом чи вони повинні бути послідовними. Навіть більше, чи може хибний список бути порожнім списком, а правдивим - будь-який не порожній список?
Містер Xcoder

3
Хороший тест на хибність полягає в тому, що [[1,3],[2,6]]це підробляє евристику "інтервали перетинаються і не мають однакової довжини".
Міша Лавров

Відповіді:



6

Лушпиння , 13 байт

VEΣUẊeTmȯ…¢mD

Здійснює введення у форматі [[l,r],[L,R]]. Повернення 0для фальшивих екземплярів і додатне ціле число для правдивих екземплярів. Спробуйте в Інтернеті!

Пояснення

Основні ідеї є

  1. Зіткнення може статися лише за цілою чи половинною цілою координатою.
  2. Досить змоделювати систему, поки не наступить повторення двох послідовних станів.

Ось код з приміткою.

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

Шляхетна відповідь. Чому потрібно подвоїти кожного? Чи потрібно це перетворити вислів "зіткнення можуть статися лише у цілих чи половинах цілих чисел" у "зіткнення можуть траплятися лише у цілих числах"?
Йона

@Jonah Так, саме так.
Згарб

2

JavaScript (ES6), 104 100 байт

Наївна реалізація, яка просто запускає моделювання. Вважає (a, b, c, d) 4 різними змінними.

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

Тестові справи


2

Мова Вольфрама (Mathematica) , 77 69 61 байт

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

Чиста функція, яка приймає чотири аргументи l1, r1, l2, r2як вхідні дані: наприклад, [0,3,2,4]коли інтервали є [0,3]і [2,4].

Спробуйте в Інтернеті!

Як це працює

Щоб отримати точку, [a,b]близьку до точки в [c,d], якщо припустити a<c<b<d, ми хочемо непарне кратне значення b-aв межах b-cпарного числа d-c. Якщо b-aфакторів 2більше d-c, ніж у нас, ми можемо зробити так, щоб це трапилося саме так: настане час, коли перша точка знаходиться, bа друга - cі тоді ми будемо в хорошій формі. Якщо ні, то найкраще, що ми можемо зробити, - це GCD b-aта d-c.


1

JavaScript (ES6), 89 байт

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

Бере l1,r1,l2,r2окремі аргументи. Пояснення: Моделювання гарантовано повториться після (r1-l1)*(r2-l2)*2одиниць часу (або їх коефіцієнта); gобчислює зміщення відповідного об'єкта за i/2одиницями часу, тому iпотрібно діапазон до (r1-l1)*(r2-l2)*4.


1

05AB1E , 12 10 14 байт

+4 байти для обробки негативних діапазонів

Поверніть 0, якщо фальш, або додатне ціле число в іншому випадку

Використовуйте ідею Згарба про подвоєння значень, щоб полегшити виявлення однієї позиції

Дякую @ Zacharý за вказівку на мої помилки

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

Спробуйте в Інтернеті!

Пояснення:

Ä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

Я не думаю, що це буде працювати для широкого діапазону списку, тому що 100 видається досить довільним.
Zacharý

@ Zacharý Спасибі! Я виправив це дуже неефективно, оскільки зараз списки повторюються занадто багато разів. :-)
scottinet

Насправді це може не працювати досі (я не буду турбуватися розібратися, як це, бо це займе занадто довго, і, чесно кажучи, списки повинні були бути невеликим діапазоном і ВЕЛИЧЕЗНИМ діапазоном від того, що, на мою думку, не вийде )
Zacharý

@ Zacharý Це повинно працювати для довільних великих натуральних чисел, оскільки найгіршим було б [[0,n],[n-1, n]]і навіть у такому випадку другий список буде повторюватися достатньо разів (і більше), щоб перший досяг його верхньої межі. Але я забув врахувати негативні цифри: [[-100, 1], [0, 1]]не працює. Виправлення це вартістю 4 байти :-(
scottinet

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.