Poderes autocontenidos

13

Dado un entero n, genera el exponente más pequeño emayor que 1, que n^econtiene ncomo una subcadena.

Por ejemplo, para 25, la respuesta debería ser 2, como 25 ^ 2 = 625, que contiene 25como una subcadena, pero la respuesta para 13debería ser 10, como 13 ^ 10 = 137858491849, así 10es el exponente más bajo para el que el resultado contiene 13como una subcadena.

Reglas

  • Reglas estándar de E / S
  • Se aplican lagunas estándar
  • El código más corto en bytes gana
  • n siempre será un número entero mayor que 0

Casos de prueba

1 => 2   (1 ^ 2 = 1)
2 => 5   (2 ^ 5 = 32)
3 => 5   (3 ^ 5 = 243)
4 => 3   (4 ^ 3 = 64)
5 => 2   (5 ^ 2 = 25)
6 => 2   (6 ^ 2 = 36)
7 => 5   (7 ^ 5 = 16807)
8 => 5   (8 ^ 5 = 32768)
9 => 3   (9 ^ 3 = 729)
10 => 2  (10 ^ 2 = 100)
11 => 11 (11 ^ 11 = 285311670611)
12 => 14 (12 ^ 14 = 1283918464548864)
13 => 10 (13 ^ 10 = 137858491849)
14 => 8  (14 ^ 8 = 1475789056)
15 => 26 (15 ^ 26 = 3787675244106352329254150390625)
16 => 6  (16 ^ 6 = 16777216)
17 => 17 (17 ^ 17 = 827240261886336764177)
18 => 5  (18 ^ 5 = 1889568)
19 => 11 (19 ^ 11 = 116490258898219)
20 => 5  (20 ^ 5 = 3200000)
25 => 2  (25 ^ 2 = 625)
30 => 5  (30 ^ 5 = 24300000)
35 => 10 (35 ^ 10 = 2758547353515625)
40 => 3  (40 ^ 3 = 64000)
45 => 5  (45 ^ 5 = 184528125)
50 => 2  (50 ^ 2 = 2500)
55 => 11 (55 ^ 11 = 13931233916552734375)
60 => 2  (60 ^ 2 = 3600)
65 => 17 (65 ^ 17 = 6599743590836592050933837890625)
70 => 5  (70 ^ 5 = 1680700000)
75 => 3  (75 ^ 3 = 421875)
80 => 5  (80 ^ 5 = 3276800000)
85 => 22 (85 ^ 22 = 2800376120856162211833149645328521728515625)
90 => 3  (90 ^ 3 = 729000)
95 => 13 (95 ^ 13 = 51334208327950511474609375)
100 => 2 (100 ^ 2 = 10000)

Script de Python para generar las primeras 1000 respuestas

Skidsdev
fuente
Relacionado
Skidsdev
A045537
Shaggy

Respuestas:

4

R , 69 44 bytes

function(n,i=2){while(!grepl(n,n^i))i=i+1;i}

Función anónima. Funciona en grande icuando nse convierte a BigZ (ver TIO). Gracias por enseñarme algo Giuseppe y digEmAll!

Pruébalo en línea!

BLT
fuente
61 bytes : tenía un espacio adicional n, ?n^iy pasteconvierte characterpor defecto :-)
Giuseppe
56 bytes : la devolución idebería ser suficiente.
Giuseppe
2
No es necesario pegar 44 bytes , grepl convierte a caracteres por defecto :)
digEmAll
El problema es que es "defectuoso" cuando los exponentes se vuelven grandes debido a la precisión de los puntos flotantes y al hecho de que los números grandes se convierten en cadenas en notación científica. Por ejemplo, 15 devuelve 17 mientras que debería ser 26. Entonces, en teoría esto funciona, pero en la práctica deberíamos usar un paquete Big Integer o algo así ...
digEmAll
1
@digEmAll para BigInt, simplemente podría forzar la entrada para que sea grande como BigZ desde gmp y todavía debería funcionar, excepto posiblemente también para convertir ia bigZ
Giuseppe
3

Python 2 , 42 41 bytes

-1 byte gracias a Ørjan Johansen (regresandoy directamente)

f=lambda x,y=2:y*(`x`in`x**y`)or f(x,y+1)

Pruébalo en línea!

Explicación / Ungolfed

Función recursiva tratando de 2,3... hasta que tengamos éxito:

# Start recursion with y=2
def f(x,y=2):
    # If we succeed, we arrived at the desired y
    if `x` in `x**y`:
        return y
    # Else we try with next y
    else:
        return f(x, y+1)

Pruébalo en línea!

ბიმო
fuente
1
Volver y es más corto
Ørjan Johansen
@ ØrjanJohansen: Extraño, pensé que lo intenté, no estoy seguro de lo que me perdí. ¡Muchas gracias!
ბიმო
Tuve que cambiar la multiplicación para evitar un espacio, ¿tal vez fue eso?
Ørjan Johansen el
@ ØrjanJohansen: Probablemente eso fue todo, sí.
ბიმო
3

JavaScript (ES6 / Node.js),  41  40 bytes

