Add purescript solution for chapt 1
This commit is contained in:
39
01_introduction_to_algorithms/Purescript/BinarySearch.purs
Normal file
39
01_introduction_to_algorithms/Purescript/BinarySearch.purs
Normal file
@@ -0,0 +1,39 @@
|
||||
module GrokkingAlgos.BinarySearch where
|
||||
|
||||
import Prelude
|
||||
import Data.Array ((!!))
|
||||
import Data.Array as Array
|
||||
import Data.Maybe (Maybe(..))
|
||||
import Effect (Effect)
|
||||
import Effect.Class.Console (logShow)
|
||||
|
||||
-- | Binary Search - input is a sorted list of elements
|
||||
-- | Big o notation - log n
|
||||
-- | Traveling salesman - O (n!)
|
||||
binarysearch :: Int -> Array Int -> Int -> Int -> Maybe Int
|
||||
binarysearch x arr low high
|
||||
| low > high = Nothing
|
||||
| otherwise =
|
||||
let
|
||||
mid = (high + low) / 2
|
||||
in
|
||||
arr !! mid
|
||||
>>= case _ of
|
||||
item
|
||||
| item == x -> Just mid
|
||||
item
|
||||
| item > x -> binarysearch x arr low (mid - 1)
|
||||
item
|
||||
| item < x -> binarysearch x arr (mid + 1) high
|
||||
_ -> Nothing
|
||||
|
||||
find :: Int -> Array Int -> Maybe Int
|
||||
find x arr = binarysearch x arr low high
|
||||
where
|
||||
low = 0
|
||||
|
||||
high = (Array.length arr) - 1
|
||||
|
||||
main :: Effect Unit
|
||||
main = do
|
||||
logShow $ find 20 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20 ]
|
||||
3
01_introduction_to_algorithms/Purescript/README.md
Normal file
3
01_introduction_to_algorithms/Purescript/README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# 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> GrokkingAlgos.SelectionSort` (e.g. `spago run --watch --main GrokkingAlgos.SelectionSort`)
|
||||
128
01_introduction_to_algorithms/Purescript/packages.dhall
Normal file
128
01_introduction_to_algorithms/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.6-20200226/packages.dhall sha256:3a52562e05b31a7b51d12d5b228ccbe567c527781a88e9028ab42374ab55c0f1
|
||||
|
||||
let overrides = {=}
|
||||
|
||||
let additions = {=}
|
||||
|
||||
in upstream // overrides // additions
|
||||
9
01_introduction_to_algorithms/Purescript/spago.dhall
Normal file
9
01_introduction_to_algorithms/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