diff --git a/01_introduction_to_algorithms/Purescript/BinarySearch.purs b/01_introduction_to_algorithms/Purescript/BinarySearch.purs new file mode 100644 index 0000000..81ed644 --- /dev/null +++ b/01_introduction_to_algorithms/Purescript/BinarySearch.purs @@ -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 ] diff --git a/01_introduction_to_algorithms/Purescript/README.md b/01_introduction_to_algorithms/Purescript/README.md new file mode 100644 index 0000000..88bf8b6 --- /dev/null +++ b/01_introduction_to_algorithms/Purescript/README.md @@ -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 GrokkingAlgos.SelectionSort` (e.g. `spago run --watch --main GrokkingAlgos.SelectionSort`) \ No newline at end of file diff --git a/01_introduction_to_algorithms/Purescript/packages.dhall b/01_introduction_to_algorithms/Purescript/packages.dhall new file mode 100644 index 0000000..093fe82 --- /dev/null +++ b/01_introduction_to_algorithms/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.6-20200226/packages.dhall sha256:3a52562e05b31a7b51d12d5b228ccbe567c527781a88e9028ab42374ab55c0f1 + +let overrides = {=} + +let additions = {=} + +in upstream // overrides // additions diff --git a/01_introduction_to_algorithms/Purescript/spago.dhall b/01_introduction_to_algorithms/Purescript/spago.dhall new file mode 100644 index 0000000..721cd6d --- /dev/null +++ b/01_introduction_to_algorithms/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" ] +}