Last active
April 24, 2020 11:07
-
-
Save juvuorin/775b4e091ed85478b2bcecd979c9a5d6 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
/** | |
* Ryhmittelee yhden koiran arvoasanat. | |
* | |
* @param {object[]} dogGrades | |
*/ | |
export const groupGrades = (dogGrades) => { | |
return Object.entries(dogGrades.reduce((aggregate, currentElement) => { | |
const categoryIdentifier = subjects.find(subject => { | |
return subject.name === currentElement.name | |
}).category; | |
if (aggregate[categoryIdentifier]) { | |
aggregate[categoryIdentifier] += currentElement.value; | |
} else { | |
aggregate[categoryIdentifier] = currentElement.value; | |
} | |
return aggregate; | |
}, {})).map(([key, value]) => { | |
return { | |
name: Object.keys(categories)[Object.values(categories).indexOf(+key)], | |
value: value, | |
} | |
}) | |
} | |
/** | |
* Kouluaineet | |
*/ | |
const subjects = [ | |
{name: `Pupun jäljestys`, category: 1}, | |
{name: `Hirven jäljestys`, category: 1}, | |
{name: `Linnun noutaminen`, category: 1}, | |
{name: `Lumen pöllyytys`, category: 2}, | |
{name: `Kukkapenkkien kaivaminen`, category: 2}, | |
{name: `Parvekkeen vahtiminen`, category: 3}, | |
{name: `Piilotetun luun löytäminen`, category: 3}, | |
{name: `Oman hännän jahtaaminen`, category: 3}, | |
{name: `Kuun ulvonta`, category: 3}, | |
] | |
/** | |
* Aineryhmät | |
*/ | |
const categories = { | |
'Metsästys': 1, | |
'Pihatyöt': 2, | |
'Muut': 3, | |
} | |
import { groupGrades } from './koirakoulu.js'; | |
import assert from 'assert'; | |
const test = () => { | |
const selmaGrades = [ | |
{ name: `Pupun jäljestys`, value: 10 }, | |
{ name: `Hirven jäljestys`, value: 9 }, | |
{ name: `Linnun noutaminen`, value: 9 }, | |
{ name: `Lumen pöllyytys`, value: 10 }, | |
{ name: `Kukkapenkkien kaivaminen`, value: 8 }, | |
{ name: `Parvekkeen vahtiminen`, value: 10 }, | |
{ name: `Piilotetun luun löytäminen`, value: 6 }, | |
{ name: `Oman hännän jahtaaminen`, value: 10 }, | |
{ name: `Kuun ulvonta`, value: 7 }, | |
] | |
const expectedGrouping = [ | |
{ name: 'Metsästys', value: 28 }, | |
{ name: 'Pihatyöt', value: 18 }, | |
{ name: 'Muut', value: 33 }, | |
] | |
const groupedGrades = groupGrades(selmaGrades); | |
assert.deepEqual(groupedGrades, expectedGrouping, `Grade grouping mismatch`); | |
console.log(groupedGrades); | |
} | |
test(); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Tässä työssä on tiettyä näppäryyttä ja hauskaa, että on käytettyä assertteja yksikkötestauksessa ja että ylipäänsä on tehty yksinkertainen testi, jolla logiikkaa koeponnistetaan - hyvä, että ohjelman oikeellisuuteen on kiinnitetty huomiota!
Tehtävän tekijä on huomannut, että reduce-funktio istuu ratkaisuksi hyvin, sillä ongelman ratkaisussa on ajatuksena tiedon tiivistäminen - sellaisiin tilanteisiin reduce on usein paras valinta.
Tekijä hallitsee myös import ja export avainsanojen käytön sekä osaa osittaa koodia eri tiedostoihin (modulointi). Lisäksi tekijältä sujuu hyvin javaScript-objektien käsittely (entries, values jne.).
Tsemppiä ohjelmointihommiin!