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



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!


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!



@ Ø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!


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

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





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

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í


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

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
}




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.


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.


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


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

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}


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.