Skip to content

Instantly share code, notes, and snippets.

@juvuorin
Last active April 24, 2020 11:07
Show Gist options
  • Save juvuorin/775b4e091ed85478b2bcecd979c9a5d6 to your computer and use it in GitHub Desktop.
Save juvuorin/775b4e091ed85478b2bcecd979c9a5d6 to your computer and use it in GitHub Desktop.
koiramainenOhjelmointikisa2020
/**
* 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();
@juvuorin
Copy link
Author

juvuorin commented Apr 23, 2020

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment