Tarefa
Dados inteiros x
e y
quais são ambos, pelo menos 2
, encontre o menor número positivo cuja y
-a potência é divisível por x
.
Exemplo
Dado x=96
e y=2
, a saída deve ser 24
uma vez 24
é o menor positivo n
satisfazendo n^2 is divisible by 96
.
Casos de teste
x y output
26 2 26
96 2 24
32 3 4
64 9 2
27 3 3
Pontuação
Isso é código-golfe . Solução com menor número de bytes ganhos.
Referências
y=2
: OEIS A019554y=3
: OEIS A019555y=4
: OEIS A053166y=5
: OEIS A015052y=6
: OEIS A015054
X
ser sempre maior do queY
?X
seja menor queY
, e isso pode reduzir o comprimento de algumas respostas (pelo menos as minhas) seX
for sempre maior queY
. Eu preferiria que issoX
pudesse ser maior ou menor, mas um caso de teste para o último seria ótimo.Respostas:
Brachylog ,
1917161512 bytes2 bytes salvos graças a @LeakyNun.
Experimente online!
Explicação
fonte
Gelatina , 6 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
R*%⁸i0
também é de 6 bytes.JavaScript (ES7), 32 bytes
fonte
f
. Eu acho que você precisa atribuir a funçãof
.Gelatina , 6 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
Python 3,
604339 bytesObrigado a @LeakyNun e @ Sp3000 pela ajuda
Uma função que recebe entrada via argumento e retorna a saída.
Como funciona
A função usa recursão para verificar repetidamente números inteiros
i
, começando comi=1
, até que um que satisfaça a condição necessária, aquii**y%x<1
, seja encontrado. Isso é obtido tomando a lógicaor
da condição e o resultado da expressão parai+1
incrementado, o que aqui é-~f(x,y,i+1)
. Essa expressão é avaliada continuamenteFalse
até que um valor satisfatórioj
seja encontrado; nesse momento, ele avaliaTrue
e a recursão para. Como eles são respectivamente equivalentes a0
e1
em Python, e a função foi adicionada repetidamente1
por meio da parte de incremento, a função retorna(j-1)*False + True + (j-1)*1 = (j-1)*0 + 1 + (j-1)*1 = 1 + j-1 = j
, conforme necessário.Experimente no Ideone
fonte
def f(x,y,i=1):¶ while i**y%x:i+=1¶ print(i)
f=lambda x,y,z=1:z**y%x<1or-~f(x,y,z+1)
True
não retorna em vez dez
?-~
parte, mas sim, voltariaTrue
sex
foi 1.Haskell, 31 bytes
Exemplo de uso:
96#2
->24
.Implementação direta: tente todos os números inteiros
n
, mantenha aqueles que atendem à condição e escolha o primeiro.fonte
x#y=until(\n->mod(n^y)x<1)(+1)0
05AB1E (10 bytes)
Experimente online
>
Lê o primeiro argumento, o incrementa e o empurra na pilhaG
abre a pilha (a
) e inicia um loop que contém o restante do programa em queN
assume o valor1, 2, ... a - 1
.N²m
empurraN
e a segunda entrada do histórico de entrada, em seguida, abre as duas e empurra a primeira para a potência da segunda.¹
coloca a primeira entrada do histórico de entrada na pilha.Ö
exibe as duas entradas anteriores da pilha e pressionaa % b == 0
a pilha.i
aparece isso da pilha. Se verdadeiro, ele executa o restante do programa; caso contrário, o loop continuará.N
empurraN
a pilha.q
finaliza o programa.Quando o programa termina, o valor superior da pilha é impresso.
fonte
MATL , 9 bytes
Experimente online!
Explicação
fonte
find
?f
mas encontra todos os índices diferentes de zero. Portanto, teria que ser~f1)
: negatve, find, get the first entryNa realidade ,
1211 bytesMuito obrigado a Leaky Nun por suas muitas sugestões. Sugestões de golfe são bem-vindas. Experimente online!
Abordagem original de 12 bytes. Experimente online!
Outra abordagem de 12 bytes. Experimente online!
Uma abordagem de 13 bytes. Experimente online!
Ungolfing:
Primeiro algoritmo
Algoritmo original
Terceiro algoritmo
Quarto algoritmo
fonte
;)
R,
61 bytes,39 bytes,37 bytes, 34 bytesEu ainda sou um novato em programação R e essa é a minha primeira função que crio em R ( Yay! ), Então acredito que ainda há espaço para melhorias.
O teste on-line pode ser realizado aqui: RStudio on rollApp .
Grandes progressos:
which.max
funciona porque retorna o valor mais alto em um vetor e, se houver vários, retornará o primeiro. Nesse caso, temos um vetor de muitos FALSEs (que são 0s) e algumas TRUEs (que são 1s); portanto, ele retornará o primeiro VERDADEIRO.Outro progresso:
Finalmente, ele supera a resposta usando Python por dois bytes. :)
Outro progresso: (Novamente!)
Muito obrigado a Axeman e user5957401 pela ajuda.
fonte
which.min
, poderá se livrar do==0
. O mulo vai devolver um número, o qual não ser menor do que 0.function(x,y)which(!(1:x)^y%%x)[1]
.dc,
2322 bytesObrigado a Delioth por sua dica sobre métodos de entrada, salvando um byte
Utiliza o operador de profundidade da pilha
z
para incrementar o caso de teste diretamente na pilha e o operador de exponenciação modular|
para, bem, exponenciação modular. Repita o teste até que o restante não seja maior que zero.fonte
?
início, pois uma maneira padrão de invocar algumas coisas é> echo "x y [program]"|dc
, ondex
ey
são as mesmas que as perguntas xey serão colocadas na pilha normalmente.-e
opção, mas vou usá-la a partir de agora."
não está implementadodc
, enquanto não usar aspas obviamente gera erros de shell. Há algo a ser feito sobre isso? Eu sei questderr
pode ser ignorado, mas ainda me incomoda.05AB1E , 8 bytes
Explicação
Experimente online
fonte
Perl 6 ,
2625 bytesExplicação:
fonte
Mathematica, 36 bytes
fonte
Dyalog APL , 11 bytes
Tradução disso .
0⍳⍨
Encontre o primeiro zero nos⊣|
remanescentes da divisão quando x divide(⍳⊣)*
os números inteiros de um a x , elevado à potência de⊢
yTryAPL online!
fonte
PowerShell v2 +, 48 bytes
Pega entrada
$x
e$y
. Constrói um intervalo de1
a$x
e depois usaWhere-Object
para filtrar esses números. O filtro pega a string"$_*"
(ou seja, o número atual com um asterisco) e usa a multiplicação de strings para concatenar esses$y
horários, depois tacografa uma final1
no final e depois as canaliza paraiex
(abreviadoInvoke-Expression
e semelhante aeval
). Isso toma o lugar de[math]::Pow($_,$y)
, pois o PowerShell não tem um operador de exponenciação e é dois bytes mais curto. Isso é alimentado no operador do módulo%
com$x
- assim, se for divisível, será0
, então encapsulamos isso em parênteses e pegamos o Boolean-not!(...)
disso. Portanto, se for divisível, será incluído por esse filtro e todos os outros números serão excluídos.Finalmente, encapsulamos os números resultantes em parênteses
(...)
e obtemos o[0]
índice. Como o intervalo inserido foi classificado1..$x
, este será o menor. Isso fica no pipeline e a impressão está implícita.Casos de teste
fonte
PHP,
5533 bytesfonte
Perl,
2926 bytesInclui +3 para
-p
(não +1, pois o código contém'
)Execute com a entrada em STDIN
power.pl
:fonte
Pitão, 9 bytes
Um programa que recebe a entrada de uma lista do formulário
[x, y]
no STDIN e imprime o resultado.Experimente online
Como funciona
fonte
PHP 59 bytes
Desculpe, mas não posso testar isso no meu celular. :)
Golfe
fonte