diff --git a/02_selection_sort/Purescript/README.md b/02_selection_sort/Purescript/README.md new file mode 100644 index 0000000..a447648 --- /dev/null +++ b/02_selection_sort/Purescript/README.md @@ -0,0 +1,6 @@ +# Getting Started +1. Install `spago` and `purescript` through `yarn` or `npm` (e.g. `yarn global add spago` and `yarn global add purescript`) +2. Run file through `spago run --watch --main ` (e.g. `spago run --watch --main GrokkingAlgos.SelectionSort`) + +# Main Repo +- https://github.com/seanyu4296/grokking-algo-in-purs \ No newline at end of file diff --git a/02_selection_sort/Purescript/SelectionSort.purs b/02_selection_sort/Purescript/SelectionSort.purs new file mode 100644 index 0000000..d4da68f --- /dev/null +++ b/02_selection_sort/Purescript/SelectionSort.purs @@ -0,0 +1,46 @@ +module GrokkingAlgos.SelectionSort where + +import Prelude + +import Data.Foldable (minimum) +import Data.List (List(..), delete, (:)) +import Data.Maybe (Maybe(..), fromJust) +import Effect (Effect) +import Effect.Class.Console (logShow) +import Partial.Unsafe (unsafePartial) + +-- PARTIAL +selectionsort :: List Int -> List Int +selectionsort Nil = Nil + +selectionsort l = minVal : (selectionsort rest) + where + minVal :: Int + minVal = unsafePartial $ fromJust $ minimum l + + rest :: List Int + rest = delete minVal l + +-- TOTAL +selectionsort' :: List Int -> Maybe (List Int) +selectionsort' Nil = Just $ Nil + +selectionsort' l = do + mval <- minimum l + let + rest = delete mval l + restSort <- selectionsort' rest + pure $ mval : restSort + +-- +main :: Effect Unit +main = do + logShow $ selectionsort $ 1 : 2 : 3 : 5 : 4 : Nil + logShow $ selectionsort' $ 1 : 2 : 3 : 5 : 4 : Nil + + +{- + -- | Notes + -- | Array (Reading (O(1))) (Insertion (O(n))) + -- | Linked List (Reading - O(n)) (Insertion - O(1)) -- Constants in Big O???? + -} \ No newline at end of file diff --git a/02_selection_sort/Purescript/packages.dhall b/02_selection_sort/Purescript/packages.dhall new file mode 100644 index 0000000..97dadbd --- /dev/null +++ b/02_selection_sort/Purescript/packages.dhall @@ -0,0 +1,128 @@ +{- +Welcome to your new Dhall package-set! + +Below are instructions for how to edit this file for most use +cases, so that you don't need to know Dhall to use it. + +## Warning: Don't Move This Top-Level Comment! + +Due to how `dhall format` currently works, this comment's +instructions cannot appear near corresponding sections below +because `dhall format` will delete the comment. However, +it will not delete a top-level comment like this one. + +## Use Cases + +Most will want to do one or both of these options: +1. Override/Patch a package's dependency +2. Add a package not already in the default package set + +This file will continue to work whether you use one or both options. +Instructions for each option are explained below. + +### Overriding/Patching a package + +Purpose: +- Change a package's dependency to a newer/older release than the + default package set's release +- Use your own modified version of some dependency that may + include new API, changed API, removed API by + using your custom git repo of the library rather than + the package set's repo + +Syntax: +Replace the overrides' "{=}" (an empty record) with the following idea +The "//" or "⫽" means "merge these two records and + when they have the same value, use the one on the right:" +------------------------------- +let override = + { packageName = + upstream.packageName // { updateEntity1 = "new value", updateEntity2 = "new value" } + , packageName = + upstream.packageName // { version = "v4.0.0" } + , packageName = + upstream.packageName // { repo = "https://www.example.com/path/to/new/repo.git" } + } +------------------------------- + +Example: +------------------------------- +let overrides = + { halogen = + upstream.halogen // { version = "master" } + , halogen-vdom = + upstream.halogen-vdom // { version = "v4.0.0" } + } +------------------------------- + +### Additions + +Purpose: +- Add packages that aren't already included in the default package set + +Syntax: +Replace the additions' "{=}" (an empty record) with the following idea: +------------------------------- +let additions = + { package-name = + { dependencies = + [ "dependency1" + , "dependency2" + ] + , repo = + "https://example.com/path/to/git/repo.git" + , version = + "tag ('v4.0.0') or branch ('master')" + } + , package-name = + { dependencies = + [ "dependency1" + , "dependency2" + ] + , repo = + "https://example.com/path/to/git/repo.git" + , version = + "tag ('v4.0.0') or branch ('master')" + } + , etc. + } +------------------------------- + +Example: +------------------------------- +let additions = + { benchotron = + { dependencies = + [ "arrays" + , "exists" + , "profunctor" + , "strings" + , "quickcheck" + , "lcg" + , "transformers" + , "foldable-traversable" + , "exceptions" + , "node-fs" + , "node-buffer" + , "node-readline" + , "datetime" + , "now" + ] + , repo = + "https://github.com/hdgarrood/purescript-benchotron.git" + , version = + "v7.0.0" + } + } +------------------------------- +-} + + +let upstream = + https://github.com/purescript/package-sets/releases/download/psc-0.13.8-20200724/packages.dhall sha256:bb941d30820a49345a0e88937094d2b9983d939c9fd3a46969b85ce44953d7d9 + +let overrides = {=} + +let additions = {=} + +in upstream // overrides // additions diff --git a/02_selection_sort/Purescript/spago.dhall b/02_selection_sort/Purescript/spago.dhall new file mode 100644 index 0000000..721cd6d --- /dev/null +++ b/02_selection_sort/Purescript/spago.dhall @@ -0,0 +1,9 @@ +{- +Welcome to a Spago project! +You can edit this file as you like. +-} +{ name = "my-project" +, dependencies = [ "console", "effect", "psci-support", "arrays", "debug", "lists", "ordered-collections", "strings"] +, packages = ./packages.dhall +, sources = [ "src/**/*.purs", "test/**/*.purs" ] +}