Равновесие колебаний


15

У нас есть объекты, которые колеблются между двумя целочисленными точками [l, r]со скоростью одна единица за единицу времени, начиная с lon 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в любом удобном формате и выводите любые истинные / ложные значения.


Истинные входы:

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

Для справки это испытание обратитесь к этой игре , где вы должны определить, можно ли перепрыгнуть с одного блока на другой.
user202729

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

Может ли ложное значение быть 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

Гладкий ответ. Почему вам нужно удвоить каждый? Разве это означает, что выражение «столкновения могут происходить только с целыми или половинными числами» в «столкновения могут происходить только с целыми числами»?
Иона

@ Джона Да, именно так.
Згарб

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

Wolfram Language (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ý Спасибо! Я исправил это очень неэффективно, так как теперь списки повторяются слишком много раз. :-)
scottinet

На самом деле, это может не работать до сих пор (я не буду пытаться понять, как, потому что это займет слишком много времени, и, честно говоря, списки должны быть крошечным диапазоном и ОГРОМНЫМ диапазоном из того, что я думаю, не будет работать )
Захари

@ Zacharý Это должно работать для произвольных больших положительных целых чисел, поскольку наихудший случай будет, [[0,n],[n-1, n]]и даже в этом случае второй список будет повторяться достаточно много раз (и более), чтобы первый достиг своей верхней границы. Но я забыл учесть отрицательные числа: [[-100, 1], [0, 1]]не работает. Исправление это стоило 4 байта :-(
scottinet

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.