Este es un desafío corto realmente bueno.
Escribir una función o un procedimiento que toma dos parámetros, x
y y
y devuelve el resultado del SIN mediante bucles, o construido en funciones de potencia.xy
El ganador es la solución más creativa y se elegirá en función del mayor número de votos después de 3 días.
popularity-contest
math
restricted-source
CodyBugstein
fuente
fuente
exp(log(x)*y)
?Respuestas:
APL (7)
El argumento izquierdo es base, el argumento derecho es exponente, por ejemplo:
Explicación:
⍵/⍺
replica⍺
⍵
tiempos, por ejemplo5 {⍵/⍺} 6
->5 5 5 5 5 5
×/
toma el producto, por ejemplo×/5 5 5 5 5 5
->5×5×5×5×5×5
->15625
fuente
*/@$~
×/⍴⍨
C #: exponentes de coma flotante
OK, esta solución es bastante frágil. Puede romperlo fácilmente arrojando números ridículamente enormes como 6 a él. ¡Pero funciona maravillosamente para cosas como
DoublePower(1.5, 3.4)
, y no utiliza la recursividad!fuente
C ++
¿Qué tal alguna plantilla de meta programación? Dobla las pequeñas reglas que había, pero vale la pena intentarlo:
fuente
Pitón
No funciona para poderes no enteros.
fuente
join
?eval('*'.join([str(x)] * y))
.**
operador, por lo que podría haber evaluado () d eso.Haskell - 25 caracteres
Después de la versión APL de Marinus:
Con el comentario de mniip y el espacio en blanco eliminado, 27 caracteres:
fuente
replicate y x
lugar detake y $ repeat x
f=(product.).flip replicate
es exactamente el mismo número de caracteres.Pitón
Si
y
es un entero positivofuente
JavaScript (ES6), 31
Uso:
Explicación:
La función anterior crea una expresión que se multiplica por
x
y
veces y luego la evalúa.fuente
Me sorprende ver que nadie escribió una solución con el Combinador Y, sin embargo ... así:
Python2
¡Sin bucles, sin operaciones de vector / lista y sin recursividad (explícita)!
fuente
fix
, votando a él ...C #: 45
Funciona solo para enteros:
fuente
return --y?x:x*P(x,y);
bash & sed
Sin números, sin bucles, solo un abuso vergonzosamente peligroso. Preferentemente ejecute en un directorio vacío para estar seguro. Script de shell:
fuente
Javascript
Utiliza expresiones regulares para crear una matriz de tamaño y + 1 cuyo primer elemento es 1. Luego, reduce la matriz con la multiplicación para calcular la potencia. Cuando y = 0, el resultado es el primer elemento de la matriz, que es 1.
Es cierto que mi objetivo era i) no usar la recursión, ii) hacerlo oscuro.
fuente
Mathematica
Probablemente haciendo trampa para usar el hecho de que x ^ (1 / y) = y√x
fuente
JavaScript
fuente
Golfscript, 8 caracteres (incluidas E / S)
Explicación:
TLDR: otra solución de "producto de matriz repetida".
La entrada esperada es dos números, por ejemplo
2 5
. La pila comienza con un elemento, la cadena"2 5"
.fuente
Rubí
Uso de la muestra:
En última instancia, esto es lo mismo que varias respuestas anteriores: crea una matriz de longitud y cada elemento cuyo x es, luego toma el producto. Se ofusca de forma gratuita para que parezca que está utilizando el
**
operador prohibido .fuente
C, exponenciación por cuadratura
versión de golf en 46 bytes (¡gracias ugoren!)
debería ser más rápido que todas las otras respuestas recursivas hasta ahora
versión ligeramente más lenta en 45 bytes
fuente
b
,~-b/2 == b/2
.pow(n, x)
mejor que O (n)?"Haskell - 55
Ya hay una entrada de Haskell más corta, pero pensé que sería interesante escribir una que aproveche la
fix
función, como se define enData.Function
. Usado de la siguiente manera (en la Repl en aras de la facilidad):fuente
Q
9 caracteres Genera matriz con
y
instancias dex
y toma el producto.Puede lanzar explícitamente a flotante para un rango mayor dado int / long x:
fuente
Lógica similar a muchas otras, en PHP:
Ejecútalo con
php file.php 5 3
para obtener 5 ^ 3fuente
No estoy seguro de cuántos votos positivos puedo esperar para esto, pero me pareció un tanto peculiar que en realidad tenía que escribir esa misma función hoy. Y estoy bastante seguro de que esta es la primera vez que un sitio .SE ve este idioma (el sitio web no parece ser muy útil).
abdominales
Trabaja para exponentes negativos y bases racionales.
Lo destaqué en la sintaxis de Java, porque eso es lo que estoy haciendo actualmente cuando estoy trabajando con este lenguaje. Se ve bien
fuente
Pascal
El desafío no especificó el tipo o rango de x e y, por lo tanto, creo que la siguiente función Pascal sigue todas las reglas dadas:
¡Sin bucle, sin potencia incorporada o función de exponenciación, ni siquiera recursividad o aritmética!
fuente
J - 5 o 4 bytes
Exactamente igual que la respuesta APL de marinus .
Para
x^y
:Para
y^x
:Por ejemplo:
x $~ y
crea una lista de tiemposx
repetidosy
(igual quey $ x
*/ x
es la función del producto,*/ 1 2 3
->1 * 2 * 3
fuente
Pitón
fuente
=/=
la funciónJavascript
Con recursión de cola, funciona si
y
es un entero positivofuente
Golpetazo
Todo el mundo sabe que
bash
puede hacer cosas geniales de reducción de mapas ;-)Si eso es demasiado para ti, entonces hay esto:
fuente
C
Otra exponenciación recursiva al cuadrar la respuesta en C, pero difieren (esto usa un cambio en lugar de división, es ligeramente más corto y se repite una vez más que la otra):
fuente
Mathematica
Esto funciona para enteros.
Ejemplo
Cómo funciona
Table
hace una lista dey
x
's.Times
toma el producto de todos ellos.`Otra forma de lograr el mismo fin :
Ejemplo
fuente
Lote de Windows
Como la mayoría de las otras respuestas aquí, utiliza la recursividad.
x ^ y se almacena en la variable de entorno
z
.fuente
perl
Aquí hay una entrada perl recursiva de cola. El uso es echo $ X, $ Y | foo.pl:
O para un enfoque de tipo más funcional, ¿qué tal:
fuente
Pitón
No estoy seguro de si esto va en contra de los requisitos, pero si no, aquí está mi intento.
fuente