진동 평등


15

on [l, r]에서 시작하여 시간 단위당 하나의 단위 속도로 두 개의 정수 포인트 사이에서 진동하는 객체가 있습니다. 당신은 가정 할 수 있습니다 . 예를 들어 객체가 진동 하면 다음과 같은 결과가 나타납니다.lt=0l < 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.5and 도 있습니다 t=3.7 -> 5.3.

사이 [l1, r1]에 진동하는 두 개체가 주어지면 두 개체 가 동일한 위치를 공유 할 [l2, r2]시간이 있는지 확인하십시오 t. 당신은 걸리고 l1, r1, l2, r2어떤 truthy / falsy 값을 편리한 형식으로 출력.


진실한 입력 :

[[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양의 정수일 수 있고 사실 일 수 있습니까 ? 더 나아가 거짓은 빈 목록이되고 진실은 비어 있지 않은 목록이 될 수 있습니까?
Mr. Xcoder

3
좋은 거짓 테스트는 [[1,3],[2,6]]다음과 같습니다. 이는 휴리스틱을 "간격이 겹치고 길이가 동일하지 않습니다"를 위조합니다.
Misha Lavrov

답변:



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

자바 스크립트 (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-ad-c.


1

자바 스크립트 (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을, 그렇지 않으면 양의 정수를 반환

사용 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ý

@ Zacharý 감사합니다! 목록이 너무 여러 번 반복되기 때문에 매우 효과적이지 않은 방식으로 수정했습니다. :-)
scottinet

실제로, 이것은 여전히 ​​작동하지 않을 수 있습니다 (너무 오래 걸리기 때문에 방법을 알아내는 데 귀찮게하지 않을 것입니다. 솔직히 말하면 목록이 작은 범위와 내가 작동하지 않는 것의 거대한 범위 여야 함) )
Zacharý

@ Zacharý 최악의 경우 [[0,n],[n-1, n]]이고 두 번째 목록은 첫 번째 목록이 상한에 도달하기에 충분한 시간 (및 그 이상)을 반복하기 때문에 임의의 큰 양의 정수에 대해 작동해야합니다 . 그러나 음수를 고려하는 것을 잊었습니다 [[-100, 1], [0, 1]]. 작동하지 않습니다. 4 바이트의 비용으로 수정 :-(
scottinet

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.