Este é um desafio curto realmente interessante.
Adicione uma função ou um procedimento que tem dois parâmetros, x
e y
e devolve o resultado de SEM utilizando laços, ou construído em funções de energia.xy
O vencedor é a solução mais criativa e será escolhido com base no maior número de votos após 3 dias.
popularity-contest
math
restricted-source
CodyBugstein
fonte
fonte
exp(log(x)*y)
?Respostas:
APL (7)
O argumento esquerdo é base, o argumento direito é expoente, por exemplo:
Explicação:
⍵/⍺
replica⍺
⍵
vezes, por exemplo5 {⍵/⍺} 6
- ->5 5 5 5 5 5
×/
leva o produto, por exemplo×/5 5 5 5 5 5
- ->5×5×5×5×5×5
->15625
fonte
*/@$~
×/⍴⍨
C #: Expoentes de ponto flutuante
OK, esta solução é bastante frágil. Você pode facilmente quebrá-lo jogando números ridiculamente enormes como 6 nele. Mas funciona lindamente para coisas como
DoublePower(1.5, 3.4)
e não usa recursão!fonte
C ++
Que tal alguma meta-programação de modelos? Dobra as pequenas regras que existiam, mas vale a pena tentar:
fonte
Pitão
Não funciona para poderes não-íntegros.
fonte
join
?eval('*'.join([str(x)] * y))
.**
operador, para que você possa eval () d.Haskell - 25 caracteres
Após a versão APL de Marinus:
Com o comentário e o espaço em branco do mniip removidos, 27 caracteres:
fonte
replicate y x
vez detake y $ repeat x
f=(product.).flip replicate
é exatamente o mesmo número de caracteres.Pitão
Se
y
é um número inteiro positivofonte
JavaScript (ES6), 31
Uso:
Explicação:
A função acima cria uma expressão que multiplica
x
y
vezes e depois a avalia.fonte
Estou surpreso ao ver que ninguém escreveu uma solução com o Y Combinator, ainda ... assim:
Python2
Sem loops, sem operações de vetor / lista e sem recursão (explícita)!
fonte
fix
, upvoting ele ...C #: 45
Funciona apenas para números inteiros:
fonte
return --y?x:x*P(x,y);
em vezbash & sed
Sem números, sem loops, apenas um abuso globamente embaraçosamente perigoso. De preferência, execute em um diretório vazio para ser seguro. Script de shell:
fonte
Javascript
Usa expressões regulares para criar uma matriz de tamanho y + 1, cujo primeiro elemento é 1. Em seguida, reduza a matriz com multiplicação para calcular a energia. Quando y = 0, o resultado é o primeiro elemento da matriz, que é 1.
É certo que meu objetivo era: i) não usar recursão, ii) torná-lo obscuro.
fonte
Mathematica
Provavelmente trapaça para usar o fato de que x ^ (1 / y) = y√x
fonte
Javascript
fonte
Golfscript, 8 caracteres (incluindo E / S)
Explicação:
TLDR: outro "produto de matriz repetida" solução.
A entrada esperada é de dois números, por exemplo
2 5
. A pilha começa com um item, a sequência"2 5"
.fonte
Rubi
Uso da amostra:
Em última análise, é o mesmo que várias respostas anteriores: cria uma matriz de comprimento y cujo elemento é x e leva o produto. É ofuscado gratuitamente para parecer que está usando o
**
operador proibido .fonte
C, exponenciação por quadratura
versão golfed em 46 bytes (obrigado ugoren!)
deve ser mais rápido do que todas as outras respostas recursivas até agora
versão ligeiramente mais lenta em 45 bytes
fonte
b
,~-b/2 == b/2
.pow(n, x)
melhor que O (n)?"Haskell - 55
Já existe uma entrada de Haskell mais curto, mas eu pensei que seria interessante para escrever um que tira proveito da
fix
função, conforme definido noData.Function
. Utilizado da seguinte forma (no Repl, para facilitar):fonte
Q
9 caracteres. Gera matriz com
y
instânciasx
e leva o produto.Pode converter explicitamente para flutuar para um intervalo maior, dado int / long x:
fonte
Lógica semelhante a muitas outras, em PHP:
Execute-o
php file.php 5 3
para obter 5 ^ 3fonte
Não sei ao certo quantas votações posso esperar por isso, mas achei um tanto peculiar que eu realmente tivesse que escrever essa mesma função hoje. E tenho certeza de que é a primeira vez que um site .SE vê esse idioma (o site não parece ser muito útil).
abdômen
Trabalha para expoentes negativos e bases racionais.
Eu o destaquei na sintaxe Java, porque é o que estou fazendo atualmente quando estou trabalhando com essa linguagem. Parece bom.
fonte
Pascal
O desafio não especificou o tipo ou o intervalo de xey, portanto, acho que a seguinte função Pascal segue todas as regras fornecidas:
Sem loop, sem energia embutida ou função de exponenciação, nem mesmo recursão ou aritmética!
fonte
J - 5 ou 4 bytes
Exatamente o mesmo que a resposta do APL de marinus .
Para
x^y
:Para
y^x
:Por exemplo:
x $~ y
cria uma lista de temposx
repetidosy
(o mesmo quey $ x
*/ x
é a função do produto,*/ 1 2 3
->1 * 2 * 3
fonte
Pitão
fonte
=/=
funçãoJavascript
Com recursão de cauda, funciona se
y
for um número inteiro positivofonte
Bater
Todo mundo sabe que
bash
pode fazer coisas do tipo redutor de mapa;Se isso é demais para você, existe o seguinte:
fonte
C
Ainda outra exponenciação recursiva ao quadrado da resposta em C, mas elas diferem (isso usa uma mudança em vez de divisão, é um pouco mais curta e se repete mais uma vez que a outra):
fonte
Mathematica
Isso funciona para números inteiros.
Exemplo
Como funciona
Table
faz uma lista dey
x
's.Times
leva o produto de todos eles.Outra maneira de alcançar o mesmo fim :
Exemplo
fonte
Lote do Windows
Como a maioria das outras respostas aqui, ele usa recursão.
x ^ y é armazenado na variável de ambiente
z
.fonte
perl
Aqui está uma entrada perl recursiva de cauda. O uso é eco $ X, $ Y | foo.pl:
Ou, para uma abordagem mais funcional, que tal:
fonte
Pitão
Não tenho certeza se isso é contra os requisitos, mas se não, aqui está a minha tentativa.
fonte