Geçirgen kalıntıları olan bir ikizim var mı?


17

Bu tanımlar Rn Öklid bölünme kalıntıların listesi olarak n göre 2 , 3 , 5 ve 7 .

Bir tamsayı Verilen n0 , sen bir tamsayı vardır olmadığını anlamaya zorunda 0<k<210 olacak şekilde Rn+k bir permütasyon Rn .

Örnekler

Kriter n=8 için karşılandı , çünkü:

  • Elimizdeki R8=(0,2,3,1)
  • için k=44 , elimizdeki Rn+k=R52=(0,1,2,3) , bir permütasyon olan R8

Ölçüt n=48 için karşılanmadı , çünkü:

  • Elimizdeki R48=(0,0,3,6)
  • küçük tam sayı k>0 öyle ki Rn+k bir permütasyon R48 ise k=210 (giden R258=(0,0,3,6) hem de)

kurallar

  • Ya çıkışı truthy değeri ise mayıs k varsa ve başka türlü bir falsy değer veya seçtiğiniz iki ayrı ve tutarlı değerler.
  • Bu .

İpucu

Gerçekten k hesaplamanız gerekiyor mu? Pekala belki. Ya da olmayabilir.

Test senaryoları

Bazı değerler n hangi k var:

3, 4, 5, 8, 30, 100, 200, 2019

Bazı değerler n kendisi için k yok:

0, 1, 2, 13, 19, 48, 210, 1999

Yanıtlar:


20

R , 63 59 bayt

s=scan()%%c(2,3,5,7);i=which(s<c(0,2,3,5));any(s[i]-s[i-1])

Çevrimiçi deneyin!

Giuseppe sayesinde -4 bayt

(Açıklamada, bilgi işlem yapmadan sorunun nasıl çözüleceğine dair bir spoiler bulunmaktadır. k.)

Açıklama: Let s kalıntıların listesi olması. S [1] <2, s [2] <3, s [3] <5 ve s [4] <7 kısıtlamasına dikkat edin. By Çin Kalan Teoremi , bir vardır k bir permütasyon bir iff s farklı, s kısıtlamayı doğrular. Uygulamada, aşağıdaki koşullardan biri doğrulanırsa bu doğrulanır:

  • s [2] <2 ve s [2]! = s [1]
  • s [3] <3 ve s [3]! = s [2]
  • s [4] <5 ve s [4]! = s [3]

Permütasyonun neden mutlaka farklı olduğunu açıklayabilir misiniz ? s
dfeuer

1
@dfeuer Bu, Çin Kalan Teoreminin bir sonucudur; Bir bağlantı ekledim. İki tamsayı aynı kalan modulo 2, 3, 5 ve 7'ye sahipse (permütasyon olmadan), iki tamsayı eşit modulo 2 * 3 * 5 * 7 = 210'dur.
Robin Ryder

8

Haskell , 69 bayt

Çin'in kalan teoremine dayanarak

m=[2,3,5,7]
f x|s<-mod x<$>m=or[m!!a>b|a<-[0..2],b<-drop a s,s!!a/=b]

Çevrimiçi deneyin!


4
Aslında, bu meydan okuma için çalışma başlığım "Çinli ikizim var mı?" :)
Arnauld



5

C # (Görsel C # Etkileşimli Derleyici) , 125 42 38 36 bayt

n=>n%7<5&5<n%35|n%5<3&3<n%15|-~n%6>3

@ RobinRyder'in çözümüne dayanan @ xnor'ın cevabının doğrudan portu.

@ Ørjan Johansen sayesinde 4 bayt tasarruf edildi!

@Arnauld! Sayesinde 2 kayıt daha kaydedildi

Çevrimiçi deneyin!


1
Ben sadece xnor'ın dilleri için bağlanan ama buna yardımcı olan bir varyasyon buldum: 38 bayt
Ørjan Johansen

1
-~n%6/4>0Sadece değil -~n%6>3mi?
Arnauld

BTW, bu bir JavaScript polyglot .
Arnauld




2

Wolfram Dili (Mathematica) , 56 bayt

