Primer y último número primo con dígitos primos de rango

12

Desafío

Para un rango entero positivo dado, encuentre el primer y último número primo completamente compuesto por dígitos de números primos, incluyendo excepcionalmente 0 (para los dígitos , un rango de 0-2 debería generar 2-2). El rango es inclusivo. Si no se encuentra ningún número, la salida esperada es 0. Si solo hay uno de esos números, la salida esperada es ese número dos veces.

Ejemplos

  • Para el rango 1–100, el primer número primo es 2 y el último es 73 (7 y 3 son números primos).
  • Para el rango 70–80, el primer número primo es 73 y el último también es 73 (dado que solo hay un número correcto en el rango dado, lo devolvemos dos veces).
  • Para el rango 190–200, no hay una respuesta correcta, por lo que devuelve 0.
  • Para el rango 2000-2100, el primer número primo es 2003 y el último es 2053 (omitimos el dígito 0, pero todos los demás dígitos son primos)

Este es el , por lo que gana el código más corto en bytes.

Se aplican todas las lagunas estándar.

Entrada

  • Usted es libre de aceptar dos enteros como entrada, sin embargo, puede ver fit, stack, argumento (s) de función, argumento CLI, stdin.
  • Solo debes recibir dos enteros.

Salida

  • Usted debe o bien devolver el resultado (una tupla, una matriz, múltiples regreso si sus soportes Idioma), lo dejan en la pila, o imprimirlo (en este caso, deben ser separados de alguna manera).
  • El orden de las salidas es irrelevante.
  • Se le permiten paréntesis iniciales / finales y líneas nuevas.
  • Debe devolver dos números, si hay una respuesta, incluso si son iguales.
  • Debe devolver 0 si no hay respuesta.
LamaDelRay
fuente
Solo para asegurarme, si estoy devolviendo una lista de enteros cuando hay respuestas, ¿puedo devolver una lista que contiene solo 0 cuando no hay respuestas? No necesito volver en 0lugar de [0]?
Οurous

Respuestas:

5

Perl 6, 105 94 90 86 bytes

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

JavaScript (ES6), 83 bytes

Toma el rango [ab] en la sintaxis de curry (a)(b). Devuelve una matriz de 2 elementos 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])

Casos de prueba

Arnauld
fuente
4

Mathematica, 91 bytes

