Primi e ultimi numeri primi con cifre primi dell'intervallo


12

Sfida

Per un dato intervallo di numeri interi positivi, trova il primo e l'ultimo numero primo interamente composto da cifre di numeri primi, incluso eccezionalmente 0 (per le cifre , un intervallo di 0-2 dovrebbe produrre 2-2). La gamma è inclusiva. Se non viene trovato alcun numero, l'output previsto è 0. Se esiste un solo numero, l'output previsto è quel numero due volte.

Esempi

  • Per l'intervallo 1–100, il primo numero primo è 2 e l'ultimo è 73 (7 e 3 sono numeri primi).
  • Per l'intervallo 70–80, il primo numero primo è 73 e l'ultimo è anche 73 (Poiché esiste un solo numero corretto in un determinato intervallo, lo restituiamo due volte).
  • Per l'intervallo 190–200, non esiste una risposta corretta, quindi si restituisce 0.
  • Per l'intervallo 2000-2100, il primo numero primo è 2003 e l'ultimo è 2053 (omettiamo la cifra 0, ma tutte le altre cifre sono prime)

Questo è , quindi vince il codice più corto in byte!

Si applicano tutte le scappatoie standard.

Ingresso

  • Sei libero di accettare due numeri interi come input, tuttavia potresti vedere fit, stack, argomenti di funzione, argomento CLI, stdin.
  • È necessario ricevere solo due numeri interi.

Produzione

  • È necessario sia restituire il risultato (una tupla, un array, multi-ritorno Se il vostro supporto per il linguaggio it), lasciano in pila, o stamparlo (in questo caso, essi devono essere separati in qualche modo).
  • L'ordine delle uscite è irrilevante.
  • Sono consentite parentesi / linee guida iniziali / finali.
  • È necessario restituire due numeri, se esiste una risposta, anche se sono uguali.
  • È necessario restituire 0 se non è presente alcuna risposta.

Solo per essere sicuro, se sto restituendo un elenco di numeri interi quando ci sono risposte, posso restituire un elenco contenente solo 0 quando non ci sono risposte? Non ho bisogno di tornare 0invece di [0]?
Οurous

Risposte:



5

Perl 6, 105 94 90 86 byte

{my @b=grep {is-prime all($_,|.comb>>.Int Xor 2)},$^a..$^b;say @b??"@b[0] @b[*-1]"!!0}

4

JavaScript (ES6), 83 byte

Prende l'intervallo [ab] nella sintassi del curry (a)(b). Restituisce un array di 2 elementi o 0 .

n=>g=(m,a=0)=>n>m?a:g(m-1,(P=d=>m%--d?P(d):d>1|/[14689]/.test(m))(m)?a:[m,a[1]||m])

Casi test



3

Gelatina , 14 byte

æRµDo2ÆPẠµÐf.ị

Provalo online!

Come funziona

æRµDo2ÆPẠµÐf.ị ~ Programma completo.

æR ~ Prima gamma inclusiva.
  µ µÐf ~ Conservare solo quelli che soddisfano una condizione.
   Do2ÆPẠ ~ La condizione del filtro:
   D ~ Le cifre decimali del numero corrente.
    o2 ~ Logico o con 2 (mappa da 0 a 2 e qualsiasi altra cifra su se stessa).
      ÆP ~ È prime (per quanto riguarda gli elementi)?
        Ạ ~ Controllare se tutte le cifre soddisfano la condizione.
            .ị ~ Ottieni l'elemento all'indice modulare 0.5. Alcuni dettagli:
                 ~ Jelly è 1 indicizzata, quindi 1 ci dà il primo elemento, mentre 0
                   ci dà l'ultimo elemento.
                 ~ Se il soffitto e il pavimento del numero N specificato non corrispondono, 
                   quindi Jelly restituisce gli articoli al piano degli indici (N) e al ceil (N).
                 ~ Se l'elenco è vuoto, questo produce 0, quindi è molto conveniente.

Se prendere l'intero intervallo sarebbe consentito (anche se penso che non dovrebbe essere), quindi 12 byte:

Do2,ÆPȦµÐf.ị

Provalo online!


13 byte Anche se non è molto simile. Devo solo pubblicarlo da solo? Puoi prenderlo se vuoi, ma fammi sapere se hai intenzione di mantenere la tua soluzione.
Dylnan,

