Poderes independentes


13

Dado inteiro n, produza o menor expoente emaior que 1, que n^econtém ncomo substring.

Por exemplo, para 25, a resposta deve ser 2, como 25 ^ 2 = 625, que contém 25como substring, mas a resposta para 13deve ser 10, como 13 ^ 10 = 137858491849, 10é o expoente mais baixo para o qual o resultado contém 13como substring.

Regras

  • Regras de E / S padrão
  • Aplicam-se brechas padrão
  • Menor código em bytes ganha
  • n sempre será um número inteiro maior que 0

Casos de teste

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 Python para gerar as primeiras 1000 respostas



Respostas:



4

R , 69 44 bytes

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

Função anônima. Funciona em grande escala iquando né convertido em BigZ (consulte TIO). Obrigado por me ensinar algo Giuseppe e digEmAll!

Experimente online!


61 bytes - que tinha um espaço extra no n, ?n^ie pasteconvertidos para characterpor padrão :-)
Giuseppe

56 bytes - o retorno ideve ser suficiente.
28418 Giuseppe

2
Colar de 44 bytes não é necessário, o grepl converte em caractere por padrão :)
digEmAll

O problema é que é "defeituoso" quando os expoentes se tornam grandes devido à precisão dos pontos flutuantes e ao fato de que grandes números são convertidos em string em notação científica. Por exemplo, 15 retorna 17, enquanto deveria ser 26. Então, teoricamente, isso funciona, mas na prática devemos usar um pacote Big Integer ou algo parecido ...
digEmAll 29/11/18

1
@digEmAll para BigInt você poderia apenas forçar a entrada para ser um BigInt como BIGZ de gmp e deve ainda trabalho, exceto, possivelmente, para converter ia um BIGZ bem
Giuseppe

3

Python 2 , 42 41 bytes

-1 byte graças a Ørjan Johansen (retornando ydiretamente)

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

Experimente online!

Explicação / Ungolfed

Função recursiva tentando de 2,3... até conseguirmos:

# 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)

Experimente online!



@ ØrjanJohansen: Estranho, pensei ter tentado isso, não exatamente certo do que estava perdendo. Muito obrigado!
ბიმო

Eu tive que trocar a multiplicação para evitar um espaço, talvez fosse isso?
Ørjan Johansen

@ ØrjanJohansen: Provavelmente foi isso, sim.
ბიმო

3

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

Guardado 1 byte graças a @Shaggy

Recebe entrada como um número (funciona para n<15 ) ou como um literal BigInt .

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

Experimente online!


1
Terminou com uma solução muito semelhante ao seu para 40 bytes
Shaggy

@ Shaggy Você precisa usar números inteiros grandes, caso contrário, ela não retornará a resposta correta em alguns casos de teste. No final, tem a mesma bytecount n=>(g=x=>$ {x * = n}.match(n)?2n:-~g(x))(n)
Luis Felipe de Jesus Munoz

1
@LuisfelipeDejesusMunoz, geralmente não precisamos nos preocupar com problemas de precisão, mas também funcionará com BigInts.
Shaggy

Pequenas coisas, mas se isso usa BigInt, o título não deve ser JavaScript (Node.js)? ES6 ainda não tem BigInt.
Shieru Asakoto 29/11

@ShieruAsakoto Você está certo. Minha intenção inicial era explicar que ele funciona com um número ou um BigInt. Agora esclarecido.
Arnauld

3

APL (Dyalog Unicode) , 25 23 17 bytes

-2 bytes graças a @Erik the Outgolfer

-6 bytes graças a @ngn

obrigado a H.PWiz por fazer o código não exigir uma personalização ⎕pp(precisão de impressão)

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

Experimente online!

