Biorąc pod uwagę dwie dodatnie liczby całkowite a
i b
wyprowadzamy rozkład częstotliwości toczenia b
jednostronnych a
czasów matrycy i sumując wyniki.
Rozkład częstotliwości podaje częstotliwość każdej możliwej sumy, jeśli każda możliwa sekwencja rzutów kostką występuje raz. Tak więc częstotliwościami są liczby całkowite, których suma jest równa b**a
.
Zasady
- Częstotliwości muszą być wymienione w kolejności rosnącej od sumy, której częstotliwość odpowiada.
- Oznaczanie częstotliwości odpowiednimi sumami jest dozwolone, ale nie wymagane (ponieważ sumy można wywnioskować z wymaganej kolejności).
- Nie musisz obsługiwać danych wejściowych, w których dane wyjściowe przekraczają reprezentatywny zakres liczb całkowitych dla Twojego języka.
- Zera wiodące lub końcowe są niedozwolone. Na wyjściu powinny pojawić się tylko dodatnie częstotliwości.
Przypadki testowe
Format: a b: output
1 6: [1, 1, 1, 1, 1, 1]
2 6: [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
3 6: [1, 3, 6, 10, 15, 21, 25, 27, 27, 25, 21, 15, 10, 6, 3, 1]
5 2: [1, 5, 10, 10, 5, 1]
6 4: [1, 6, 21, 56, 120, 216, 336, 456, 546, 580, 546, 456, 336, 216, 120, 56, 21, 6, 1]
10 10: [1, 10, 55, 220, 715, 2002, 5005, 11440, 24310, 48620, 92368, 167860, 293380, 495220, 810040, 1287484, 1992925, 3010150, 4443725, 6420700, 9091270, 12628000, 17223250, 23084500, 30427375, 39466306, 50402935, 63412580, 78629320, 96130540, 115921972, 137924380, 161963065, 187761310, 214938745, 243015388, 271421810, 299515480, 326602870, 351966340, 374894389, 394713550, 410820025, 422709100, 430000450, 432457640, 430000450, 422709100, 410820025, 394713550, 374894389, 351966340, 326602870, 299515480, 271421810, 243015388, 214938745, 187761310, 161963065, 137924380, 115921972, 96130540, 78629320, 63412580, 50402935, 39466306, 30427375, 23084500, 17223250, 12628000, 9091270, 6420700, 4443725, 3010150, 1992925, 1287484, 810040, 495220, 293380, 167860, 92368, 48620, 24310, 11440, 5005, 2002, 715, 220, 55, 10, 1]
5 50: [1, 5, 15, 35, 70, 126, 210, 330, 495, 715, 1001, 1365, 1820, 2380, 3060, 3876, 4845, 5985, 7315, 8855, 10626, 12650, 14950, 17550, 20475, 23751, 27405, 31465, 35960, 40920, 46376, 52360, 58905, 66045, 73815, 82251, 91390, 101270, 111930, 123410, 135751, 148995, 163185, 178365, 194580, 211876, 230300, 249900, 270725, 292825, 316246, 341030, 367215, 394835, 423920, 454496, 486585, 520205, 555370, 592090, 630371, 670215, 711620, 754580, 799085, 845121, 892670, 941710, 992215, 1044155, 1097496, 1152200, 1208225, 1265525, 1324050, 1383746, 1444555, 1506415, 1569260, 1633020, 1697621, 1762985, 1829030, 1895670, 1962815, 2030371, 2098240, 2166320, 2234505, 2302685, 2370746, 2438570, 2506035, 2573015, 2639380, 2704996, 2769725, 2833425, 2895950, 2957150, 3016881, 3075005, 3131390, 3185910, 3238445, 3288881, 3337110, 3383030, 3426545, 3467565, 3506006, 3541790, 3574845, 3605105, 3632510, 3657006, 3678545, 3697085, 3712590, 3725030, 3734381, 3740625, 3743750, 3743750, 3740625, 3734381, 3725030, 3712590, 3697085, 3678545, 3657006, 3632510, 3605105, 3574845, 3541790, 3506006, 3467565, 3426545, 3383030, 3337110, 3288881, 3238445, 3185910, 3131390, 3075005, 3016881, 2957150, 2895950, 2833425, 2769725, 2704996, 2639380, 2573015, 2506035, 2438570, 2370746, 2302685, 2234505, 2166320, 2098240, 2030371, 1962815, 1895670, 1829030, 1762985, 1697621, 1633020, 1569260, 1506415, 1444555, 1383746, 1324050, 1265525, 1208225, 1152200, 1097496, 1044155, 992215, 941710, 892670, 845121, 799085, 754580, 711620, 670215, 630371, 592090, 555370, 520205, 486585, 454496, 423920, 394835, 367215, 341030, 316246, 292825, 270725, 249900, 230300, 211876, 194580, 178365, 163185, 148995, 135751, 123410, 111930, 101270, 91390, 82251, 73815, 66045, 58905, 52360, 46376, 40920, 35960, 31465, 27405, 23751, 20475, 17550, 14950, 12650, 10626, 8855, 7315, 5985, 4845, 3876, 3060, 2380, 1820, 1365, 1001, 715, 495, 330, 210, 126, 70, 35, 15, 5, 1]
b
jest to co najmniej 2? (A jeśli nie, to jak powinna wyglądać lista częstotliwości sum jednostronnej kości?)Odpowiedzi:
Oktawa , 38 bajtów
Wypróbuj online!
Wyjaśnienie
Dodanie niezależnych zmiennych losowych odpowiada splotowi ich funkcji masy prawdopodobieństwa (PMF) lub pomnożeniu ich funkcji charakterystycznych (CF). Tak więc CF sumy
a
niezależnych, identycznie rozmieszczonych zmiennych jest dana przez pojedynczą zmienną podniesioną do potęgia
.CF jest zasadniczo transformatą Fouriera PMF, a zatem można go obliczyć za pomocą FFT. PMF pojedynczego
b
-sided matrycy jest jednolita na1
,2
, ...,b
. Wymagane są jednak dwie modyfikacje:1
jest używany zamiast rzeczywistych wartości prawdopodobieństwa (1/b
). W ten sposób wynik zostanie zdenormalizowany i będzie zawierał liczby całkowite zgodnie z wymaganiami.a*b-a+1
), a domniemane zachowanie okresowe przyjęte przez FFT nie wpływa na wyniki.Po uzyskaniu funkcji charakterystycznej sumy stosuje się odwrotną FFT do obliczenia wyniku końcowego, a zaokrąglanie stosuje się w celu skorygowania niedokładności zmiennoprzecinkowych.
Przykład
Rozważmy wejść
a=2
,b=6
. Koda:a*b<a+b
buduje wektor zb=6
zerami uzupełnionymi o zeroa*b-a+1
:Potem
fft(...)
dajeMożna tutaj prawie rozpoznać funkcję sinusa (transformata Fouriera impulsu prostokątnego).
(...).^a
podnosi każdy wpis do,a
a następnieifft(...)
przyjmuje odwrotną FFT, co dajeChociaż wyniki w tym przypadku są dokładnie liczbami całkowitymi, generalnie mogą występować błędy względne rzędu
1e-16
, dlategoround(...)
jest potrzebne.źródło
Mathematica, 29 bajtów
Po prostu generuje wszystkie możliwe rzuty kostkami, bierze ich sumy, a następnie się liczy. Każda częstotliwość jest oznaczona swoją wartością.
Mathematica, 38 bajtów
Rozszerza się
(1+x+x^2+...+x^(a-1))^b
i przyjmuje współczynnikix
. Ponieważ1+x+x^2+...+x^(a-1)
funkcja generowania pojedynczego rzutu matrycą i produkty odpowiadają zwojom - dodając wartości kości - wynik daje rozkład częstotliwości.źródło
Haskell ,
90797775 bajtówDzięki Lynn za sztuczkę kartezjańską . -11 bajtów dzięki wielu sztuczkom Haskell od Funky Computer Man, -2 bajty od nazewnictwa, -2 bajty dzięki Laikoni. Sugestie dotyczące gry w golfa są mile widziane! Wypróbuj online!
Bez golfa
źródło
$
zamiast,()
aby zapisać 2 bajty. TIOreplicate
(map length$)=(length<$>)
dla dwóch bajtówPyth - 10 bajtów
Po prostu bierze wszystkie możliwe kombinacje kości, biorąc iloczyn kartezjański
[1, b]
,a
czasy, sumowanie i otrzymując długość każdej grupy sum.Pakiet testowy .
źródło
05AB1E , 8 bajtów
Wypróbuj online!
W jaki sposób?
źródło
R , 58 bajtów
Wypróbuj online!
źródło
R , 52 bajty
Wypróbuj online!
Port rozwiązanie Octave @Luis Mendo jest ,
fft(z, inverse=T)
niestety zwraca nieznormalizowanych odwrotną FFT, więc musimy podzielić przez długość i zwracacomplex
wektor, więc bierzemy tylko część rzeczywistą.źródło
cmdscale
liczby :-)SageMath, 40 bajtów
Wypróbuj online
convolution
oblicza dyskretne splot dwóch list.reduce
robi to, co jest napisane na puszce.[1]*b
to listab
1
s, rozkład częstotliwości1db
.[[1]*b]*a
tworzy zagnieżdżoną listęa
kopiib
1
s.Python 2 + NumPy , 56 bajtów
Wypróbuj online!
Dołączyłem to rozwiązanie do powyższego, ponieważ są one zasadniczo równoważne. Zauważ, że ta funkcja zwraca tablicę NumPy, a nie listę Python, więc wynik wygląda nieco inaczej
print
.numpy.ones((a,b))
jest „poprawnym” sposobem na stworzenie tablicy do użycia z NumPy, a zatem może być używana zamiast[[1]*b]*a
, ale niestety jest dłuższa.źródło
Galaretka , 5 bajtów
Wypróbuj online!
Zauważ, że to przyjmuje argumenty w odwrotnej kolejności.
W jaki sposób?
Alternatywne rozwiązania:
źródło
Python 2 ,
10291 bajtówWypróbuj online!
źródło
Haskell , 61 bajtów
Wypróbuj online! Użyj jako
a#b
.Częściowo na podstawie odpowiedzi Haskella Sherlock9 .
źródło
MATL , 9 bajtów
Takie samo podejście jak w pytaniu Maltysena .
Wejścia są w odwrotnej kolejności. Wypróbuj online!
źródło
Pari / GP , 28 bajtów
Wypróbuj online!
źródło
Perl 5 , 53 bajtów
Wypróbuj online!
Format wejściowy:
źródło
JavaScript (ES6), 94 bajty
Ograniczone przez 32-bitowe przepełnienie liczb całkowitych, ale zamiast tego można użyć liczb zmiennoprzecinkowych kosztem 1 bajtu.
źródło
J ,
25 24 2120 bajtówWypróbuj online!
Początkowo zwiększyłem listę [0..n-1], aby uzyskać [1..n], ale najwyraźniej nie jest to konieczne.
źródło
#/.~@,@(+///)@$i.@{:
. Seems like there should be a way to shave it down a bit more making the verb dyadic, but I wasn't able to do it./
in+//
Javascript (ES6), 89 bytes
Takes input in currying syntax in reverse order
f(b)(a)
źródło
Actually,
1312 bytes-1 byte thanks to Mr. Xcoder. Try it online!
Ungolfed
źródło
@
, do you?R∙♂Σ╗╜╔⌠╜c⌡M
AWK, 191 bytes
Outputs frequencies as a vertical column.
Try it online!
Adding 6 more bytes allows for multiple sets of inputs.
Try it online!
źródło
Clojure, 86 bytes
An example:
źródło
C (gcc), 142 bytes
Try it online!
źródło
sizeof(int)
? Really?8
would work on any architecture, overallocating a bit but that's ok.r[0]=1;for(i=1;i<=a;i++)for(j=i*~-b;
->for(i=r[0]=1;i<=a;)for(j=i++*~-b;
for -2 bytes.Julia, 43 bytes
Try it online!
źródło