Last active
April 24, 2020 11:03
-
-
Save juvuorin/b705bc1e7708fe005375b67e6619e3f1 to your computer and use it in GitHub Desktop.
koiramainenOhjelmointikisa2020
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const _ = require("lodash/fp"); | |
const toFunc = _.curry((obj, def, value) => | |
obj.hasOwnProperty(value) ? obj[value] : def | |
); | |
const subjectToCategory = toFunc({ | |
"Pupun jäljestys": "Metsästys", | |
"Hirven jäljestys": "Metsästys", | |
"Linnun noutaminen": "Metsästys", | |
"Lumen pöllyytys": "Pihatyöt", | |
"Kukkapenkkien kaivaminen": "Pihatyöt" | |
}, "Muut"); | |
const groupAndSum = _.pipe( | |
_.toPairs, | |
_.map(([subject, grade]) => ( | |
[ subjectToCategory(subject), grade ] | |
)), | |
_.groupBy(0), | |
_.mapValues(_.sumBy(1)) | |
); | |
console.log( | |
groupAndSum({ | |
"Pupun jäljestys": 10, | |
"Hirven jäljestys": 10, | |
"Linnun noutaminen": 10, | |
"Lumen pöllyytys": 10, | |
"Kukkapenkkien kaivaminen": 10, | |
"Parvekkeen vahtiminen": 10, | |
"Piilotetun luun löytäminen": 10, | |
"Oman hännän jahtaaminen": 10, | |
"Kuun ulvonta": 10 | |
}) | |
); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Tässä on erittäin hyvä ratkaisu ongelmaan. Tehtävässä on ollut kysymys tiedonkäsittelyongelmasta ja tässä on siihen hyvä ratkaisu. Työssä ei ole otettu kantaa tiedon syöttöön (input, read) tai tulostukseen (output, print), vaan on ratkaistu tiedonkäsittelyongelma sellaisenaan. Lodash-kirjaston avulla on kuitenkin päästy varsin luettavaan ratkaisuun, jonka pihvinä on groupAndSum-funktio, joka yhdistää kategorioiden määrittelyn koiran todistukseen.
Ratkaisu edellyttää hyvää JavaScript-ohjelmointitaitoa sekä käsitystä tiedonkäsittelysuunnitelman laatimisesta kuvaamalla ongelman ratkaisu sellaisenaan, mistä esimerkkinä on datan putkitus (pipe) ja käsittelytoimien määrittäminen käsittelysekvenssinä for-looppien tai vastaavien konstruktien sijaan. Tästä ei ole pitkä matka käyttämään puhdasta funktionaalista kieltä, jos intoa on.
Mahtavaa, että kisaan tuli myös lodash-versio!
Tsemppiä ohjelmointihommiin!