Or@@(Min[s-#]>0&/@Rest@Permutations@Mod[#,s={2,3,5,7}])&

Çevrimiçi deneyin!

Giriş modulo 2, 3, 5, 7'nin geri kalanlarının kimlik dışı tüm permütasyonlarını bulur ve {2,3,5,7}her bir koordinatta bunlardan herhangi birinin aşağıda olup olmadığını kontrol eder. Not Or@@{}olduğunu False.




1

PHP ,81 78 72 bayt

while($y<3)if($argn%($u='235'[$y])!=($b=$argn%'357'[$y++])&$b<$u)die(T);

Robin Ryder'ın cevabına bir riff . Girdi STDIN, çıktı 'T'doğruysa ve boşsa ''boştur.

$ echo 3|php -nF euc.php
T
$ echo 5|php -nF euc.php
T
$ echo 2019|php -nF euc.php
T
$ echo 0|php -nF euc.php

$ echo 2|php -nF euc.php

$ echo 1999|php -nF euc.php

Çevrimiçi deneyin!

Veya 73 bayt 1veya 0yanıt

while($y<3)$r|=$argn%($u='235'[$y])!=($b=$argn%'357'[$y++])&$b<$u;echo$r;

$ echo 2019|php -nF euc.php
1
$ echo 1999|php -nF euc.php
0

Çevrimiçi deneyin (tüm test senaryoları)!

Orijinal cevap, 133 127 bayt

function($n){while(++$k<210)if(($r=function($n){foreach([2,3,5,7]as$d)$o[]=$n%$d;sort($o);return$o;})($n+$k)==$r($n))return 1;}

Çevrimiçi deneyin!



1

05AB1E , 16 bayt

Ƶ.L+ε‚ε4Åp%{}Ë}à

Çevrimiçi deneyin veya tüm test senaryolarını doğrulayın .

Açıklama:

Ƶ.L          # Create a list in the range [1,209] (which is k)
   +         # Add the (implicit) input to each (which is n+k)
    ε        # Map each value to:
            #  Pair it with the (implicit) input
      ε      #  Map both to:
       4Åp   #   Get the first 4 primes: [2,3,5,7]
          %  #   Modulo the current number by each of these four (now we have R_n and R_n+k)
           { #   Sort the list
           #  After the inner map: check if both sorted lists are equal
           # After the outer map: check if any are truthy by taking the maximum
             # (which is output implicitly as result)

Neden Ƶ.olduğunu anlamak için bu 05AB1E ucuma bakın ( Büyük tamsayılar nasıl sıkıştırılır? Bölümü )209 .



1

Jöle , 15 bayt

8ÆR©PḶ+%Ṣ¥€®ċḢ$

Çevrimiçi deneyin!

Eminim golfçü bir cevap var. Doğruluk değerini sıfır olmayan bir şey olarak yorumladım, işte burada k olası değerlerinin sayısı. İki ayrı değer olması gerekiyorsa bana bir bayt daha mal olur.

açıklama

8ÆR             | Primes less than 8 [2,3,5,7]
   ©            | Copy to register
    P           | Product [210]
     Ḷ          | Lowered range [0, 1, ..., 208, 209]
      +         | Add to input
         ¥€     | For each of these 210 numbers...
       %   ®    |   Modulo 2, 3, 5, 7
        Ṣ       |   And sort
            ċḢ$ | Count how many match the first (input) number’s remainders

1
Doğruluk vs falsey ile ilgili tüm iyi. Doğruluk ve falsanın meta olarak kabul edilen tanımını kullanarak (etkili bir şekilde, eğer dil varsa if-else yapısı ne yaparsa) sıfır falseydir ve sıfır olmayanlar doğrudur (Jelly'deki ?if-else yapısıdır; bazı diller için zor soru).
Jonathan Allan

Oh, ve Ḣe$eğer isterseniz ücretsiz olarak farklı değerler elde edebilirsiniz :)
Jonathan Allan

@JonathanAllan evet elbette, teşekkürler. :)
Nick Kennedy
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.