振荡平等


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.5t=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正确。
orlp

伪造的值可以是0真实的任何正整数,还是必须一致。更重要的是,falsy可以是空列表,而真理可以是任何非空列表吗?
Xcoder先生17年

3
一个很好的伪造检验是[[1,3],[2,6]]:伪造启发式“间隔重叠且长度不相同”。
Misha Lavrov

Answers:



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)

@Jonah是的,完全是。
Zgarb

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语言(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-ab-c的偶数倍d-c。如果的b-a因素2大于d-c,我们可以准确地做到这一点:有时第一个点在b,第二个点在c,然后我们处于良好状态。如果不是,那么我们能做的最好的是的GCD b-ad-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时间单位(或其因数)之后重复;gi/2时间单位计算适当对象的偏移量,因此i需要范围为(r1-l1)*(r2-l2)*4


1

05AB1E12 10 14字节

+4字节处理负范围

如果为假,则返回0,否则为正整数

使用Zgarb将值加倍的想法使相同位置的检测更加容易

感谢@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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.