{"id":13547419,"url":"https://github.com/vkostyukov/scalacaster","last_synced_at":"2025-05-15T18:04:41.374Z","repository":{"id":6099476,"uuid":"7326767","full_name":"vkostyukov/scalacaster","owner":"vkostyukov","description":"Purely Functional Algorithms and Data Structures in Scala","archived":false,"fork":false,"pushed_at":"2023-08-14T06:35:45.000Z","size":227,"stargazers_count":1471,"open_issues_count":8,"forks_count":318,"subscribers_count":125,"default_branch":"master","last_synced_at":"2025-03-31T21:51:18.858Z","etag":null,"topics":["algorithm","data-structures","functional-programming","okasaki","scala"],"latest_commit_sha":null,"homepage":"http://www.slideshare.net/vkostyukov/purely-functional-data-structures-in-scala-26175521","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vkostyukov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-12-26T12:05:30.000Z","updated_at":"2025-02-05T16:56:52.000Z","dependencies_parsed_at":"2024-09-25T00:05:20.118Z","dependency_job_id":"d3301996-b2c0-48d4-be32-3dac09dd8910","html_url":"https://github.com/vkostyukov/scalacaster","commit_stats":{"total_commits":224,"total_committers":19,"mean_commits":"11.789473684210526","dds":0.1919642857142857,"last_synced_commit":"807f0a954cf7715e3d0e976fe47cf29a4edb1955"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vkostyukov%2Fscalacaster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vkostyukov%2Fscalacaster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vkostyukov%2Fscalacaster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vkostyukov%2Fscalacaster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vkostyukov","download_url":"https://codeload.github.com/vkostyukov/scalacaster/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247737788,"owners_count":20987721,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithm","data-structures","functional-programming","okasaki","scala"],"created_at":"2024-08-01T12:00:55.301Z","updated_at":"2025-04-07T22:11:15.462Z","avatar_url":"https://github.com/vkostyukov.png","language":"Scala","funding_links":[],"categories":["Scala","\u003e 1k ★","Github Libraries","Libraries"],"sub_categories":[],"readme":"Why Scalacaster?\n----------------\n\n[![Join the chat at https://gitter.im/vkostyukov/scalacaster](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/vkostyukov/scalacaster?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\nSince [Fender Stratocaster][0] is a classic guitar, **Scalacaster** is about classic algorithms and data structures in Scala. Scalacaster includes loads of widely used implementation techniques and approaches, which have been developed by best programmers and enthusiasts of functional programming. Studying purely functional data structures is always fun and challenge for researchers, since data structures in a functional setting are much elegant and smarter than in an imperative setting.\n\nHow to use Scalacaster?\n-----------------------\n\nScalacaster is neither a library nor framework. Moreover, Scalacaster`s code is not supposed to be executed at all. Scalacaster's code is not for Scala compiler but for human beings, for enthusiasts and researchers of the Scala programming language and its application in the area of implementation of the purely functional data structures. So, the best way to use Scalacaster is to read through its source code and comments.\n\nWhat is inside?\n---------------\n\n##### Primitive routines\n* Numbers theory [`src/primitive/Numbers.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/primitive/Numbers.scala)\n* Strings [`src/primitive/Strings.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/primitive/Strings.scala)\n\n##### Simple Collections\n* List [`src/collection/List.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/collection/List.scala)\n* Queue [`src/collection/Queue.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/collection/Queue.scala)\n* Stack [`src/collection/Stack.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/collection/Stack.scala)\n* Set [`src/collection/Set.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/collection/Set.scala)\n\n##### Heaps\n* Standard Binary Heap [`src/heap/StandardHeap.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/heap/StandardHeap.scala)\n* Leftist Heap [`src/heap/LeftistHeap.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/heap/LeftistHeap.scala)\n* Pairing Heap [`src/heap/PairingHeap.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/heap/PairingHeap.scala)\n* Skew Heap [`src/heap/SkewHeap.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/heap/SkewHeap.scala)\n\n\n##### Trees\n* Binary Search Tree [`src/tree/Tree.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/tree/Tree.scala)\n* Red-Black Tree [`src/tree/RBTree.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/tree/RBTree.scala)\n* AA Tree [`src/tree/AATree.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/tree/AATree.scala)\n\n\n##### Graphs\n* Graph [`src/graph/Graph.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/graph/Graph.scala)\n* InductiveGraph [`src/graph/InductiveGraph.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/graph/InductiveGraph.scala)\n\n##### Sorting Algorithms\n* Quick Sort [`src/sort/QuickSort.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/sort/QuickSort.scala)\n* Merge Sort [`src/sort/MergeSort.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/sort/MergeSort.scala)\n* Bubble Sort [`src/sort/BubbleSort.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/sort/BubbleSort.scala)\n* Insertion Sort [`src/sort/InsertionSort.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/sort/InsertionSort.scala)\n* Selection Sort [`src/sort/SelectionSort.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/sort/SelectionSort.scala)\n\n##### Searching Algorithms\n* Selection Search (k-th order statistic) [`src/search/SelectionSearch.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/search/SelectionSearch.scala)\n* Binary Search [`src/search/BinarySearch.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/search/BinarySearch.scala)\n* Linear Search [`src/search/LinearSearch.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/search/LinearSearch.scala)\n\nHow to contribute?\n------------------\n\n* Give it a star\n* Drop the feedback to the author [@vkostyukov](https://twitter.com/vkostyukov)\n* Send a PR with fixes of typos/bugs/etc\n\nWhat to read next?\n------------------\n\n* [Slides about Scalacaster][1]\n* [Purely Functional Data Structures by Chris Okasaki][2]\n* [What's new in Purely Functional DS since Okasaki][3]\n* [A Functional Approach to Standard Binary Heaps][4] (see [`StandardHeap.scala`](https://github.com/vkostyukov/scalacaster/blob/master/src/heap/StandardHeap.scala))\n* [Combinatorial Algorithms in Scala][5]\n* [Designing a Purely Functional Data Structure][6]\n* [Functional Data Structures in Scala by Daniel Spiewak][7]\n\n----\n\n\u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by/4.0/\"\u003e\u003cimg alt=\"Creative Commons License\" style=\"border-width:0\" src=\"https://i.creativecommons.org/l/by/4.0/88x31.png\" /\u003e\u003c/a\u003e\u003cbr /\u003eThis work is licensed under a \u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by/4.0/\"\u003eCreative Commons Attribution 4.0 International License\u003c/a\u003e.\n\n[0]: http://www.fender.com/guitars/stratocaster/\n[1]: http://www.slideshare.net/vkostyukov/purely-functional-data-structures-in-scala-26175521\n[2]: http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504\n[3]: http://cstheory.stackexchange.com/questions/1539/whats-new-in-purely-functional-data-structures-since-okasaki\n[4]: http://arxiv.org/pdf/1312.4666v1.pdf\n[5]: http://vkostyukov.net/posts/combinatorial-algorithms-in-scala/\n[6]: http://vkostyukov.net/posts/designing-a-pfds\n[7]: https://www.youtube.com/watch?v=pNhBQJN44YQ\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvkostyukov%2Fscalacaster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvkostyukov%2Fscalacaster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvkostyukov%2Fscalacaster/lists"}