振動の平等


15

on [l, r]から始まる、時間単位ごとに1単位の速度で、2つの整数点間で振動するオブジェクトがあります。あなたが仮定することができます。たとえば、オブジェクトがで振動する場合、次のようになります。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.5ありt=3.7 -> 5.3ます。

、の間[l1, r1]で振動する2つのオブジェクトが与えられた[l2, r2]場合t、2つのオブジェクトが同じ位置を共有するような時間が存在するかどうかを判断します。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 

正弦波ではなく、とがった波ですよね?
ハイパーニュートリノ

参考として、この課題はこのゲームを参照しください。このゲームでは、あるブロックから別のブロックにジャンプできるかどうかを検出する必要があります。
user202729

@HyperNeutrino正しい。
-orlp

偽の値は0、正の整数である可能性がありますか、または一貫している必要があります。さらに、偽りが空のリストになり、真実が空でないリストになることはありますか?
ミスターXcoder

3
良い偽のテストは[[1,3],[2,6]]次のとおりです。これはヒューリスティックな「間隔が重複し、同じ長さではない」ことを偽装します。
ミシャラヴロフ

回答:



6

、13バイト

VEΣUẊeTmȯ…¢mD

形式で入力を取ります[[l,r],[L,R]]0偽のインスタンスの場合は返し、真偽のインスタンスの場合は正の整数を返します。 オンラインでお試しください!

説明

主なアイデアは

  1. 衝突は、整数または半整数の座標でのみ発生します。
  2. 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

滑らかな答え。なぜそれぞれを倍増する必要があるのですか?「衝突は整数または半分の整数でのみ発生する」というステートメントを「衝突は整数でのみ発生する」に変えるのですか?
ジョナ

@ジョナはい、正確に。
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]&

4つの引数を取る純粋な関数 l1, r1, l2, r2入力として:たとえば、[0,3,2,4]間隔が[0,3]およびの場合[2,4]

オンラインでお試しください!

使い方

ポイントをポイントに[a,b]近づけるためには、の偶数倍の内の奇数倍が必要だ[c,d]と仮定します。場合の複数の要因がある以上をそこに最初のポイントはである時間になります、私たちはこれを正確に実現することが可能と第二の点はであり、その後、我々は良い形にしています。そうでなければ、私たちができる最善はのGCDであると。a<c<b<db-ab-cd-cb-a2d-cbcb-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時間単位(またはその要因)の後に繰り返されることが保証されています。時間単位のg後に適切なオブジェクトのオフセットを計算するため、最大の範囲i/2であるi必要があります(r1-l1)*(r2-l2)*4


1

05AB1E12 10 14バイト

負の範囲を処理する+4バイト

偽の場合は0を返し、そうでない場合は正の整数を返します

Zgarbのアイデアを使用する値を2倍にするをして、同じ位置検出を簡単にします

間違いを指摘してくれた@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は非常にarbitrary意的であるため、これは大きなリスト範囲で機能するとは思わない。
ザカリー

@Zacharýありがとう!リストが何度も繰り返されるようになったため、非常に非効率的な方法で修正しました。:-)
スコチネット

実際には、これはまだ機能しないかもしれません(どのように時間がかかるか、そして正直に言うと、リストが機能しないと思われる範囲から小さな範囲と大きな範囲でなければならないので、私は気にすることはありません) )
ザカリー

@Zacharý任意の大きな正の整数で動作するはずです。最悪の場合があり[[0,n],[n-1, n]]、その場合でも、最初のリストが上限に達するのに十分な回数(およびそれ以上)繰り返されるからです。しかし、負の数を考慮に入れるのを忘れて[[-100, 1], [0, 1]]いました。動作しません。4バイトのコストで修正:
scottinet

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.