Dice OP For a given positive integers range. Chiederò di chiarire
Dylnan il

@dylnan nota che la tua versione non è valida comunque ( 0è un'eccezione alla sfida, perché per qualche motivo dovrebbe essere trattata come una cifra primaria). Comunque, ho pubblicato una versione più breve e valida
Mr. Xcoder il

Oh, ho pensato che lo 0 è la regola principale era stata cambiata
dylnan il

3

Brachylog , 16 byte

⟦₂{ṗṗᵐ}ˢ⟨⌋≡⌉⟩|∧0

Provalo online!

Il "return 0 se non c'è il primo" completamente non sensato ci fa perdere 3 byte ( |∧0) senza motivo (ritornerebbe false.se non li aggiungessimo)

Spiegazione

⟦₂                Range from the smallest element of the input to the biggest
  {   }ˢ          Select on that range:
   ṗ                Numbers that are primes
    ṗᵐ              And whose digits are primes
        ⟨   ⟩     Fork on this new list:
         ⌋          Minimum
           ⌉        maximum
          ≡         Do nothing and return [Minimum, Maximum]
             |∧0  If all of this fails (i.e. the list after selection is empty), return 0

Non valido perché non gestisce la cifra 0 come principale (come specificato nella sfida). Quindi, fallisce per[2000, 2100]
Mr. Xcoder il

3

Pyth , 24 byte

L'uso del mio approccio iniziale risulta essere più breve.

.x,eKfP#I_M-+TjT;0}EQhKZ

Provalo qui!

(Stavo solo aggiornando a 23 ma Steven mi ha battuto )

?KfP#I_M-+TjT;0}FQhM_BK0

Provalo qui!

Nativamente, hM_BKpuò essere sostituito da ,hKeK.

25 byte

.x,eKf.AmP_|d2+TjT;}EQhKZ

Provalo qui!

26 byte

|>2.<f.AmP_|d2+TjT;*2}EQ1Z

Provalo qui!

|>2.<fP#I_M|R2+TjT;*2}EQ1Z

Provalo qui!


Come funzionano

.x,eKfP#I_M-+TjT;0}EQhKZ ~ Full program. Q, E = first, second inputs

.x                     Z ~ Try-catch block. If the code errors, output 0.
     f            }EQ    ~ Filter the range [E ... Q] for (uses a variable T):
            +TjT;          ~ Append T to the list of its digits.
           -     0         ~ Remove the zeros.
         _M                ~ Multiply each by -1 (for primality testing).
        I                  ~ Check if the result is invariant over...
      P#                   ~ Removing non-prime items.
    K                    ~ Assigned the filtered range to a variable K.
  ,e                     ~ Pair the last element of K with...
                     hK  ~ Its first element.

