Browse Source

challenge 4 in the bag

master
Ken Aguilar 4 years ago
parent
commit
fae72f6f97
9 changed files with 40983 additions and 5 deletions
  1. +20483
    -0
      app.js
  2. +5
    -1
      bower.json
  3. +2
    -2
      src/03CSSVariables/CSSVariables.purs
  4. +3
    -0
      src/04ArrayCardioDay1/ArrayCardioDay1.js
  5. +109
    -0
      src/04ArrayCardioDay1/ArrayCardioDay1.purs
  6. +92
    -0
      src/04ArrayCardioDay1/ExerciseData.purs
  7. +20156
    -0
      src/04ArrayCardioDay1/app.js
  8. +131
    -0
      src/04ArrayCardioDay1/index.html
  9. +2
    -2
      src/Main.purs

+ 20483
- 0
app.js
File diff suppressed because it is too large
View File


+ 5
- 1
bower.json View File

@@ -17,7 +17,11 @@
"purescript-transformers": "^4.2.0",
"purescript-js-timers": "^4.0.1",
"purescript-js-date": "^6.0.0",
"purescript-arrays": "^5.2.1"
"purescript-arrays": "^5.2.1",
"purescript-stringutils": "^0.0.8",
"purescript-strings": "^4.0.1",
"purescript-record": "^2.0.0",
"purescript-ordered-collections": "^1.6.1"
},
"devDependencies": {
"purescript-psci-support": "^4.0.0"


+ 2
- 2
src/03CSSVariables/CSSVariables.purs View File

@@ -21,7 +21,7 @@ import Web.DOM.Internal.Types (NodeList, Element)
import Web.DOM.Node as DOMNode
import Web.DOM.NodeList as NodeList
import Web.DOM.ParentNode (ParentNode, QuerySelector(..))
import Web.DOM.ParentNode as WebDOM
import Web.DOM.ParentNode as ParentNode
import Web.Event.Event as Event
import Web.Event.EventTarget (EventListener, EventTarget)
import Web.Event.EventTarget as EventTarget
@@ -47,7 +47,7 @@ getElements
=> ReaderT { parentNode :: ParentNode, className :: String } m NodeList
getElements = do
{parentNode, className} <- ask
elements <- EffectClass.liftEffect $ WebDOM.querySelectorAll (QuerySelector className) parentNode
elements <- EffectClass.liftEffect $ ParentNode.querySelectorAll (QuerySelector className) parentNode
pure elements

effParentNode :: Effect { parentNode :: ParentNode, document :: Document }


+ 3
- 0
src/04ArrayCardioDay1/ArrayCardioDay1.js View File

@@ -0,0 +1,3 @@
exports.logTableImpl = function(a) {
return console.table(a);
};

+ 109
- 0
src/04ArrayCardioDay1/ArrayCardioDay1.purs View File

@@ -0,0 +1,109 @@
module ArrayCardioDay1 where

-- Base
import Control.Monad.Reader(ReaderT, ask, runReaderT)
import Data.Array (filter, sortBy, (!!))
import Data.Maybe (Maybe(..))
import Data.String.Common (split)
import Data.String.Pattern (Pattern(..))
import Data.Traversable (foldr, traverse)
import Prelude
import Data.String.Utils as StringUtils
import Data.Map (Map)
import Data.Map as Map

-- Effect
import Effect (Effect)
import Effect.Class (class MonadEffect)
import Effect.Class as EffectClass
import Effect.Console (logShow)
import Effect.Uncurried (EffectFn1, runEffectFn1)

-- DOM
import Web.DOM.Internal.Types (Element, NodeList)
import Web.DOM.Node as Node
import Web.DOM.NodeList as NodeList
import Web.DOM.ParentNode (QuerySelector(..), ParentNode)
import Web.DOM.ParentNode as ParentNode
import Web.HTML as HTML
import Web.HTML.HTMLDocument as HTMLDocument
import Web.HTML.Window as Window

-- test data
import ExerciseData (Inventor, ranData, people, inventorList)

foreign import logTableImpl :: forall a. EffectFn1 a Unit

logTable :: forall a. a -> Effect Unit
logTable a = runEffectFn1 logTableImpl a

effParentNode :: Effect ParentNode
effParentNode =
HTML.window >>= Window.document >>= pure <<< HTMLDocument.toParentNode

-- Notes: toParentNode :: Element -> ParentNode
getElement
:: forall m. Bind m
=> MonadEffect m
=> ReaderT { parentNode :: ParentNode, targetElement :: String } m (Maybe Element)
getElement = do
{ parentNode, targetElement } <- ask
pure =<< EffectClass.liftEffect $ ParentNode.querySelector (QuerySelector targetElement) parentNode

getElements
:: forall m. Bind m
=> MonadEffect m
=> ReaderT { parentNode :: ParentNode, targetElement :: String } m NodeList
getElements = do
{ parentNode, targetElement } <- ask
pure =<< EffectClass.liftEffect $ ParentNode.querySelectorAll (QuerySelector targetElement) parentNode

bornBy1500 :: Array Inventor -> Array Inventor
bornBy1500 = filter (isBortBetween 1500 1600)
where isBortBetween startDate endDate inventor =
inventor.year >= startDate && inventor.year <= endDate

fullNames :: Array Inventor -> Array String
fullNames = map (\inv -> inv.first <> " " <> inv.last)

orderedByYear :: Array Inventor -> Array Inventor
orderedByYear = sortBy (\a b -> compare a.year b.year)

totalYears :: Array Inventor -> Int
totalYears = foldr (\b a -> a + (b.passed - b.year)) 0

orderedByOldest :: Array Inventor -> Array Inventor
orderedByOldest =
sortBy (\a b ->
if (a.passed - a.year) > (b.passed - b.year)
then LT
else GT)

alpha :: Array String -> Array String
alpha =
sortBy (\a b ->
case (split (Pattern ", ") a) !! 0 of
Nothing -> LT
Just aLast ->
case (split (Pattern ", ") b) !! 0 of
Nothing -> LT
Just bLast -> compare aLast bLast
)

transportation :: Array String -> Map String Int
transportation = foldr (\a b -> Map.insertWith (\n _ -> n + 1) a 1 b) Map.empty

main :: Effect Unit
main = do
parentNode <- effParentNode
aTags <- runReaderT getElements {parentNode: parentNode, targetElement: "a"}
logTable $ bornBy1500 inventorList
logShow $ fullNames inventorList
logTable $ orderedByYear inventorList
logShow $ totalYears inventorList
logTable $ orderedByOldest inventorList
nodeArray <- NodeList.toArray aTags
txtContent <- traverse Node.textContent nodeArray
logShow $ filter (StringUtils.includes "de") txtContent
logShow $ alpha people
logShow $ transportation ranData

+ 92
- 0
src/04ArrayCardioDay1/ExerciseData.purs View File

@@ -0,0 +1,92 @@
module ExerciseData
( Inventor
, inventorList
, people
, ranData
) where

type Inventor =
{ first :: String
, last :: String
, year :: Int
, passed :: Int
}

inventorList :: Array Inventor
inventorList = [
{ first: "Albert", last: "Einstein", year: 1879, passed: 1955 },
{ first: "Isaac", last: "Newton", year: 1643, passed: 1727 },
{ first: "Galileo", last: "Galilei", year: 1564, passed: 1642 },
{ first: "Marie", last: "Curie", year: 1867, passed: 1934 },
{ first: "Johannes", last: "Kepler", year: 1571, passed: 1630 },
{ first: "Nicolaus", last: "Copernicus", year: 1473, passed: 1543 },
{ first: "Max", last: "Planck", year: 1858, passed: 1947 },
{ first: "Katherine", last: "Blodgett", year: 1898, passed: 1979 },
{ first: "Ada", last: "Lovelace", year: 1815, passed: 1852 },
{ first: "Sarah E.", last: "Goode", year: 1855, passed: 1905 },
{ first: "Lise", last: "Meitner", year: 1878, passed: 1968 },
{ first: "Hanna", last: "Hammarström", year: 1829, passed: 1909 }
]

people :: Array String
people =
["Beck, Glenn"
, "Becker, Carl"
, "Beckett, Samuel"
, "Beddoes, Mick"
, "Beecher, Henry"
, "Beethoven, Ludwig"
, "Begin, Menachem"
, "Belloc, Hilaire"
, "Bellow, Saul"
, "Benchley, Robert"
, "Benenson, Peter"
, "Ben-Gurion, David"
, "Benjamin, Walter"
, "Benn, Tony"
, "Bennington, Chester"
, "Benson, Leana"
, "Bent, Silas"
, "Bentsen, Lloyd"
, "Berger, Ric"
, "Bergman, Ingmar"
, "Berio, Luciano"
, "Berle, Milton"
, "Berlin, Irving"
, "Berne, Eric"
, "Bernhard, Sandra"
, "Berra, Yogi"
, "Berry, Halle"
, "Berry, Wendell"
, "Bethea, Erin"
, "Bevan, Aneurin"
, "Bevel, Ken"
, "Biden, Joseph"
, "Bierce, Ambrose"
, "Biko, Steve"
, "Billings, Josh"
, "Biondo, Frank"
, "Birrell, Augustine"
, "Black, Elk"
, "Blair, Robert"
, "Blair, Tony"
, "Blake, William"
]

ranData :: Array String
ranData =
[ "car"
, "car"
, "truck"
, "truck"
, "bike"
, "walk"
, "car"
, "van"
, "bike"
, "walk"
, "car"
, "van"
, "car"
, "truck"
]

+ 20156
- 0
src/04ArrayCardioDay1/app.js
File diff suppressed because it is too large
View File


+ 131
- 0
src/04ArrayCardioDay1/index.html View File

@@ -0,0 +1,131 @@
<!doctype html>
<html lang="en">

<head>
<meta charset="UTF-8" />
<title>Array Cardio Day 1</title>
</head>

<body>
<div class="mw-category-generated" lang="en" dir="ltr">
<div id="mw-pages">
<div lang="en" dir="ltr" class="mw-content-ltr">
<div class="mw-category">
<div class="mw-category-group">
<h3> </h3>
<ul>
<li><a href="/wiki/Boulevards_of_Paris" title="Boulevards of Paris">Boulevards of Paris</a></li>
<li><a href="/wiki/City_walls_of_Paris" title="City walls of Paris">City walls of Paris</a></li>
<li><a href="/wiki/Thiers_wall" title="Thiers wall">Thiers wall</a></li>
<li><a href="/wiki/Wall_of_Charles_V" title="Wall of Charles V">Wall of Charles V</a></li>
<li><a href="/wiki/Wall_of_Philip_II_Augustus" title="Wall of Philip II Augustus">Wall of Philip II Augustus</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>*</h3>
<ul>
<li><a href="/wiki/City_gates_of_Paris" title="City gates of Paris">City gates of Paris</a></li>
<li><a href="/wiki/Haussmann%27s_renovation_of_Paris" title="Haussmann&#039;s renovation of Paris">Haussmann&#039;s renovation of Paris</a></li>
<li><a href="/wiki/Boulevards_of_the_Marshals" title="Boulevards of the Marshals">Boulevards of the Marshals</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>A</h3>
<ul>
<li><a href="/wiki/Boulevard_Auguste-Blanqui" title="Boulevard Auguste-Blanqui">Boulevard Auguste-Blanqui</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>B</h3>
<ul>
<li><a href="/wiki/Boulevard_Barb%C3%A8s" title="Boulevard Barbès">Boulevard Barbès</a></li>
<li><a href="/wiki/Boulevard_Beaumarchais" title="Boulevard Beaumarchais">Boulevard Beaumarchais</a></li>
<li><a href="/wiki/Boulevard_de_l%27Amiral-Bruix" title="Boulevard de l&#039;Amiral-Bruix">Boulevard de l&#039;Amiral-Bruix</a></li>
<li><a href="/wiki/Boulevard_Mortier" title="Boulevard Mortier">Boulevard Mortier</a></li>
<li><a href="/wiki/Boulevard_Poniatowski" title="Boulevard Poniatowski">Boulevard Poniatowski</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>C</h3>
<ul>
<li><a href="/wiki/Boulevard_des_Capucines" title="Boulevard des Capucines">Boulevard des Capucines</a></li>
<li><a href="/wiki/Boulevard_de_la_Chapelle" title="Boulevard de la Chapelle">Boulevard de la Chapelle</a></li>
<li><a href="/wiki/Boulevard_de_Clichy" title="Boulevard de Clichy">Boulevard de Clichy</a></li>
<li><a href="/wiki/Boulevard_du_Crime" title="Boulevard du Crime">Boulevard du Crime</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>G</h3>
<ul>
<li><a href="/wiki/Boulevard_du_G%C3%A9n%C3%A9ral-d%27Arm%C3%A9e-Jean-Simon" title="Boulevard du Général-d&#039;Armée-Jean-Simon">Boulevard du Général-d&#039;Armée-Jean-Simon</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>H</h3>
<ul>
<li><a href="/wiki/Boulevard_Haussmann" title="Boulevard Haussmann">Boulevard Haussmann</a></li>
<li><a href="/wiki/Boulevard_de_l%27H%C3%B4pital" title="Boulevard de l&#039;Hôpital">Boulevard de l&#039;Hôpital</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>I</h3>
<ul>
<li><a href="/wiki/Boulevard_des_Italiens" title="Boulevard des Italiens">Boulevard des Italiens</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>L</h3>
<ul>
<li><a href="/wiki/Boulevard_Lefebvre" title="Boulevard Lefebvre">Boulevard Lefebvre</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>M</h3>
<ul>
<li><a href="/wiki/Boulevard_de_la_Madeleine" title="Boulevard de la Madeleine">Boulevard de la Madeleine</a></li>
<li><a href="/wiki/Boulevard_de_Magenta" title="Boulevard de Magenta">Boulevard de Magenta</a></li>
<li><a href="/wiki/Boulevard_Montmartre" title="Boulevard Montmartre">Boulevard Montmartre</a></li>
<li><a href="/wiki/Boulevard_du_Montparnasse" title="Boulevard du Montparnasse">Boulevard du Montparnasse</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>R</h3>
<ul>
<li><a href="/wiki/Boulevard_Raspail" title="Boulevard Raspail">Boulevard Raspail</a></li>
<li><a href="/wiki/Boulevard_Richard-Lenoir" title="Boulevard Richard-Lenoir">Boulevard Richard-Lenoir</a></li>
<li><a href="/wiki/Boulevard_de_Rochechouart" title="Boulevard de Rochechouart">Boulevard de Rochechouart</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>S</h3>
<ul>
<li><a href="/wiki/Boulevard_Saint-Germain" title="Boulevard Saint-Germain">Boulevard Saint-Germain</a></li>
<li><a href="/wiki/Boulevard_Saint-Michel" title="Boulevard Saint-Michel">Boulevard Saint-Michel</a></li>
<li><a href="/wiki/Boulevard_de_S%C3%A9bastopol" title="Boulevard de Sébastopol">Boulevard de Sébastopol</a></li>
<li><a href="/wiki/Boulevard_de_Strasbourg" title="Boulevard de Strasbourg">Boulevard de Strasbourg</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>T</h3>
<ul>
<li><a href="/wiki/Boulevard_du_Temple" title="Boulevard du Temple">Boulevard du Temple</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>V</h3>
<ul>
<li><a href="/wiki/Boulevard_Voltaire" title="Boulevard Voltaire">Boulevard Voltaire</a></li>
</ul>
</div>
<div class="mw-category-group">
<h3>Z</h3>
<ul>
<li><a href="/wiki/Boulevard_de_la_Zone" title="Boulevard de la Zone">Boulevard de la Zone</a></li>
</ul>
</div>
</div>
</div>
<script src="app.js" type="text/javascript"></script>
</body>

</html>

+ 2
- 2
src/Main.purs View File

@@ -2,8 +2,8 @@ module Main where

import Prelude
import Effect (Effect)
import Effect.Console (log)
import Effect.Console (logShow)

main :: Effect Unit
main = do
log "Hello sailor!"
logShow ""

Loading…
Cancel
Save