Eingabe: Sie erhalten 2 Ganzzahlen n
und k
. n
ist eine positive (> = 1) Ganzzahl und k
eine Ganzzahl, die angibt, wie oft Sie sie verwenden dürfen n
.
Ausgang: Ausgang alle nicht negativen ganzen Zahlen , die unter Verwendung von höchstens gebildet werden kann , k
n
ist diese mathematischen Operationen mit: +
, -
, *
, /
und Klammern.
Bearbeiten: Wenn Ihre Sprache das Entfernen von Elementen aus einem Array / Set / etc. Unterstützt, sind nicht negative Ganzzahlen erforderlich. Wenn nicht, ist es nicht erforderlich.
Der einzige numerische Wert, der im Ausdruck existieren kann, ist n (jedoch viele Male). Wenn der Wert des Ausdrucks den Maximalwert des vorhandenen Datenspeichers (z. B. int
oder long
usw.) überschreitet , müssen Sie dies kompensieren (es kann kein Maximalwert angegeben werden n
).
Geschwindigkeit ist nicht wichtig, aber der kürzeste Code gewinnt!
Boni:
-50: Potenzierung in die Liste der mathematischen Operationen aufnehmen. Exponentiation ist definiert als, dass die Basis ein Ausdruck von n ist, nicht e = 2.71828 ...
-50: Schließen Sie die Boden- (oder Decken-) Funktionen ein, wenn eine bestimmte mögliche Operation keine Ganzzahl ist.
Beispiele
> 2 2
0 1 4
> 4 3
3 4 5 12 20 64 ...
(Beispiel-Ein- / Ausgänge enthalten nicht unbedingt Boni)
2
sodass 2 in der Ausgabe enthalten sein sollte. 2. Mit Potenzierung meinen Sie das Erhöhen auf eine Macht, nichte^x?
3. Wenn Sie Code-Golf (kürzester Code) wollen, ist das Code-Challenge-Tag redundant.2^x
(oder2**x
) Exponentiation, währendexp(x)
das Exponential ist. Gemäß 3 war das Teil einer Bearbeitung, die ich vorgenommen habe, also wurde diese jetzt entferntAntworten:
Javascript (E6) 215 (315 - 2 * 50 Bonus)
252Vereinfacht bearbeiten . Richtiger Fehler von 0 fehlt
Als Funktion definiert, zählt dann 10 weitere Bytes für die Ausgabe mit
alert()
Wichtig Wirklich, dieser ist gemäß den Regeln nicht gültig, da Javascript keine großen Zahlen verarbeiten kann. Zum Beispiel kann es mit den Parametern 2,5 nicht 2 ^ 2 ^ 2 ^ 2 ^ 2 (dh 2 ^ 65536) finden. Eine so große Zahl ist "Unendlichkeit" in Javascript.
Golf gespielt
Golfen.Ich habe eine Idee, die ich teilen möchte: Verwenden Sie eine Postfix-Notation. In Postfix besteht jede Art von Ausdruck nur aus Werten und Operatoren - es werden keine Klammern benötigt. Die Postfix-Notation kann in die übliche algebraische Infix-Notation übersetzt werden - aber das ist bei dieser Herausforderung nicht möglich.Verwendungszweck
Ausgabe
1,2,3,4,5,8,12,16,20,32,64,252,256,260,1024,4096,65536,4294967296,1.3407807929942597e+154
Ungolfed
In der ersten Version ist dies komplizierter, aber möglicherweise einfacher zu befolgen
Zeigen Sie den Postfix-Ausdruck für jede Nummer an
Verwendungszweck
Ausgabe
quelle
Python 2, 249 Zeichen - 50 Bonus = 199
Probeläufe:
Dies beansprucht den Potenzierungsbonus von -50 Punkten. Das Zulassen der Potenzierung kann für kleine Eingaben erstaunlich große Ergebnisse liefern (
pow
aus der Liste der Operatoren entfernen , um es ohne Potenzierung zu versuchen).quelle
Mathematica, 105 Bytes - 100 Bonus = 5
Hinweis: Dies unterstützt derzeit keine Klammern. Behebung, sobald das OP die Herausforderung geklärt hat.
Wenn auch negative Ganzzahlen in Ordnung sind, erhält dies stattdessen 1 .
Etwas ungolf:
Ich beanspruche beide Boni für die Einbeziehung von Potenzierungs- und nicht ganzzahligen Bodenbelägen.
Beispiele:
quelle
Python 2.x: 32 (
132-(50+50)
)Ich werde beide Boni beanspruchen:
x/y
verhält sich so, wie Sie es erwarten würdenfloor(x/y)
, und es unterstützt Kräfte.Demo:
quelle
abs
ist klug, ich denke, ich stehle das als Belohnung für den Hinweis auf den Fehler;)4,3
Fall?4^4^4
beginnt mit13407...
.2**2**2**2**2
, weil ich eine Wiederholung zu viele hatte.f(5,2)
sollte immer noch diese Antwort geben.J: -23 (77-50 * 2)
Das funktioniert noch
n<=2
nicht, ich weiß nicht warum. Ich werde versuchen, dies zu beheben, aber wenn jemand eine Antwort kennt, sagen Sie dies bitte in den Kommentaren.quelle
Haskell, 35
Ich bin mir nicht sicher, ob eine Funktion ausreicht oder ein tatsächliches Programm erforderlich ist, daher veröffentliche ich zwei Versionen, beide mit 100 Bonus.
Als Programm Punktzahl von 80:
oder als Funktion Punktzahl von 35:
Beispielausgabe für
(4%3)
oderecho 4 3|codegolf.exe
, sortiert nach Ihrer Bequemlichkeit:Das einzige, was ein bisschen komisch ist, ist, dass die Gleitkommazahl
Infinity
eine riesige ganze Zahl erreicht, aber ich hoffe, dass dies nicht allzu wichtig ist.quelle
J, -43 (53-2 * 50)
Dies funktioniert nicht immer, da J versucht, Berechnungen mit zu großen Zahlen zu verhindern. Wenn wir (Maschinen-) Floats verwenden dürfen, die bei einem Überlauf einfach auf unendlich gesetzt werden, erhalten wir Folgendes, etwas kürzer, für eine Punktzahl von 52-100 = -48:
Dies ist eine Version, die in keiner Weise von meiner vorherigen J-Antwort inspiriert ist. Ich veröffentliche sie daher als separate Antwort. Wissenswertes: Dies könnte das erste Mal sein, dass ich eine explizite Funktion in einer J-Antwort verwenden musste.
Verwendung (Ja, die kleinen Kästchen sind tatsächliche Datenstrukturen in J und werden tatsächlich so angezeigt.):
quelle
Python 2 - 212 Bytes (262-50)
Zweiter Code Golf überhaupt!
EDIT: Ok mit Klammern wird etwas größer:
Mit Klammern - 354 Bytes (404-50)
quelle
Haskell - 235 Bytes - 100 Bonus = 135
Getestet mit
Dieses Ergebnis wird mit erzielt
replicateM
. Wenn wir die Eingabe verwenden4 3
,replicateM
werden wir die folgenden Felder von Funktionen:[[(+),(+)],[(+),(-)],[(+),(*)],[(+),(/)],[(+),(**)],[(-),(+)],[(-),(-)],[(-),(*)],[(-),(/)],[(-),(**)],[(*),(+)],[(*),(-)],[(*),(*)],[(*),(/)],[(*),(**)],[(/),(+)],[(/),(-)],[(/),(*)],[(/),(/)],[(/),(**)],[(**),(+)],[(**),(-)],[(**),(*)],[(**),(/)],[(**),(**)]]
, oder einfacher[[a->a->a]]
. Jedes Array wird dann von rechts gefaltet undn
als Eingabe verwendet :[(+),(+)] = 4+(4+4) = 12
. Beachten Sie, dass hier kein Operator Vorrang hat :[(*),(+)] = 4*(4+4) != (4*4)+4
.Die angegebenen Zahlen werden dann auf Zahlen unter Null gesetzt, sortiert und nach Zahlen unter 0 gefiltert.
quelle
2
es , dass Sie keine Operator-Priorität haben ? (wie(4+4)/4
)C, dc & bash utils - 259 (Quelle) + 21 (zum Ausführen) - 100 Boni = 180
Speichern unter
calc.c
:Kompilieren:
Dadurch werden Permutationen
dc
kompatibler Eingaben ausgegeben .dc
ist ein Taschenrechner mit unbegrenzter Genauigkeit, kann also große Zahlen erzeugen und hat auch eine Potenzierung.dc
Im Standardmodus wird eine ganzzahlige Arithmetik verwendet, sodass diesefloor
integriert ist. Die allgemeinen Befehled*v
am Ende verwenden effektiv den absoluten Wert, um die Anzahl der möglichen gültigen Ausgaben zu erhöhen.Wenn Sie alleine laufen, wird nur viel ausgegeben, z
Um die Ergebnisse zu erhalten, binden Sie dies ein
dc | sort -n | uniq | xargs
, um die gewünschte Ausgabe zu erhalten, zDas höchste k, das es verarbeiten kann, ist 13, aber dann werden Sie lange auf die Ergebnisse warten!
Im Moment folgt es einem strengen
# # op # op # op ...
Muster, aber Sie können mehr Zahlen erhalten, indem Sie das Muster umschalten, z.Dies könnte darin bestehen, die Zahlen und Operatoren als Symbole zu behandeln und sie gleichermaßen zu permutieren. Sie würden eine Menge Sequenzen bekommen, die nicht legal sind
dc
, aber lassen Siedc
das herausfinden. Ergebnisse ausstehend ...quelle
HASKELL 98 (198-100 Bonus)
bearbeiten: Ich würde kommentieren, aber ich kann nicht, ich würde vorschlagen, unbegrenzte Reichweite als Bonus zu behandeln
Es scheint mir, dass einige Antworten einen Punkt verfehlen:
using at most k n
. Dies bedeutet, dass f (4,3) (4/4) = 1 oder (4 * 4) = 16 erzeugen kann.Jedenfalls ist das meine Antwort. Ich gehe davon aus, dass sich int / int als Floor verhält. Potenzierung ist enthalten.
HASKELL 111 (211-100 Bonus)quelle
<!-- language: lang-haskell -->
zwei Zeilen vor dem Code für die Syntaxhervorhebung hinzuzufügen .<!-- language-all: lang-haskell -->
irgendwo vor dem ersten Codeblock hinzu, einen Trick, den ich vor einigen Tagen gelernt habe.Ruby 181 - 50 - 50 = 81
quelle