Schreiben Sie ein Programm, das eine Eingabe wie die folgenden vornimmt:
n,k
was dann berechnet:
und druckt dann das Ergebnis.
Ein numerisches Beispiel:
Eingang:
5,2
Interne Berechnung:
Gedruckte Ausgabe:
10
Ich würde gerne eine Antwort sehen, die meine Python-Lösung mit 65 Zeichen übertrifft, aber alle Sprachen sind natürlich willkommen.
Hier ist meine Lösung:
n,k=input();f=lambda x:+(x<2)or x*f(x-1);print f(n)/(f(k)*f(n-k))
Bearbeiten:
Ich gebe zu, dass diese Frage aus dem mathematischen Kombinationsrätsel der Codegolf-Website stammt . Ich weiß, dass meine Antwort so aussieht, als ob nicht viel Fortschritt gemacht werden kann, aber die Anführer dieses Puzzles haben es in fast halb so vielen Charakteren gelöst.
Die derzeit niedrigsten Zeichenzahlen nach Sprache sind:
Perl: 35
Ruby: 36
Python: 39
PHP: 62
code-golf
combinatorics
Backus
quelle
quelle
Antworten:
APL, 3 Bytes
Oder für diejenigen, deren Browser das oben Gesagte in einem ASCII-Rendering nicht rendert:
quelle
n,k
Eingabe übereinzustimmen, müssten Sie dies tun!/⌽⎕
.R (11 Zeichen)
quelle
C 96
Mit E / A (was ungefähr 34 Zeichen dauert). Einige Zeilenumbrüche wurden hinzugefügt, um die Lesbarkeit zu verbessern.
Nun, wenn Sie mich entschuldigen, ich habe eine ASCII-Rakete zum Wählen.
quelle
GolfScript, 17 Zeichen
Diese Lösung behandelt Fälle wie k = 0 oder k = 1 korrekt.
Der faktorielle Teil basiert auf einer vorherigen Antwort .
quelle
GolfScript 21
Nicht besonders kurz, GolfScript hat keine echte Fakultätsfunktion, aber dies muss die bösartigste Datenmanipulation sein, die ich jemals durchgeführt habe. Dies erfordert eine Stapelverfolgung:
"5,2" Daten auf dem Stapel von der Eingabe.
~
Beachten Sie, dass der Befehl Eval ein Operator ist, der eine Zahl in ein Array verwandelt.[0 1 2 3 4] 2
~
Binär nicht.[0 1 2 3 4] -3
)
Inkrement.[0 1 2 3 4] -2
>
Nehmen Sie das Ende des Arrays, -2 als Parameter, um die letzten 2 Elemente zu erhalten.[3 4]
.
Element duplizieren.[3 4] [3 4]
,
Array-Länge.[3 4] 2
,
Drehen Sie die Nummer in ein Array.[3 4] [0 1]
]
Array erstellen.[[3 4] [0 1]]
{{)}%{*}*}
Codeblock.[[3 4] [0 1]] {{)}% {*} *}
%
Führen Sie den Block für jedes Element des Arrays einmal aus. Der folgende Teil zeigt nur die erste Schleife.[3 4]
{)}%
Inkrementiere jedes Array-Element.[4 5]
{*}
Block mit einem Multiplikationsbefehl.[4 5] {*}
*
"Falten" Sie das Array mit dem Befehl block, dh machen Sie in diesem Fall das Produkt aller Elemente.20
Nachdem die große Schleife beendet ist, wird ein Array mit den Ergebnissen zurückgegeben.
[20 2]
~
Dekonstruiere das Array.20 2
/
Abteilung.10
quelle
Ruby 1.9,
5246 (42) ZeichenWenn stderr ignoriert wird:
Ruby 1.8, 43 Zeichen, keine zusätzliche Ausgabe an stderr:
Bearbeitungen:
quelle
Python (56)
Ungolfed Code und eine Erklärung einer Abkürzung zur Berechnung des Binomialkoeffizienten. (Hinweis: Es gibt einige Erkenntnisse, die ich einfach nicht herausgefunden habe, um zur 39-Zeichen-Version zu gelangen. Ich glaube nicht, dass dieser Ansatz Sie dorthin bringt.)
quelle
*
Eingaben des Formulars analysieren4545 78
?*
das Problem.4545 78
ist kein gültiger Python-Ausdruck, daherinput()
wird a ausgelöstSyntaxError
. Dieser Trick hängt ganz von dem Problem ab, nach dem gefragt wirdx,y
. Wenn Sie eine Funktion hatten, diex y
ein Tupel las und zurückgab, konnten Sie es problemlos verwenden*
.RPL (4)
(mit eingebauter Funktion)
quelle
Windows PowerShell, 57
quelle
J,
333635 Zeichen werden eingegeben, analysiert und ausgegeben. Das andere Zeichen
!
ist n wähle k.Ich habe momentan kein Windows zum Testen, aber ich glaube, es sollte dort funktionieren.
quelle
Q, 32 Zeichen
quelle
Perl 6 (55)
quelle
RPL (22)
(ohne integrierte COMB-Funktion)
quelle
Q (
5045)Sie können einige der oben genannten Zeichen entfernen, indem Sie redundante Klammern entfernen und 1 * / anstelle von prd verwenden.
quelle
Mathematica 12
Einfache, eingebaute Funktion.
quelle
Perl 6 ,
2516 Bytes-9 Bytes dank nwellnhof
Probieren Sie es online aus!
Anonyme Funktion, die zwei Zahlen akzeptiert und ein int zurückgibt. Dies verwendet die integrierte
combinations
und konvertiert die zurückgegebene Liste in eine int.quelle
combinations
eine Nummer anstelle einer Liste nehmen könntePHP (71
79)quelle
Python (54)
Im Wesentlichen das gleiche wie das Python oben, aber ich rasiere vier Bytes durch Löschen des
aus der Funktionsdefinition. Dies führt jedoch dazu, dass die Funktion True anstelle von 1 zurückgibt, wenn k = 0 ist. Dies kann jedoch durch Multiplizieren mit 1 vor dem Drucken behoben werden, da 1 * True = 1 ist, wodurch zwei Bytes addiert werden.
quelle
J, 11 Zeichen
Übernimmt Eingaben über die Tastatur.
quelle
Haskell (80)
Wenn jedoch die Eingabe im Format
x y
anstelle des Formats zulässig istx,y
, sind es 74 Zeichen:quelle
Scala 54
quelle
Python (52)
Verbessert von den beiden anderen, indem
print+
das Ergebnis vonf
vonboolean
inint
für den Fall konvertiert wirdk==0
.Ich habe immer noch keine Ahnung, wie ich es auf 39 verkleinern soll. Ich frage mich, ob sie überhaupt Lambda verwenden.
quelle
(Das OP hat die Eingabe- und Ausgabemethode / das Eingabeformat nur lose angegeben, sodass Folgendes akzeptabel erscheint.)
Salbei Notizbuch (
39 4140)In der aktuellen Zelle
Hier wird die Eingabe im Formular
n,k
in der vorhergehenden Zelle eingegeben und ausgewertet. Dies simuliert die "Befehlszeileneingabe", indem sie zugewiesen wird_
(ähnlich wie bei Befehlszeilenargumenten).Salbei Notizbuch (
42 4443)Alternativ können Sie "In-Source-Eingabe" verwenden (wobei nur die
x=
Zeichen und Zeilenumbrüche zur Partitur hinzugefügt werden), z.Beide Ansätze sind offensichtlich Ableger früherer Antworten anderer.
quelle
Tcl , 80 Bytes
Probieren Sie es online aus!
quelle
Javascript, 27 Bytes
Zuerst meine eigenen 35-Byte-Lösungen:
Oder alternativ,
Der erste arbeitet rekursiv mit der einfachen
(n,k) = (n-1,k) + (n-1,k-1)
Regel. Der zweite benutzt das(n,k) = (n-1,k-1) * n/k
.BEARBEITEN
Ich habe gerade die Lösung von Arnould in einem Duplikat davon bemerkt:
Das sind satte 8 Bytes weniger (27 Bytes)
quelle
TI-BASIC, 16 Zeichen (8 Bytes)
Die Eingabe ist eine Liste mit einer Länge von 2 Zoll
Ans
.Die Ausgabe ist das Ergebnis der hier definierten Formel .
Wenn die obige Lösung nicht ausreicht, funktioniert auch die folgende Lösung mit 35 Zeichen (24 Byte) :
Hinweis: TI-BASIC ist eine Token-Sprache. Die Anzahl der Zeichen entspricht nicht der Anzahl der Bytes.
quelle