Ho un gemello con resti permutati?


17

Definiamo come l'elenco dei resti della divisione euclidea di per , , e .Rnn2357

Dato un numero intero , devi capire se esiste un numero intero tale che è una permutazione di .n00<k<210Rn+kRn

Esempi

Il criterio è soddisfatto per , perché:n=8

  • abbiamoR8=(0,2,3,1)
  • per , abbiamo , che è una permutazione di R_8K=44Rn+k=R52=(0,1,2,3)R8

Il criterio non è soddisfatto per n=48 , perché:

  • abbiamo R48=(0,0,3,6)
  • il numero intero più piccolo k>0 tale che Rn+k è una permutazione di R48 è k=210 (portando anche a R258=(0,0,3,6) )

Regole

  • Puoi generare un valore di verità se k esiste e un valore di falsa altrimenti, oppure due valori distinti e coerenti di tua scelta.
  • Questo è .

Suggerimento

Hai davvero bisogno di calcolare k ? Beh forse. O forse no.

Casi test

Alcuni valori di n per cui esiste k :

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

Alcuni valori di n per i quali k non esiste:

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

Risposte:


20

R , 63 59 byte

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

Provalo online!

-4 byte grazie a Giuseppe

(La spiegazione contiene uno spoiler su come risolvere il problema senza calcolare .)k

Spiegazione: Lets è l'elenco dei resti. Nota il vincolo che s [1] <2, s [2] <3, s [3] <5 e s [4] <7. Secondo ilteorema del resto cinese, esiste unk iff esiste una permutazione dis , distinta das , che verifica il vincolo. In pratica, questo verrà verificato se viene verificata una delle seguenti condizioni:

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

Potresti spiegare perché la permutazione è necessariamente distinta da ? S
dfeuer,

1
@dfeuer È una conseguenza del teorema del residuo cinese; Ho aggiunto un link. Se due numeri interi hanno gli stessi resti modulo 2, 3, 5 e 7 (senza permutazione), i due numeri interi sono uguali modulo 2 * 3 * 5 * 7 = 210.
Robin Ryder,

8

Haskell , 69 byte

Basato sul teorema del resto cinese

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]

Provalo online!


4
In realtà, il mio titolo provvisorio per questa sfida era "Ho un gemello cinese?" :)
Arnauld



5

C # (compilatore interattivo Visual C #) , 125 42 38 36 byte

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

Porta diretta della risposta di @ xnor, che si basa sulla soluzione di @ RobinRyder.

4 byte salvati grazie a @ Ørjan Johansen!

Hai salvato altri 2 grazie a @Arnauld!

Provalo online!


1
Ho trovato una variante che lega solo per le lingue di xnor ma aiuta per questo: 38 byte
Ørjan Johansen

1
Non è -~n%6/4>0solo -~n%6>3?
Arnauld,

A proposito, questo è un poliglotta JavaScript .
Arnauld

4

Python 2 , 41 byte

lambda n:n%5!=n%7<5or n%3!=n%5<3or-~n%6/4

Provalo online!

Utilizza la stessa caratterizzazione di Robin Ryder . Il controllo n%2!=n%3<2è abbreviato in -~n%6/4. Scrivere le tre condizioni si è rivelato più breve che scrivere una generale:

46 byte

lambda n:any(n%p!=n%(p+1|1)<p for p in[2,3,5])

Provalo online!




2

Wolfram Language (Mathematica) , 56 byte

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

Provalo online!

Trova tutte le permutazioni di non identità dei resti dell'input modulo 2, 3, 5, 7 e verifica se uno di essi è inferiore {2,3,5,7}in ciascuna coordinata. Si noti che Or@@{}è False.




1

PHP ,81 78 72 byte

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

Un riff sulla risposta di @Robin Ryder . L'input è via STDIN, l'output è 'T'se vero, e vuoto ''se falso.

$ 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

Provalo online!

O 73 byte con 1o 0risposta

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

Provalo online (tutti i casi di test)!

Risposta originale, 133 127 byte

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;}

Provalo online!



1

05AB1E , 16 byte

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

Provalo online o verifica tutti i casi di test .

Spiegazione:

Ƶ.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)

Vedere questo 05AB1E punta del mio (sezione Come comprimere grandi numeri interi? ) Per capire il motivo per cui Ƶ.è 209.



1

Gelatina , 15 byte

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

Provalo online!

Sono sicuro che ci sia una risposta da golfista. Ho interpretato un valore di verità come qualsiasi cosa che non sia zero, quindi qui è il numero di possibili valori di k. Se deve essere due valori distinti che mi costa un ulteriore byte.

Spiegazione

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
Tutto bene per quanto riguarda verità e falsità. Usando la definizione meta-concordata di verità e falsità (in effetti "cosa fa il costrutto if-else del linguaggio se ce n'è uno) zero è falso e i non zeri sono veritieri ( ?è il costrutto if-else in Jelly; per alcune lingue è un domanda più difficile).
Jonathan Allan,

Oh, e potresti ottenere valori distinti senza alcun costo Ḣe$se volessi :)
Jonathan Allan,

@JonathanAllan sì certo, grazie. :)
Nick Kennedy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.