Guardado 1 byte gracias a @Shaggy

Toma la entrada como un Número (funciona para n<15 ) o un literal BigInt .

n=>(g=x=>`${x*=n}`.match(n)?2:-~g(x))(n)

Pruébalo en línea!

Arnauld
fuente
1
Terminé con una solución muy similar a la tuya para 40 bytes
Shaggy
@ Shaggy Debe usar enteros grandes, de lo contrario no devolverá la respuesta correcta en algunos casos de prueba. Al final tiene el mismo bytecount n=>(g=x=>$ {x * = n}.match(n)?2n:-~g(x))(n)
Luis felipe De jesus Munoz
1
@LuisfelipeDejesusMunoz, generalmente no necesitamos preocuparnos por problemas de precisión, pero también funcionará con BigInts.
Shaggy
Menor pero si esto usa BigInt, ¿no debería ser el título JavaScript (Node.js)? ES6 aún no tiene BigInt.
Shieru Asakoto
@ShieruAsakoto Tienes razón. Mi intención inicial era explicar que funciona con un Número o un BigInt. Ahora aclarado.
Arnauld
3

APL (Dyalog Unicode) , 25 23 17 bytes

-2 bytes gracias a @Erik the Outgolfer

-6 bytes gracias a @ngn

gracias a @ H.PWiz por hacer que el código no requiera una medida personalizada ⎕pp(precisión de impresión)

⊢⍟×⍣(∨/(⍕÷)⍷0⍕⊣)⍨

Pruébalo en línea!

⊢⍟×⍣(∨/(⍕÷)⍷0⍕⊣)⍨
  ×⍣(          )⍨ generates a geometric progression by repeatedly multiplying the argument
                   by its original value
     ∨/(⍕÷)⍷0⍕⊣   the progression stops when this function, applied between the new and the
                   last old member, returns true
         ÷        the original argument (ratio between two consecutive members)
                 formatted as a string
                 occurrences within...
            0    ...the formatted (with 0 digits after the decimal point)...
                 ...new member
     ∨/           are there any?
⊢⍟                use logarithm to determine what power of  we reached
Quintec
fuente
Esto falla para 17 porque se encuentra 17en 17 ^ 14 = 1.6837782655940093E17, pero no sé qué respuestas de precisión deberían ser compatibles
Kritixi Lithos
@Cowsquack, solo tengo que ajustar arbitrariamente ⎕PP, supongo
Quintec
Oh, espera, eso ni siquiera funcionará
Quintec
23 bytes .
Erik the Outgolfer
19 bytes
ngn
2

Brachylog , 8 bytes

;.^s?∧ℕ₂

Pruébalo en línea!

Explicación

;.^         Input ^ Output…
   s?       …contains the Input as a substring…
     ∧      …and…
      ℕ₂    …the Output is in [2,+∞)
Fatalizar
fuente
2

05AB1E , 7 bytes

∞>.Δm¹å

Pruébalo en línea!

Explicación:

∞>.Δm¹å  //full program
∞        //push infinite list, stack = [1,2,3...]
 >       //increment, stack is now [2,3,4...]
  .Δ     //find the first item N that satisfies the following
     ¹   //input
      å  //is in
    m    //(implicit) input **  N
Agujero de vaca
fuente
2

SAS, 71 66 bytes

Editar: eliminado ;run;al final, ya que está implícito en el final de las entradas.

data a;input n;e=1;do until(find(cat(n**e),cat(n)));e+1;end;cards;

Los datos de entrada se ingresan después de la cards;declaración, así:

data a;input n;e=1;do until(find(cat(n**e),cat(n)));e+1;end;cards;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Genera un conjunto de datos que acontiene la entrada ny la salida e.

ingrese la descripción de la imagen aquí

Josh Eller
fuente
Esto parece ser una definición de función, o equivalente (supongo que en realidad es una "macro") Esto significa que requerir que se llame con argumentos (es decir %p(n)) es totalmente correcto, sin embargo, la salida depende de si macros en SAS puede devolver valores. Si pueden regresar, la "salida" debería ser devolviendo el resultado; de lo contrario, debería salir por cualquier método de salida estándar que sea compatible
Skidsdev
@Skidsdev ¡Gracias por los comentarios! SAS es un poco raro; las macros no son realmente funciones, son solo un lenguaje de sustitución de texto que genera código SAS 'real' cuando se compila. Eché un vistazo a cómo otras personas hicieron E / S para SAS en codegolf, y edité mi respuesta basada en eso, deshaciéndome de las declaraciones macro.
Josh Eller
1

Limpio , 99 bytes

import StdEnv,Text,Data.Integer
$n=hd[p\\p<-[fromInt 2..]|indexOf(""<+n)(""<+prod(repeatn p n))>=0]

Pruébalo en línea!

Si no necesita trabajar para grandes números gigantes, entonces

Limpio , 64 bytes

import StdEnv,Text
$n=hd[p\\p<-[2..]|indexOf(""<+n)(""<+n^p)>=0]

Pruébalo en línea!

Οurous
fuente
1