⊢⍟×⍣(∨/(⍕÷)⍷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

Esta falha para 17 porque ele encontra 17na 17 ^ 14 = 1.6837782655940093E17, mas idk o que respostas precisão devem apoiar
Kritixi Lithos

@Cowsquack Eu só tenho que ajustar arbitrariamente ⎕PPeu acho
Quintec

Oh, espere, isso nem vai funcionar #
288 Quintec





2

05AB1E , 7 bytes

∞>.Δm¹å

Experimente online!

Explicação:

∞>.Δ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: removido ;run;no final, pois está implícito no final das entradas.

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

Os dados de entrada são inseridos após a cards;instrução, da seguinte forma:

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

Gera um conjunto de dados que acontém a entrada ne a saída e.

insira a descrição da imagem aqui


Isso parece ser uma definição de função ou equivalente (presumo que seja uma "macro"). Isso significa que exigir que ela seja chamada com argumentos (ou seja %p(n)) é totalmente adequada; no entanto, a saída depende se macros no SAS pode retornar valores. Se eles puderem retornar, a "saída" deve ser retornando o resultado, caso contrário, deve ser emitido por qualquer método de saída padrão suportado.
Skidsdev 29/11

@Skidsdev Obrigado pelo feedback! SAS é um pouco estranho; macros não são realmente funções, são apenas uma linguagem de substituição de texto que gera código SAS 'real' quando compilado. Eu observei como outras pessoas fizeram E / S para SAS no codegolf e editei minha resposta com base nisso, livrando-me das declarações de macro.
21418 Josh Eller #:


1

Limpo , 99 bytes

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

Experimente online!

Se não precisar trabalhar com grandes números gigantescos,

Limpo , 64 bytes

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

Experimente online!


1

Java (OpenJDK 8) , 84 bytes

Recebe a entrada como uma String que representa o número e gera um int.

A maioria dos bytes vem da verbosidade BigDecimalnecessária para processar os grandes números.

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

Experimente online!


Como funciona

Isso é bastante simples, mas vou incluir a explicação para a posteridade;

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

Carvão , 19 bytes

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

Experimente online! Link é a versão detalhada do código. Explicação:

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

Repita até que o comprimento da lista seja pelo menos 2 e seu produto contenha a entrada ...

⊞υIθ

... converta a entrada para inteiro e empurre-a para a lista.

ILυ

Transmitir o comprimento da lista para string e imprimi-lo implicitamente.


0

Python 3 , 63 58 bytes

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

Experimente online!

O Python2 provavelmente seria mais curto, mas eu gosto de usar 3. É difícil chegar com um lambda, mas estou tentando algumas coisas.


Eu não sei python, mas, não é mais curto usando lambda?
Luis felipe De jesus Munoz

@LuisfelipeDejesusMunoz Comecei tentando fazer isso, mas o IDLE reclamou de ter um nu whileem uma lambda. Talvez eu possa tentar algumas outras maneiras ..
gigaflop

Talvez alguma função recursiva?
Luis felipe De jesus Munoz

2
Definindo ena lista de argumentos (ie. def f(n,e=2)) E n**edeve salvar alguns bytes, o Python 2 realmente salvaria alguns bytes.
ბიმო

@LuisfelipeDejesusMunoz Lambdas não são como funções. O lado direito de um lambda deve ser uma expressão única e os comandos de controle de fluxo gostam forou whilenão funcionam.
James

0

MathGolf , 10 bytes

ôkï⌠#k╧▼ï⌠

Experimente online!

Explicação

Isso parece extremamente inútil, tendo que ler a entrada explicitamente duas vezes, tendo que incrementar o contador de loop duas vezes.

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

Experimente online!

-1 byte: alterado para loop para while (graças ao Skidsdev )
-14 bytes: abuso de manipulação de strings estranha do C # para remover ToString() chamadas

É necessário usar a biblioteca BigInteger do C # , pois os tipos numéricos padrão de C # (int, double, long, ulong etc.) falham em alguns números maiores (incluindo 12, 15 e 17).

Ungolfed:

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

Você pode economizar 1 byte, alternando para um loop 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.&":^)^:_~]

Experimente online!

NOTA: Alterei a final ]para x:no TIO, para fazer os testes passarem para números inteiros maiores.


0

Oracle SQL, 68 bytes

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

Supõe-se que o número da fonte seja armazenado em uma tabela t(x), por exemplo

with t as (select 95 x from dual)

Teste no 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.