Salınım eşitliği


15

İki tam sayı noktaları arasında salınım, bu nesneler [l, r], zaman birimi başına bir birim hızında başlayarak lilgili t=0. Varsayabilirsiniz l < r. Örneğin, bir nesne salınırsa [3, 6], o zaman:

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

Vb Ama nesneler sürekli salınır, bu yüzden t=0.5 -> 3.5ve de var t=3.7 -> 5.3.

İki nesne arasındaki salınan Verilen [l1, r1], [l2, r2]hiç bir zaman varsa, belirlemek tiki nesnenin aynı tutumu paylaştıklarını öyle. Sen almak yapmak l1, r1, l2, r2herhangi truthy / falsy değerleri uygun herhangi bir formatta ve çıkışı.


Gerçek girdiler:

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

Falsy girişleri:

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

yani sinüsoid değil sivri bir dalga, değil mi?
HyperNeutrino

Referans için bu meydan okuma , bir bloktan diğerine atlamanın mümkün olup olmadığını tespit etmeniz gereken bu oyuna bakın .
user202729

@HyperNeutrino Doğru.
orlp

Sahte değer 0herhangi bir pozitif tamsayı olabilir mi ve doğrudur mu yoksa tutarlı mı olmalıdırlar. Dahası, falsy boş liste olabilir ve doğruluk boş olmayan herhangi bir liste olabilir mi?
Bay Xcoder

3
İyi bir tahlil testi [[1,3],[2,6]]: bu sezgisel "aralıkların üst üste geldiği ve aynı uzunlukta olmadığı" nı tahrif eder.
Misha Lavrov

Yanıtlar:



6

Kabuk , 13 bayt

VEΣUẊeTmȯ…¢mD

Girişi formatta alır [[l,r],[L,R]]. İade 0falsy örnekleri ve truthy örnekleri için bir pozitif tamsayı için. Çevrimiçi deneyin!

açıklama

Ana fikirler

  1. Bir çarpışma yalnızca tamsayı veya yarı-tamsayı koordinatında gerçekleşebilir.
  2. Birbirini takip eden iki durumun tekrarlanmasıyla karşılaşana kadar sistemi simüle etmek yeterlidir.

İşte ek açıklama eklenmiş kod.

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

Kaygan cevap. Neden her birini ikiye katlamanız gerekiyor? "Çarpışmalar yalnızca tamsayılarda veya yarı tamsayılarda olabilir" ifadesini "çarpışmalar yalnızca tamsayılarda olabilir" ifadesine dönüştürmek mi?
Jonah

@Jonah Evet, kesinlikle.
Zgarb

2

JavaScript (ES6), 104 , 100 bayt

Simülasyonu çalıştıran saf bir uygulama. Alır (a, b, c, d) 4 ayrı değişkenler olarak.

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

Test senaryoları


2

Wolfram Dili (Mathematica) , 77 69 61 bayt

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

Dört argümanı l1, r1, l2, r2girdi olarak alan saf bir işlev : örneğin, [0,3,2,4]aralıklar [0,3]ve olduğunda [2,4].

Çevrimiçi deneyin!

Nasıl çalışır

Bir noktaya almak için [a,b]bir noktaya yakın [c,d], varsayarak a<c<b<d, biz garip bir katını istiyorum b-aiçinde b-ceşit bir şekilde çoklu d-c. Eğer b-adaha faktörleri vardır 2daha d-cilk noktasında olduğu bir zaman olacak: biz bu tam başarabiliriz bve ikinci noktasında olduğunu cve daha sonra biz iyi durumdayız. Değilse, yapabileceğimiz en iyi şey b-ave d-c.


1

JavaScript (ES6), 89 bayt

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

Alır l1,r1,l2,r2ayrı argümanlar olarak. Açıklama: Simülasyonun (r1-l1)*(r2-l2)*2zaman birimleri (veya bir faktörü) sonrasında tekrarlanacağı garanti edilir ; zaman birimlerinden gsonra uygun nesnenin ofsetini hesaplar i/2, bu yüzden ien fazla aralık olmalıdır (r1-l1)*(r2-l2)*4.


1

05AB1E , 12 10 14 bayt

Negatif aralıkları işlemek için +4 bayt

Yanlışsa 0, aksi takdirde pozitif bir tamsayı döndürün

Aynı konum algılamayı kolaylaştırmak için Zgarb'ın değerleri ikiye katlama fikrini kullanın

Hatalarıma işaret ettiği için @ Zacharý'ya teşekkürler

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

Çevrimiçi deneyin!

açıklamalar:

Ä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

Bunun büyük liste aralıkları için çalışacağını sanmıyorum, çünkü 100 oldukça keyfi görünüyor.
Zacharý

@ Zacharý Teşekkürler! Şimdi listeler çok fazla kez tekrarlandığından, çok etkisiz bir şekilde düzelttim. :-)
scottinet

Aslında, bu hala işe yaramayabilir (nasıl olacağını anlamak için uğraşmayacağım, çünkü çok uzun sürecek ve dürüst olmak gerekirse, listeler küçük bir aralık ve işe yaramayacağını düşündüğümden BÜYÜK bir aralık olmalı )
Zacharý

@ Zacharý Keyfi büyük pozitif tamsayılar için çalışmalıdır, çünkü en kötü durum olurdu [[0,n],[n-1, n]]ve bu durumda bile, ikinci liste ilk listenin üst sınırına ulaşması için yeterince kez (ve daha fazlası) tekrarlanacaktır. Ama negatif sayıları hesaba katmayı unuttum: [[-100, 1], [0, 1]]çalışmıyor. 4 baytlık bir maliyetle sabitleme :-(
scottinet

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.