Concatenações de poderes e seus quadrados
No momento em que escrevo, minha reputação é \$16,256\$. Como observei no chat ,
Oh legal, meu representante é a concatenação de dois poderes de 2: 16.256
Ou ainda a concatenação de uma potência de 2 e seu quadrado, que é muito mais interessante
que então gerou um CMC sobre como verificar se um número tem essa propriedade.
Dado um inteiro \$n > 0\$, considerado um número inteiro decimal e uma potência \$r > 1\$, retorna dois valores distintos que determinam se \$n\$pode ser expresso como a concatenação de uma potência de \$r\$e seu quadrado ou não. Por exemplo, \$n = 16256\$e \$r = 2\$retorna verdadeiro (a concatenação de \$2^4\$e \$(2^4)^2\$), enquanto \$n = 39\$e \$r = 2\$não. Observe, entretanto, que \$n = 39\$, \$r = 3\$ é verdade. O poder de \$r\$pode ser \$0\$, o que significa que \$n = 11\$é verdade para todos \$r\$
O poder de \$r\$sempre virá "antes" de seu quadrado, então \$n = 62525, r = 5\$ é falso.
Você nunca receberá uma entrada \$n\$onde sua validade depende de ignorar a liderança \$0\$s ou não (por exemplo \$101\$é verdade para todos \$r\$se estiver ignorando a liderança \$0\$se falso caso contrário). No entanto, você ainda pode obter entradas com o dígito \$0\$em (por exemplo, \$n = 1024, r = 2\$) onde conduzem \$0\$s não têm relação com a validade de \$n\$ sendo essa concatenação.
A entrada e a saída podem ser em qualquer método aceito e isso é código-golfe, portanto, o código mais curto em bytes vence.
Casos de teste
n r 1
39 3 1
525 5 1
864 8 1
16256 2 1
11 r 1
416 7 0
39 2 0
15 5 0
1024 4 0
62525 5 0
Sinta-se à vontade para sugerir mais casos de teste.
Respostas
APL (Dyalog Unicode) , 21 bytes ( SBCS )
Infixo anônimo lambda, levando \$r\$como argumento esquerdo e \$n\$como argumento correto. Requer ⎕IO←0(indexação baseada em zero).
{⍵∊(⊢⍎⍤,⍥⍕¨×⍨)⍺*⍳⌊⍟⍵}
Experimente online! (Dyalog Extended como polyfill para a versão 18.0)
{… } "Dfn", ⍺é \$r\$e ⍵é \$n\$:
⍟⍵ log natural de \$n\$ (para evitar estouro)
⌊ arredondar para baixo
⍳ ɩ ntegers de zero a um a menos do que isso
⍺* aumentar \$r\$ para aqueles poderes
(... ) aplique a seguinte função monádica a isso:
×⍨ multiplique aqueles com eles mesmos (ou seja, eleve ao quadrado)
⊢... ¨ para cada argumento não modificado e seu quadrado correspondente:
⍥⍕… Stringify o argumento e seu quadrado antes
⍤, concatená-los, e então
⍎ avaliando o resultado
⍵∊ é o argumento original um membro disso?
05AB1E , 9 bytes
ÝmεDn«}¹å
Experimente online! Isso é um pouco ineficiente, então não tente os casos de teste falsey maiores.
Comentado:
# implicit input, n first, r second
Ý # inclusive range from 0 to n
m # raise r to all of these powers
ε } # map over the powers ...
D # duplicate power
n # square it
« # and concatenate
¹ # push the first input (n)
å # is this in the list?
Python 3 , 63 \$\cdots\$ 56 54 bytes
Economizei 4 bytes graças ao ovs !!!
Salvo um byte portar Arnauld 'de golfe de s Shaggy ' s resposta JavaScript !!!
Economizei 2 bytes graças ao pxeger !!!
f=lambda n,r,p=1:p>n or(n-int(f'{p}{p*p}'))*f(n,r,r*p)
Experimente online!
Retorna um falsey se \$n\$pode ser expresso como a concatenação de uma potência de \$r\$ e seu quadrado ou verdadeiro de outra forma.
Brachylog , 9 bytes
Aceita rcomo entrada e ncomo saída. Unifica se verdadeiro, caso contrário, falha.
;A^gj^₂ᵗc
Experimente online!
Como funciona
;A^gj^₂ᵗc with implicit r as input
;A^ r^some number
gj [r^some number, r^some number]
^₂ᵗ [r^some number, r^some number^2]
c concatenated is the output n
R + pryr, 43 39 bytes
Editar: -4 bytes graças ao pajonk
Ou R , 43 bytes
pryr::f(any(n==paste0(s<-r^(0:n),s^2)))
Experimente online!
Uma boa função que é naturalmente curta graças à vetorização de R.
s<-r^(0:n)gera um vetor de todas as potências rde 0 .. n(o <-aqui é um operador de atribuição R , semelhante a =),
paste0(s,s^2)gera um vetor de caracteres de todos esses poderes pasted em seus quadrados (o 0in paste0instrui a função a não usar um espaço na concatenação),
any(n==...)finalmente verifica se né igual a algum dos elementos do vetor, convenientemente forçando na forma de caractere a fazer isso.
pryr::f(...)é uma maneira mais curta de expressar function(n,r)(da pryrbiblioteca), que 'adivinha' os argumentos usando o corpo da definição da função (presumivelmente pela ordem de aparecimento das variáveis não atribuídas: na verdade, não consigo encontrar nenhuma explicação na página de manual , mas de qualquer maneira parece funcionar ...!).
JavaScript, 47 44 38 bytes
n=>g=(r,x=1)=>x<n&&[x]+x*x==n|g(r,x*r)
-6 bytes graças a Arnauld.
Experimente online!
Japt -x , 11 bytes
ÆVpXã¥X+²s
Tente
ÆVpXã¥X+²s :Implicit input of integers U=n and V=r
Æ :Map each X in the range [0,U)
VpX : Raise V to the power of X
à :End map
£ :Map each X
¥ : Test U for equality with
X+ : X appended with
² : X squared
s : Converted to a string
:Implicit output of sum of resulting array
Wolfram Language (Mathematica) , 52 bytes
#^2+10^IntegerLength[#^2]#&[#2^0~Range~#]~MemberQ~#&
Experimente online!
PHP , 63 bytes
function($n,$r){while($n>$b=($a=$r**$x++).$a*$a);return$n==$b;}
Experimente online!
Ou ... dito de outra forma ...
PHP , 63 bytes
function($n,$r){while(0<$b=$n<=>($a=$r**$x++).$a*$a);return$b;}
Experimente online!
Não consigo fugir deste número ...
PHP , 63 bytes
function($n,$r){while($n>$a=$r**$x.$r**($x++*2));return$n==$a;}
Experimente online!
Javascript (V8), 63 60 59 53 51 43 bytes
-3 de Neil
-2 e -8 de Shaggy
n=>r=>[...n+n].some((_,i)=>[p=r**i]+p*p==n)
Toma entrada através de curtimenta a: f("16256")(2). Funciona rapidamente e para todos os valores dentro do limite de número inteiro seguro ( \$2^{52}-1\$) Retorna trueou false.
Velho
n=>r=>[...n+n].map((a,i)=>[s=r**i]+s*s).indexOf(n)
n=>r=>[...Array(+n)].map((a,i)=>""+(p=r**i)+p*p).indexOf(n)
Ferrugem , 72 70 bytes
|n,r|(0..n).any(|i|format!("{}{}",r.pow(i),r.pow(2*i))==n.to_string())
Experimente online!
Uma porta de resposta 05AB1E de ovs . Obrigado a ovs por ajudar a economizar 2 bytes!
SNOBOL4 (CSNOBOL4) , 96 bytes
N =INPUT
R =INPUT
N Z =R ^ X
Y =EQ(N,Z Z ^ 2) 1 :S(O)
X =LE(Z,N) X + 1 :S(N)
O OUTPUT =Y
END
Experimente online!
Imprime 1 para Truthy e uma linha vazia para Falsey.
N =INPUT ;* Input n
R =INPUT ;* input R
N Z =R ^ X ;* set Z = R^X (X starts as "" or 0)
Y =EQ(N,Z Z ^ 2) 1 :S(O) ;* If N = Z concatenated to Z^2, set Y = 1 and goto O
X =LE(Z,N) X + 1 :S(N) ;* If Z <= N, increment X and goto N, else:
O OUTPUT =Y ;* print Y, which is '' unless N == Z Z^2
END
MathGolf , 11 bytes
r#mÆ‼░²░+l╧
Experimente online. (Os dois casos de teste com o maior \$n\$ estão expirando.)
Explicação
r # Push a list in the range [0, (implicit) input `n`)
# # Take (implicit) input `r` to the power of each value in this list
m # Map over this list,
Æ # Using the following five commands:
‼ # Apply the following two commands on the stack separately:
░ # Convert the value to a string
² # Square the value
░ # Convert the squared value to a string a well
+ # Concatenate the two strings together
l # After the map: push the first input `r` as string
╧ # And check if this string is in the list
# (after which the entire stack joined together is output implicitly)
Jelly , 9 bytes
Usa o Vtruque Evaluation ( ) da resposta de Unrelated String - dê um upvote!
*⁹ŻżḤ$¤Vċ
Um link diádico aceitando um inteiro \ $ r> 1 \ $ à esquerda e um inteiro \ $ n> 0 \ $ à direita que produz 1se \ $ n \ $ pode ser expresso como a concatenação de uma potência de \ $ r \ $ e seu quadrado, ou 0se não.
Experimente online! Ou veja o conjunto de testes (grande \ $ n \ $ excluído devido à velocidade).
Quão?
*⁹ŻżḤ$¤Vċ - Link: r; n
¤ - nilad followed by link(s) as a nilad:
⁹ - chain's right argument, n
Ż - zero-range -> [0,1,2,...,n]
$ - last two links as a monad:
Ḥ - double -> [0,2,4,...,2n]
ż - zip -> [[0,0],[1,2],[2,4],...,[n,2n]]
* - (r) exponentiate (that) (vectorises)
V - evaluate (e.g. [9,81] -> 981) (vectorises)
ċ - count occurrences (of n)
Geléia , 10 9 bytes
Ḷ*@ż²$Vi⁸
Experimente online!
-1 graças a Jonathan Allan
Elidiu os dois casos de teste maiores para poder executá-los.
Adaptado de minha própria resposta ao CMC. Também tentei adaptar uma das respostas mais inteligentes do HyperNeutrino, mas saiu do mesmo tamanho devido à necessidade Ḷde lidar com [11, r]:
Geléia , 10 9 bytes
ḶżḤ$*@Vi⁸
Experimente online!
Eu salvo um @e um ⁸revertendo os argumentos, mas então são necessários 2 bytes para lidar com um expoente de 0, levando-o de volta para 10 9:
Geléia , 10 9 bytes
*Ɱ;1ż²$Vi
Experimente online!
Rockstar , 129 bytes
listen to N
listen to R
X's0
O's0
while N-X
let X be+1
P's1
Y's0
while X-Y
let P be*R-0
let Y be+1
let O be+P+""+P*P is N
say O
Experimente aqui (o código precisará ser colado, com nna primeira linha de entrada e rna segunda)