If[(s=Select[Range@##,(p=PrimeQ)@#&&And@@((p@#||#<1)&/@IntegerDigits@#)&])!={},MinMax@s,0]&

Pruébalo en línea!

J42161217
fuente
3

Jalea , 14 bytes

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

Pruébalo en línea!

Cómo funciona

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

æR ~ Gama prima inclusiva.
  µ µÐf ~ Solo conserve las que cumplan una condición.
   Do2ÆPẠ ~ La condición del filtro:
   D ~ Los dígitos decimales del número actual.
    o2 ~ Lógico o con 2 (asigna 0 a 2 y cualquier otro dígito a sí mismo).
      ÆP ~ ¿Es primo (elemento inteligente)?
        Ạ ~ Compruebe si todos los dígitos cumplen la condición.
            .ị ~ Obtenga el elemento en el índice modular 0.5. Algunos detalles:
                 ~ Jelly está indexada en 1, entonces 1 nos da el primer elemento, mientras que 0
                   nos da el último elemento.
                 ~ Si el techo y el piso del número N no coinciden, 
                   entonces Jelly devuelve los artículos en los índices piso (N) y techo (N).
                 ~ Si la lista está vacía, esto produce 0, por lo tanto, es muy conveniente.

Si se permitiera tomar todo el rango (aunque creo que no debería serlo), entonces 12 bytes:

Do2,ÆPȦµÐf.ị

Pruébalo en línea!

Sr. Xcoder
fuente
13 bytes Aunque no es súper similar. ¿Debería publicarlo yo mismo? Puede tomarlo si lo desea, pero avíseme si va a mantener su solución.
dylnan
OP dice For a given positive integers range. Voy a pedir aclaraciones
dylnan
@dylnan tenga en cuenta que su versión no es válida de todos modos ( 0es la excepción del desafío, porque por algún motivo debe tratarse como un dígito principal). De todos modos,
publiqué
Oh, pensé que el 0 es la regla principal había cambiado
dylnan
3

Brachylog , 16 bytes

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

Pruébalo en línea!

El "retorno 0 si no hay primo" completamente no sensorial nos hace perder 3 bytes ( |∧0) sin ningún motivo (volvería false.si no los agregamos)

Explicación

⟦₂                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
Fatalizar
fuente
No es válido porque no maneja el dígito 0 como primo (como se especifica en el desafío). Por lo tanto, falla[2000, 2100]
Sr. Xcoder
3

Pyth , 24 bytes

Usar mi enfoque inicial resulta ser más corto.

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

Pruébalo aquí!

(Estaba actualizando a 23 pero Steven me ganó )

?KfP#I_M-+TjT;0}FQhM_BK0

Pruébalo aquí!

Nativamente, hM_BKpuede ser reemplazado por ,hKeK.

25 bytes

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

Pruébalo aquí!

26 bytes

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

Pruébalo aquí!

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

Pruébalo aquí!


Cómo trabajan ellos

.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.
Sr. Xcoder
fuente
Este no devuelve dos instancias de [73] en el caso de prueba [70, 80].
Steven H.
Te superó por 1, ahora a 25.
Steven H.
@StevenH. Te superó por 1, ahora a las 24.
Sr. Xcoder
La competencia se vuelve intensa ... ¡a los 23!
Steven H.
2

Mathematica 85 Bytes

Sé que ya hay una respuesta similar, pero el enfoque aquí es bastante diferente.

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

Esta respuesta de 83 caracteres se pegará y se ejecutará en Mathematica. El sitio TIO no sabe cómo interpretar ∞.

Kelly Lowder
fuente
2

Jalea , 14 bytes

Do2ÆPẠ
æRÇÐf.ị

Pruébalo en línea!

æ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

Gracias a Erik the Outgolfer por la ayuda que corrige un error. Gracias al Sr. Xcoder por el .ịtruco.

Ven
fuente
¿ ṙ-ḣ2Funcionaría para Ḣ,Ṫsolucionarlo (podría tener que modificar un poco más)?
Zacharý
@ Zacharý que da la salida en el orden incorrecto, sin embargo. Y no parece funcionar: \
Ven
@ Mr.Xcoder La sala Jelly me llevó a la misma solución. ¡Gracias!
Ven
.ịpodría funcionar también (algo robado del Sr. XCoder)
Zacharý
¡Tienes razón! Eso es bueno.
Ven
1

Perl 6 ,  68 66 65 61  58 bytes

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

Intentalo

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

Intentalo

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

Intentalo

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

Intentalo

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

Intentalo

Expandido:

{  # 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
}
Brad Gilbert b2gills
fuente
1

Java 8, 165 164 bytes

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

Explicación:

Pruébalo aquí.

(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)
Kevin Cruijssen
fuente
1

Limpias , 142 131 125 bytes

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]

Sin golf:

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]

Pruébalo en línea!

Οurous
fuente
1

Pyth, 28 25 23 bytes

.xhM_BfP#I_M #+TjT;}FQ0

Banco de pruebas. Devuelve [2003,2053] para el último caso de prueba, ya que 2053 es primo.

Steven H.
fuente
Jaja, inválido. Devoluciones en [0, 0]lugar de0
Sr. Xcoder
Ah, dispara. Lo arreglaré
Steven H.
@ Mr.Xcoder fijo!
Steven H.
Maldita sea, yo también estaba actualizando con 23
Sr. Xcoder
Pensé que habías dicho que te ibas a la cama ... Te engañaste: P
Steven H.