Napisz program, który pobiera dane wejściowe, takie jak:
n,k
który następnie oblicza:
a następnie drukuje wynik.
Numeryczny przykład:
Wejście:
5,2
Obliczenia wewnętrzne:
Wydruk:
10
Chciałbym zobaczyć odpowiedź, która przewyższa moje rozwiązanie pythonowe składające się z 65 znaków, ale wszystkie języki są oczywiście mile widziane.
Oto moje rozwiązanie:
n,k=input();f=lambda x:+(x<2)or x*f(x-1);print f(n)/(f(k)*f(n-k))
Edytować:
Przyznaję, że to pytanie pochodzi ze strony matematycznej kombinacji łamigłówek na stronie codegolf . Wiem, że moja odpowiedź może wyglądać na niewielki postęp, ale przywódcy tej układanki rozwiązali ją u prawie połowy postaci.
Obecnie najniższa liczba znaków według języka to:
Perl: 35
Rubin: 36
Python: 39
PHP: 62
code-golf
combinatorics
backus
źródło
źródło
Odpowiedzi:
APL, 3 bajty
Lub dla tych, których przeglądarka nie wyświetla powyższego, w renderowaniu ASCII:
źródło
n,k
Musisz być w pełni zgodny z danymi wejściowymi!/⌽⎕
.R (11 znaków)
źródło
C 96
Z I / O (co zajmuje około 34 znaków). Dodano kilka nowych linii, aby była czytelna.
Teraz, przepraszam, mam ASCII i wybieram rakietę do złapania.
źródło
GolfScript, 17 znaków
To rozwiązanie poprawnie obsługuje przypadki takie jak k = 0 lub k = 1.
Część przypominająca czynnik jest oparta na poprzedniej odpowiedzi .
źródło
GolfScript 21
Niezbyt krótki, GolfScript nie ma prawdziwej funkcji silni, ale musi to być najbardziej nikczemna manipulacja danymi, jaką kiedykolwiek zrobiłem, wymaga to śledzenia stosu:
„5,2” Dane na stosie z danych wejściowych.
~
Zauważ, że polecenie Eval to operator, który przekształca liczbę w tablicę.[0 1 2 3 4] 2
~
Nie binarne.[0 1 2 3 4] -3
)
Przyrost.[0 1 2 3 4] -2
>
Weź koniec tablicy, -2 jako parametr, aby uzyskać ostatnie 2 elementy.[3 4]
.
Duplikat elementu.[3 4] [3 4]
,
Długość tablicy.[3 4] 2
,
Zmień liczbę na tablicę.[3 4] [0 1]
]
Utwórz tablicę.[[3 4] [0 1]]
{{)}%{*}*}
Blok kodu.[[3 4] [0 1]] {{)}% {*} *}
%
Wykonaj blok raz dla każdego elementu tablicy. Poniższa część pokazuje tylko pierwszą pętlę.[3 4]
{)}%
Zwiększ każdy element tablicy.[4 5]
{*}
Blok zawierający polecenie mnożenia.[4 5] {*}
*
„Złóż” tablicę za pomocą polecenia blokowania, czyli w tym przypadku wykonaj iloczyn wszystkich elementów.20
Po zakończeniu dużej pętli zwraca tablicę z wynikami.
[20 2]
~
Dekonstruuj tablicę.20 2
/
Division.10
źródło
Ruby 1.9,
5246 (42) znakówJeśli stderr jest ignorowany:
Ruby 1.8, 43 znaki, bez dodatkowych danych wyjściowych do stderr:
Edycje:
źródło
Python (56)
Nieskluczony kod i wyjaśnienie skrótu do obliczania współczynnika dwumianowego. (Uwaga: Jest pewien wgląd, którego po prostu nie rozgryzłem, aby przejść do wersji 39 znaków; nie sądzę, że to podejście cię tam zaprowadzi.)
źródło
*
do analizowania danych wejściowych formularza4545 78
?*
o to chodzi.4545 78
nie jest prawidłowym wyrażeniem w języku Python, więcinput()
podniesieSyntaxError
. Ta sztuczka zależy całkowicie od problemux,y
. Jeśli masz funkcję, która odczytujex y
i zwraca krotkę, możesz*
z nią dobrze korzystać.RPL (4)
(za pomocą wbudowanej funkcji)
źródło
Windows PowerShell, 57
źródło
J,
333635 znaków jest wprowadzanych, analizowanych i wysyłanych. Drugim znakiem
!
jest n i wybierz k.Obecnie nie mam systemu Windows do testowania tego, ale uważam, że powinien tam działać.
źródło
Q, 32 znaki
źródło
Perl 6 (55)
źródło
RPL (22)
(nie używa wbudowanej funkcji COMB)
źródło
Q (
5045)Możesz ogolić kilka znaków powyżej, usuwając zbędne nawiasy i używając 1 * / zamiast prd.
źródło
Matematyka 12
Prosta, wbudowana funkcja.
źródło
Perl 6 ,
2516 bajtów-9 bajtów dzięki nwellnhof
Wypróbuj online!
Anonimowa funkcja, która pobiera dwie liczby i zwraca liczbę całkowitą. Korzysta z wbudowanego
combinations
i konwertuje zwróconą listę na int.źródło
combinations
można wziąć numer zamiast listyPHP (71
79)źródło
Python (54)
Zasadniczo taki sam jak powyższy Python, ale golę cztery bajty, upuszczając plik
z definicji funkcji. Powoduje to jednak, że funkcja zwraca True zamiast 1, jeśli k = 0, ale można to naprawić mnożąc przez 1 przed drukowaniem, ponieważ 1 * True = 1, dodając w ten sposób dwa bajty.
źródło
J, 11 znaków
Pobiera dane z klawiatury.
źródło
Haskell (80)
Ale jeśli
x y
dozwolone jest wprowadzanie danych w formacie zamiast w formaciex,y
, to 74 znaki:źródło
Scala 54
źródło
Python (52)
Ulepszony od pozostałych dwóch poprzez
print+
konwersję wynikuf
zboolean
naint
na skrzynkęk==0
.Nadal nie mam pojęcia, jak zmniejszyć go do 39, zastanawiam się, czy w ogóle używają lambda.
źródło
(OP tylko luźno określił metodę / format wejścia i wyjścia, więc następujące wydaje się dopuszczalne.)
Sage Notebook (
39 4140)W bieżącej komórce
gdzie dane wejściowe w formularzu
n,k
są wprowadzane i oceniane w poprzedniej komórce. Symuluje to „dane wejściowe z wiersza poleceń”, przypisując je_
(podobnie jak argumenty wiersza poleceń).Sage Notebook (
42 4443)Alternatywnie, używając „danych wejściowych” (z
x=
dodanymi tylko znakami i znakiem nowej linii do wyniku), np.Oba te podejścia są oczywiście pochodnymi wcześniejszych odpowiedzi innych osób.
źródło
Tcl , 80 bajtów
Wypróbuj online!
źródło
JavaScript, 27 bajtów
Najpierw moje własne 35-bajtowe rozwiązania:
Lub alternatywnie
Pierwszy działa rekurencyjnie, z prostą
(n,k) = (n-1,k) + (n-1,k-1)
regułą. Drugi używa tego(n,k) = (n-1,k-1) * n/k
.EDYTOWAĆ
Właśnie zauważyłem rozwiązanie Arnoulda w duplikacie tego:
Co oznacza o 8 bajtów mniej (27 bajtów)
źródło
TI-BASIC, 16 znaków (8 bajtów)
Dane wejściowe to lista o długości 2 cali
Ans
.Dane wyjściowe są wynikiem zdefiniowanej tutaj formuły .
Jeśli powyższe rozwiązanie nie wystarczy, działają również następujące 35 znaków (24 bajty) :
Uwaga: TI-BASIC jest językiem tokenizowanym. Liczba znaków nie jest równa liczbie bajtów.
źródło