1. Domácí úkol: Catalanova čísla
Úvod
Při řešení kombinatorických úloh jste možná již potkali Catalanova čísla. V tomto prvním jednodušším úkolu se budeme zabývat jejich implementací v Julia. Budeme potřebovat pouze základní vlastnosti jazyka a proto by vám úloha neměla zabrat příliš času.
Catalanova čísla získala jméno po Eugène Charles Catalanovi, francouzsko-belgickém matematikovi žijícím v 19. století.
Teoretický background
Pro celé nezáporné (tj. ) definujeme -té Catalanovo číslo předpisem
kde označuje známé kombinační číslo.
Catalanova čísla mají zajímavé vlastnosti. Například splňují rekurentní vztah
a rekurentní vztah
Dále také platí
Implementační pokyny
V souboru main.jl doplňte implementaci metody catalan, která bude přijímat celá čísla a počítat odpovídající Catalanovo číslo.
Například
julia> catalan(25)
4861946401452V případě neceločíselného typu argumentu (např. float nebo řetězec) dojde k vyvolání výjimky MethodError.
Pokud je argument záporný celočíselný, pak dostaneme výjimku ArgumentError.
Přetečení nutně řešit nemusíte (není testováno), ale snažte se vaší metodu alespoň implementovat tak, aby bylo možné napočítat co nejvíce Catalanových čísel v daném typu. Součástí vyhodnocení řešení bude porovnání rychlosti i robustnosti vaší implementace s ostatními studentskými řešeními.
Metoda musí být typově stabilní.
Tj. pokud dostaneme argument typu např. UInt64, pak návratová hodnota je také typu UInt64.
Svou implementaci můžete lokálně snadno otestovat příkazem julia test/runtests.jl, výstup by měl vypadat přibližně takto
$ julia test/runtests.jl
┌ Info: Running tests in test_sets.jl...
└ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Test Summary: | Pass Total Time
Argument types. | 9 9 0.2s
Test Summary: | Pass Total Time
Return types. | 7 7 0.0s
Test Summary: | Pass Total Time
Invalid arguments. | 2 2 0.0s
Test Summary: | Pass Total Time
First few values. | 12 12 0.0s
Test Summary: | Pass Total Time
Randomized test of one of the recurrence equations. | 1 1 0.0sTyto testy se spouští i automaticky na Gitlabu.
Řešení a odevzdání
Opět vytvořte větev odvozenou z větve assignment/01-catalan a nezvěte ji solution/01-catalan.
Do solution/01-catalan vložte své řešení editací souboru main.jl případně přidáním testů do složky test.
Až budete se svým řešením spokojeni, vytvořte MR (to můžete i dříve, aspoň uvidíte výsledek testů, pokud je nespouštíte lokálně) a přiřaďte mě k němu jako assignee.
Tímto aktem úkol odevzdáte.