Add chapter 2 selection sort solution
This commit is contained in:
6
02_selection_sort/Purescript/README.md
Normal file
6
02_selection_sort/Purescript/README.md
Normal file
@@ -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 <module-name>` (e.g. `spago run --watch --main GrokkingAlgos.SelectionSort`)
|
||||||
|
|
||||||
|
# Main Repo
|
||||||
|
- https://github.com/seanyu4296/grokking-algo-in-purs
|
||||||
46
02_selection_sort/Purescript/SelectionSort.purs
Normal file
46
02_selection_sort/Purescript/SelectionSort.purs
Normal file
@@ -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????
|
||||||
|
-}
|
||||||
128
02_selection_sort/Purescript/packages.dhall
Normal file
128
02_selection_sort/Purescript/packages.dhall
Normal file
@@ -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
|
||||||
9
02_selection_sort/Purescript/spago.dhall
Normal file
9
02_selection_sort/Purescript/spago.dhall
Normal file
@@ -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" ]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user