|>2.<f.AmP_|d2+TjT;*2}EQ1Z ~ Full program.

                   *2}EQ   ~ Inclusive range, repeated twice..
     f                     ~ Filter, using T as the current number.
                jT;        ~ Base-10 digits of T.
              +T           ~ Concatenated with T.
        mP_|d2             ~ Prime check after performing OR 2 (makes 0 be treated as prime)
      .A                   ~ Do all satisfy this condition?
   .<                   1  ~ Rotate by one place cyclically to the left.
 >2                        ~ Last two elements (ignored if there aren't enough)
|                        Z ~ Logical or with 0.


Questo non restituisce due istanze di [73] nel caso di test [70, 80].
Steven H.

Ti ho superato di 1, ora a 25.
Steven H.

@StevenH. Ti ha superato di 1, ora alle 24.
Mr. Xcoder il

La competizione si sta intensificando ... a 23 anni!
Steven H.

2

Mathematica 85 byte

So che esiste già una risposta simile, ma l'approccio qui è piuttosto diverso.

MinMax@Cases[Range@##,x_/;PrimeQ@x&&DisjointQ@@IntegerDigits/@{x,14689}]/.{_,∞}->0&

Questa risposta di 83 caratteri verrà incollata ed eseguita in Mathematica. Il sito TIO non sa come interpretare ∞.


2

Gelatina , 14 byte

Do2ÆPẠ
æRÇÐf.ị

Provalo online!

æRÇÐf.ị            Main link
æR                 Prime range
   Ðf              Filter the range with...
  Ç                The helper link
      ị            At index (decimal, returns [xs[floor], xs[ceil]], otherwise 0)
     .             0.5

Do2ÆPẠ             Helper link
D                  For each decimal
 o2                Replace 0s with 2s, an actual prime prime (could be 3, 5, or 7).
   ÆP              Filter primes (1 if true, 0 if false)
     Ạ             Check if all are true

Grazie a Erik the Outgolfer per l'aiuto nella correzione di un bug. Grazie a Mr. Xcoder per il .ịtrucco.


Funzionerebbe ṙ-ḣ2per Ḣ,Ṫrisolverlo (potrebbe essere necessario modificarlo un po 'di più)?
Zacharý,

@ Zacharý che dà l'output nell'ordine sbagliato, però. E non sembra funzionare: \
Ven

@ Mr.Xcoder La stanza Jelly mi ha portato alla stessa soluzione. Grazie!
Ven

.ịpotrebbe anche funzionare (tipo di furto dal signor XCoder)
Zacharý,

Hai ragione! Bello.
Ven



1

Perl 6 ,  68 66 65 61  58 byte

{($_=($^a..$^b).grep({.is-prime&&/^<[02357]>+$/})[0,*-1])[1]??$_!!0}

Provalo

{($_=($^a..$^b).grep({.is-prime&&!/<[14689]>/})[0,*-1])[1]??$_!!0}

Provalo

{($_=($^a..$^b).grep({.is-prime*!/<[14689]>/})[0,*-1])[1]??$_!!0}

Provalo

{($_=($^a..$^b).grep({.is-prime*!/<[14689]>/}))??.[0,*-1]!!0}

Provalo

{($_=grep {.is-prime*!/<[14689]>/},$^a..$^b)??.[0,*-1]!!0}

Provalo

Allargato:

{  # bare block lambda with two placeholder parameters 「$a」 and 「$b」

  (
    $_ =  # store the list in 「$_」 for later use

      grep {
          .is-prime

        *              # True * True == 1 (all others equal 0)

          !/<[14689]>/ # doesn't contain a non-prime other than 0
      },

      $^a .. $^b       # inclusive Range

  )            # is the list Truish (not empty)
  ?? .[0,*-1]  # if so output the first and last values (from 「$_」)
  !! 0         # otherwise return 0
}


1

Java 8, 165 164 byte

(a,b)->{for(;a<=b&!p(a);a++);for(;b>a&!p(b);b--);return a>b?"0":a+" "+b;}boolean p(int n){int N=n,i=2;for(;i<N;N=N%i++<1?0:N);return(n+"").matches("[02357]+")&N>1;}

Spiegazione:

Provalo qui.

(a,b)->{            // Method with two integer parameters and String return-type
                    //  (Input `a` is the lowest input, input `b` is the highest input)
  for(;a<=b         //  Increase `a` as long as it's smaller than or equal to `b`,
       &!p(a);a++); //   and it's not a prime, and not all of its digits are prime-digits
  for(;b>a          //  Decrease `b` as long as it's larger than `a`,
       &!p(b);b--); //   and it's not a prime, and not all of its digits are prime-digits
  return a>b?       //  If `a` is now larger than `b`:
    "0"             //   Return 0, because nothing is found
   :                //  Else:
    a+" "+b;}       //   Return the resulting `a` and `b`

boolean p(int n){int N=n,i=2;for(;i<N;N=N%i++<1?0:N);return(n+"").matches("[02357]+")&N>1;}
                    // Separate method that returns whether the input integer is a prime,
                    //  and all of its digits are also primes (or 0)

1

Pulito , 142 131 125 byte

import StdEnv
@a b#l=[n\\n<-[a..b]|and[gcd p n<2&&or[c==k\\k<-:"02357"]\\p<-[1..n-1],c<-:toString n]]
|l>[]=[hd l,last l]=[0]

Ungolfed:

import StdEnv
fn start finish
    # primes
        = [ n
            \\
            n <- [start..finish]
            | and [ gcd p n == 1 && isMember c ['0','2','3','5','7'] 
                \\
                p <- [1..n-1],
                c <-: toString n
            ]
        ]
    | isEmpty primes
        = [0]
    = [hd primes, last primes]

Provalo online!


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.