Dies ist eine wirklich nette kurze Herausforderung.
Schreibe eine Funktion oder eine Prozedur , die zwei Parameter nimmt, x
und y
und gibt das Ergebnis aus , ohne Schleifen oder in Potenzfunktionen aufgebaut.xy
Der Gewinner ist die kreativste Lösung und wird nach 3 Tagen anhand der höchsten Stimmenzahl ausgewählt.
popularity-contest
math
restricted-source
CodyBugstein
quelle
quelle
exp(log(x)*y)
?Antworten:
APL (7)
Linkes Argument ist Basis, rechtes Argument ist Exponent, zB:
Erläuterung:
⍵/⍺
repliziert⍺
⍵
mal, zB5 {⍵/⍺} 6
->5 5 5 5 5 5
×/
nimmt das Produkt, zB×/5 5 5 5 5 5
->5×5×5×5×5×5
->15625
quelle
*/@$~
×/⍴⍨
C #: Gleitkommaexponenten
OK, diese Lösung ist ziemlich zerbrechlich. Sie können es leicht brechen, indem Sie lächerlich große Zahlen wie 6 darauf werfen. Aber es funktioniert wunderbar für Dinge wie
DoublePower(1.5, 3.4)
und verwendet keine Rekursion!quelle
C ++
Wie wäre es mit einer Template-Meta-Programmierung? Es verbiegt die kleinen Regeln, die es gab, aber es ist einen Versuch wert:
quelle
Python
Funktioniert nicht für nicht ganzzahlige Potenzen.
quelle
join
?eval('*'.join([str(x)] * y))
.**
Operator hat, so dass Sie eval () d haben könnten.Haskell - 25 Zeichen
Folgende Marinus APL-Version:
Wenn der Kommentar von mniip und das Leerzeichen entfernt sind, werden 27 Zeichen angezeigt:
quelle
replicate y x
anstelle vontake y $ repeat x
f=(product.).flip replicate
ist genau die gleiche Anzahl von Zeichen.Python
If
y
ist eine positive ganze Zahlquelle
JavaScript (ES6), 31
Verwendung:
Erläuterung:
Die obige Funktion erstellt einen Ausdruck, der multipliziert
x
y
und dann ausgewertet wird.quelle
Ich bin überrascht zu sehen, dass noch niemand eine Lösung mit dem Y Combinator geschrieben hat ... also:
Python2
Keine Schleifen, keine Vektor- / Listenoperationen und keine (explizite) Rekursion!
quelle
fix
, um ihn zu stimmen ...C #: 45
Funktioniert nur für ganze Zahlen:
quelle
return --y?x:x*P(x,y);
stattdessen schreibenbash & sed
Keine Zahlen, keine Schleifen, nur ein peinlich gefährlicher Glob-Missbrauch. Führen Sie es aus Sicherheitsgründen vorzugsweise in einem leeren Verzeichnis aus. Shell-Skript:
quelle
Javascript
Verwendet reguläre Ausdrücke, um ein Array der Größe y + 1 zu erstellen, dessen erstes Element 1 ist. Reduzieren Sie dann das Array mit Multiplikation, um die Leistung zu berechnen. Wenn y = 0 ist, ist das Ergebnis das erste Element des Arrays, nämlich 1.
Zugegeben, mein Ziel war es, i) keine Rekursion zu verwenden, ii) sie dunkel zu machen.
quelle
Mathematica
Wahrscheinlich zu betrügen, um die Tatsache zu nutzen, dass x ^ (1 / y) = y√x
quelle
JavaScript
quelle
Golfscript, 8 Zeichen (einschließlich E / A)
Erläuterung:
TLDR: ein weiteres "Produkt von wiederholten Array" -Lösung.
Die erwartete Eingabe besteht aus zwei Zahlen, z
2 5
. Der Stapel beginnt mit einem Element, der Zeichenfolge"2 5"
.quelle
Rubin
Beispielgebrauch:
Dies ist letztendlich dasselbe wie bei mehreren vorherigen Antworten: Erstellt ein Array mit y-Länge, von dem jedes Element x ist, und übernimmt dann das Produkt. Es ist nur unbegründet, damit es so aussieht, als würde es den verbotenen
**
Operator verwenden.quelle
C: Potenzierung durch Quadrieren
Golf Version in 46 Bytes (danke ugoren!)
sollte schneller sein als alle anderen rekursiven Antworten bisher oO
etwas langsamere Version in 45 Bytes
quelle
b
,~-b/2 == b/2
.pow(n, x)
besser schreiben als O (n)?"Haskell - 55
Es gibt bereits einen kürzeren Haskell-Eintrag, aber ich dachte, es wäre interessant, einen zu schreiben, der die
fix
in definierte Funktion nutztData.Function
. Wird wie folgt verwendet (im Repl der Einfachheit halber):quelle
Q.
9 Zeichen. Erzeugt ein Array mit
y
Instanzen vonx
und übernimmt das Produkt.Kann bei int / long x explizit in float umgewandelt werden, um einen größeren Bereich zu erreichen:
quelle
Ähnliche Logik wie viele andere in PHP:
Führen Sie es mit aus
php file.php 5 3
, um 5 ^ 3 zu erhaltenquelle
Ich bin mir nicht sicher, wie viele Upvotes ich dafür erwarten kann, aber ich fand es etwas merkwürdig, dass ich heute tatsächlich genau diese Funktion schreiben musste. Und ich bin mir ziemlich sicher, dass dies das erste Mal ist, dass eine .SE-Site diese Sprache sieht (die Website scheint nicht sehr hilfreich zu sein).
Abs
Funktioniert für negative Exponenten und rationale Basen.
Ich habe es in der Java-Syntax hervorgehoben, weil ich das gerade mache, wenn ich mit dieser Sprache arbeite. Sieht gut aus.
quelle
Pascal
In der Challenge wurde weder der Typ noch der Bereich von x und y angegeben. Daher befolge die folgende Pascal-Funktion alle angegebenen Regeln:
Keine Schleife, keine eingebaute Potenz- oder Potenzierungsfunktion, nicht einmal Rekursion oder Arithmetik!
quelle
J - 5 oder 4 Bytes
Genau das gleiche wie die APL-Antwort von Marinus .
Für
x^y
:Für
y^x
:Beispielsweise:
x $~ y
erstellt eine Liste mitx
Wiederholungeny
(wiey $ x
*/ x
ist die Produktfunktion,*/ 1 2 3
->1 * 2 * 3
quelle
Python
quelle
=/=
FunktionJavascript
Funktioniert mit der Schwanzrekursion, wenn
y
es sich um eine positive Ganzzahl handeltquelle
Bash
Jeder weiß,
bash
dass er verrückte Kartenreduzierungen machen kann ;-)Wenn das zu trolly für Sie ist, dann gibt es das:
quelle
C
Noch eine rekursive Potenzierung durch Quadrieren der Antwort in C, aber sie unterscheiden sich (dies verwendet eine Verschiebung anstelle einer Division, ist etwas kürzer und rekursiv ein Mal mehr als das andere):
quelle
Mathematica
Dies funktioniert für ganze Zahlen.
Beispiel
Wie es funktioniert
Table
macht eine Liste vony
x
's.Times
nimmt das Produkt von allen.`Ein anderer Weg, um das gleiche Ziel zu erreichen :
Beispiel
quelle
Windows Batch
Wie die meisten anderen Antworten hier wird die Rekursion verwendet.
x ^ y ist in der Umgebungsvariablen gespeichert
z
.quelle
perl
Hier ist ein rekursiver Perl-Eintrag. Die Verwendung ist echo $ X, $ Y | foo.pl:
Oder für einen eher funktionalen Ansatz:
quelle
Python
Ich bin nicht sicher, ob dies gegen die Anforderungen verstößt, aber wenn nicht, ist hier mein Versuch.
quelle