Java (OpenJDK 8) , 84 bytes

Toma la entrada como una cadena que representa el número y genera un int.

La mayoría de los bytes provienen de la verbosidad del BigDecimalser necesario para procesar los grandes números.

n->{int i=1;while(!(new java.math.BigDecimal(n).pow(++i)+"").contains(n));return i;}

Pruébalo en línea!


Cómo funciona

Esto es bastante simple pero incluiré la explicación para la posteridad;

n->{                                    // Lamdba taking a String and returning an int
    int i=1;                            // Initialises the count
    while(!                             // Loops and increments until
        (new java.math.BigDecimal(n)    // Creates a new BigDecimal from the input n
            .pow(++i)+"")               // Raises it to the power of the current count
            .contains(n)                // If that contains the input, end the loop
    );
    return i;                           // Return the count
}
Luke Stevens
fuente
0

Carbón de leña , 19 bytes

W∨‹Lυ²¬№IΠυθ⊞υIθILυ

Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:

W∨‹Lυ²¬№IΠυθ⊞

Repita hasta que la longitud de la lista sea al menos 2 y su producto contenga la entrada ...

⊞υIθ

... convierta la entrada en entero y empújela a la lista.

ILυ

Transmita la longitud de la lista a una cadena e imprímala implícitamente.

Neil
fuente
0

Python 3 , 63 58 bytes

def f(n,e=2):
	while str(n)not in str(n**e):e+=1
	return e

Pruébalo en línea!

Python2 probablemente sería más corto, pero me gusta usar 3. Salir con un lambda es difícil, pero estoy intentando algunas cosas.

Gigaflop
fuente
No sé python pero, ¿no es más corto usando lambda?
Luis felipe De jesus Munoz
@LuisfelipeDejesusMunoz Empecé tratando de hacer eso, pero IDLE se quejó de tener un desnudo whileen una lambda. Tal vez pueda probar otras formas ...
Gigaflop
Tal vez alguna función recursiva?
Luis felipe De jesus Munoz
2
Definiendo een la lista de argumentos (es decir def f(n,e=2)) y n**edebería guardar algunos bytes, Python 2 de hecho ahorraría bastantes bytes.
ბიმო
@LuisfelipeDejesusMunoz Lambdas no son como funciones. El lado derecho de una lambda debe ser una sola expresión, y los comandos de control de flujo como forowhile no funcionan.
James
0

MathGolf , 10 bytes

ôkï⌠#k╧▼ï⌠

Pruébalo en línea!

Explicación

Esto se siente extremadamente derrochador, tener que leer la entrada explícitamente dos veces, tener que incrementar el contador de bucle dos veces.

ô            start block of length 6
 k           read integer from input
  ï          index of current loop, or length of last loop
   ⌠         increment twice
    #        pop a, b : push(a**b)
     k       read integer from input
      ╧      pop a, b, a.contains(b)
       ▼     do while false with pop
        ï    index of current loop, or length of last loop
         ⌠   increment twice
maxb
fuente
0

C # (.NET Core) , 104 89 bytes

a=>{int i=2;while(!(System.Numerics.BigInteger.Pow(a,i)+"").Contains(a+""))i++;return i;}

Pruébalo en línea!

-1 byte: cambiado de bucle a while (gracias a Skidsdev )
-14 bytes: abuso del manejo de cadenas extraño de C # para eliminar ToString() llamadas

Es necesario utilizar la biblioteca BigInteger de C # , ya que los tipos numéricos estándar de C # (int, double, long, ulong, etc.) fallan para algunos números más grandes (incluidos 12, 15 y 17).

Sin golf:

a => {
    int i = 2;                                          // initialize i

    while( !(System.Numerics.BigInteger.Pow(a,i) + "")  // n = a^i, convert to string
                                .Contains(a + ""))      // if n doesn't contain a
        i++;                                                // increment i

    return i;
}
Suricata
fuente
Puede guardar 1 byte cambiando a un ciclo while
Skidsdev
0

PowerShell (V3 +), 67 bytes

function f{param($n)$i=1;do{}until([math]::pow($n,++$i)-match$n)$i}
jyao
fuente
0

Lisp común, 78 bytes

(lambda(n)(do((e 2(1+ e)))((search(format()"~d"n)(format()"~d"(expt n e)))e)))

Pruébalo en línea!

Renzo
fuente
0

J 26 bytes

2>:@]^:(0=[+/@E.&":^)^:_~]

Pruébalo en línea!

NOTA: He cambiado el final ]a x:en el TIO, para hacer que las pruebas pasen para enteros más grandes.

Jonás
fuente
0

Oracle SQL, 68 bytes

select max(level)+1 from dual,t connect by instr(power(x,level),x)=0

Se supone que el número de origen se almacena en una tabla t(x), p. Ej.

with t as (select 95 x from dual)

Prueba en SQL * Plus

SQL> with t as (select 95 x from dual)
  2  select max(level)+1 from dual,t connect by instr(power(x,level),x)=0
  3  /

MAX(LEVEL)+1
------------
          13
Dr. Y Wit
fuente