This file contains 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
// Ideal Learning Oy:n käyttöön tarkoitettu esimerkkikoodi. Koodin on tuottanut Riku K | |
// Haluan tuoda esimerkkiratkaisullani esiin modulaarisen ja geneerisen koodin merkityksen. | |
// Kategoriat ja kouluaineet voivat ajan saatossa muuttua, kuten sekin, mikä kouluaine kuuluu mihinkin kategoriaan. | |
// Siispä ohjelmakoodin on hyvä välttää ottamasta kantaa lähdearvoihin silloin kuin se on mahdollista. | |
// Geneerisyys monimutkaistaa koodia hieman, mutta tekee kokonaisuudesta helpommin ylläpidettävän. | |
// Tosielämän ratkaisussa kouluaineet ja kategoriat olisiviat omia olioitaan, jolloin niiden välillä voisi helposti olla suora linkki. | |
// Tätä esimerkkiä varten päädyin kuitenkin yksinkertaistettuun tietorakenteeseen, jotta esimerkki pysyy mahdollisimman selkeänä. |
This file contains 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
{- | |
Sekalaisia huomioita: | |
1. Ohjelma käyttää merkkijonojen käsittelyyn Text-tyyppiä (Data.Text) Stringien sijaan. | |
Näin pienessä ohjelmassa String olisi mennyt ihan ok, mutta en ollut ennen käyttänyt | |
Text-tyyppiä, joten päätin kokeilla. | |
This file contains 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
# Tässä kysytään oppilaan nimi | |
oppilas = input("Oppilaan nimi: ") | |
# Eri oppiaineet on tallennettu sisäkkäisiin sanakirjoihin, koska se mahdollisti helpon tavan tallentaa | |
# oppiaineet arvosanoineen kategorioihin selkeästi nimettyinä. Pääsanakirjan avaimet ovat siis kategorioiden nimet, | |
# joiden arvot ovat sanakirjoja, joissa avaimina ovat yksittäiset oppiaineet ja arvoina arvosanat. Arvosanat | |
# alustetaan arvolla 0. | |
oppiaineet = {"metsästys": {"pupun jäljestys": 0, "hirven jäljestys": 0, "linnun noutaminen": 0}, | |
"pihatyöt" : {"lumen pöllytys": 0, "kukkapenkkien kaivaminen": 0}, | |
"muut" : {"parvekkeen vahtiminen": 0, "piilotetun luun löytäminen": 0, "oman hännän jahtaaminen": 0, |
This file contains 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
/* | |
Ohjelma on toteutettu ajettavaksi terminalissa. Sen voi ajaa node.js:llä komennolla 'node kisa.js' | |
Ohjelma on suunniteltu niin, että se lukee sisään kerrallaan vain yhden oppilaan nimen ja arvosanat ja tulostaa oppilaalle todistuksen. | |
Aineet on listattu oliotaulukkoon ja selkeyden vuoksi toteutin sen niin, että vaikka kategoriat on listattu omaan taulukkoonsa, niin ne | |
näkyvät myös selkokielisinä aineet-taulukon olioissa. Tämä myös mahdollistaa helpomman muokattavuuden ja lisäyksen tietoihin. | |
Juurikin tietojen helpon lukemisen vuoksi päädyin valitsemaan oliotaulukon sen sijaan, että olisin laittainut kaikki yksittäiset tiedot omiin taulukkoihinsa. | |
Pyrin välttämään tehtävässä välttämään for-looppeja ja käyttämään sen sijaan mm. filter, map ja forEach -funktioita, jotta koodi pysyy selkeämpänä ja | |
koodin määrä vähenee. Tämä myös helpottaa debuggausta, jos sovellusta vielä tästä laajentaisi. |
This file contains 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; |
This file contains 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
# Alla oleva koodirivi on yhden rivin python-toteutus Ideal Learningin koiramaiseen ohjelmointikisaan, ja on siinä on | |
# tarkoituksella valittu epäkäytännöllisiä ja jokseenkin vaikealukuisia ratkaisuja. Ohjelma on tehty yhdelle riville | |
# ilman yhtään puolipistettä juuri siksi, että pythonin luontainen sisennysten käyttö on haluttu ottaa ohjelmassa | |
# haasteeksi. Se hyödyntää pythonin lambda-funktioita, list comprehensioneita ja muutamia muita tavanomaisesta | |
# poikkeavia ratkaisuita, sekä Juicen upeaa kappaletta else-haarana, johon ei koskaan päädytä. Myös lambda-rekursio oli | |
# vaihtoehtona, mutta sen lukeminen on vielä keljumpaa. | |
# | |
# Ohjelma rakennettiin järkevästä funktiosta, joka laski pisteet todistuksen perusteella, minkä jälkeen refaktoroin | |
# koodin hyödyntämään list comprehensioneja pisteiden laskua varten, ja lopuksi vielä siirsin kaiken toiminnallisuuden | |
# yhden lambda-funktion sisään. Viimeisenä muunnoksena siirsin arvosanat omaksi parametrikseen ulommalle |
NewerOlder