Это действительно аккуратный короткий вызов.
Написать функцию или процедуру , которая принимает два параметра, x
а y
и возвращает результат без использования петель, или встроенную функций питания.xy
Победитель является наиболее креативным решением и будет выбран на основе наибольшего количества голосов через 3 дня.
popularity-contest
math
restricted-source
CodyBugstein
источник
источник
exp(log(x)*y)
?Ответы:
APL (7)
Левый аргумент является базовым, правый аргумент экспонентным, например:
Объяснение:
⍵/⍺
повторяет⍺
⍵
время, например5 {⍵/⍺} 6
->5 5 5 5 5 5
×/
берет продукт, например×/5 5 5 5 5 5
->5×5×5×5×5×5
->15625
источник
*/@$~
×/⍴⍨
C #: показатели с плавающей точкой
ОК, это решение довольно хрупкое. Вы можете легко сломать это, бросая смехотворно огромные числа как 6 в это. Но он прекрасно работает для таких вещей, как
DoublePower(1.5, 3.4)
, и не использует рекурсию!источник
C ++
Как насчет шаблонного метапрограммирования? Это изгибает, какие маленькие правила были, но это стоит попробовать:
источник
питон
Не работает для нецелых сил.
источник
join
?eval('*'.join([str(x)] * y))
,**
оператор, так что вы могли бы сделать это с помощью eval ().Haskell - 25 символов
После версии APL Маринуса:
С комментарием mniip и удалением пробела, 27 символов:
источник
replicate y x
вместоtake y $ repeat x
f=(product.).flip replicate
точно такое же количество символов.питон
Если
y
положительное целое числоисточник
JavaScript (ES6), 31
Использование:
Объяснение:
Вышеприведенная функция создает выражение, которое умножается на несколько
x
y
раз, а затем оценивает его.источник
Я удивлен, увидев, что никто не написал решение с Y Combinator, но ... таким образом:
python2
Нет циклов, нет векторных / списочных операций и нет (явной) рекурсии!
источник
fix
, upvoting him...C# : 45
Works for integers only:
источник
return --y?x:x*P(x,y);
insteadbash & sed
No numbers, no loops, just an embarrasingly dangerous glob abuse. Preferably run in an empty directory to be safe. Shell script:
источник
Javascript
Uses regular expressions to create an array of size y+1 whose first element is 1. Then, reduce the array with multiplication to compute power. When y=0, the result is the first element of the array, which is 1.
Admittedly, my goal was i) not use recursion, ii) make it obscure.
источник
Mathematica
Probably cheating to use the fact that x^(1/y) = y√x
источник
JavaScript
источник
Golfscript, 8 characters (including I/O)
Explanation:
TLDR: another "product of repeated array" solution.
The expected input is two numbers, e.g.
2 5
. The stack starts with one item, the string"2 5"
.источник
Ruby
Sample use:
This ultimately is the same as several previous answers: creates a y-length array every element of which is x, then takes the product. It's just gratuitously obfuscated to make it look like it's using the forbidden
**
operator.источник
C, exponentiation by squaring
golfed version in 46 bytes (thanks ugoren!)
should be faster than all the other recursive answers so far o.O
slightly slower version in 45 bytes
источник
b
,~-b/2 == b/2
.pow(n, x)
better than O(n)?"Haskell - 55
There's already a shorter Haskell entry, but I thought it would be interesting to write one that takes advantage of the
fix
function, as defined inData.Function
. Used as follows (in the Repl for the sake of ease):источник
Q
9 chars. Generates array with
y
instances ofx
and takes the product.Can explicitly cast to float for larger range given int/long x:
источник
Similar logic as many others, in PHP:
Run it with
php file.php 5 3
to get 5^3источник
I'm not sure how many upvotes I can expect for this, but I found it somewhat peculiar that I actually had to write that very function today. And I'm pretty sure this is the first time any .SE site sees this language (website doesn't seem very helpful atm).
ABS
Works for negative exponents and rational bases.
I highlighted it in Java syntax, because that's what I'm currently doing when I'm working with this language. Looks alright.
источник
Pascal
The challenge did not specify the type or range of x and y, therefore I figure the following Pascal function follows all the given rules:
No loop, no built-in power or exponentiation function, not even recursion or arithmetics!
источник
J - 5 or 4 bytes
Exactly the same as marinus' APL answer.
For
x^y
:For
y^x
:For example:
x $~ y
creates a list ofx
repeatedy
times (same asy $ x
*/ x
is the product function,*/ 1 2 3
->1 * 2 * 3
источник
Python
источник
=/=
functionJavascript
With tail recursion, works if
y
is a positive integerисточник
Bash
Everyone knows
bash
can do whizzy map-reduce type stuff ;-)If thats too trolly for you then there's this:
источник
C
Yet another recursive exponentiation by squaring answer in C, but they do differ (this uses a shift instead of division, is slightly shorter and recurses one more time than the other):
источник
Mathematica
This works for integers.
Example
How it works
Table
makes a list ofy
x
's.Times
takes the product of all of them.`Another way to achieve the same end:
Example
источник
Windows Batch
Like most of the other answers here, it uses recursion.
x^y is stored in the environment variable
z
.источник
perl
Here's a tail recursive perl entry. Usage is echo $X,$Y | foo.pl:
Or for a more functional-type approach, how about:
источник
Python
I am not sure if this is against the requirements, but if not here is my attempt.
источник