Skip to content

Instantly share code, notes, and snippets.

@juvuorin
juvuorin / kide.py
Last active April 24, 2020 11:08
koiramainenOhjelmointikisa2020
# 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
@juvuorin
juvuorin / anttih.js
Last active April 24, 2020 11:07
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;
@juvuorin
juvuorin / aleksip.js
Last active March 21, 2021 09:40
koiramainenOhjelmointikisa2020
/*
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.
@juvuorin
juvuorin / anttis.py
Last active April 24, 2020 11:06
koiramainenOhjelmointikisa2020
# 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,
@juvuorin
juvuorin / ollir.hs
Last active April 24, 2020 11:06
koiramainenOhjelmointikisa2020
{-
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.
@juvuorin
juvuorin / rikuk.jsx
Last active April 24, 2020 15:42
koiramainenOhjelmointikisa2020
// 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ä.
@juvuorin
juvuorin / samuk.py
Last active April 24, 2020 11:06
koiramainenOhjelmointikisa2020
#!/usr/bin/env python3
from functools import reduce
from sys import exit
# @author Samu Kumpulainen
# This is a really simple command-line program for managing the dog school
# diplomas. Grades can be inputted as well as printed.
grades = list(range(4, 11))
student_data = {}
@juvuorin
juvuorin / seppos.js
Last active April 24, 2020 11:03
koiramainenOhjelmointikisa2020
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",
@juvuorin
juvuorin / tiinah.py
Last active April 24, 2020 11:05
koiramainenOhjelmointikisa2020
import datetime
# muutetaan nimi TIKKUKIRJAIMIKSI, jottei todistuksessa näkyisi esim. käyttäjän virheellisesti syöttämää pientä alkukirjainta
nimi = input("Anna koiran nimi: ").upper()
# mietinnässä oli myös yksi ainoa while loop, jossa metodit määräytyisivät käyttäjän syötteen perusteella (esim. jos
# syötteessä "lisää", lisätään oppiaine, arvosana, ja splitataan esim. pilkulla, tehdään listaa jne.). Toteutustavaksi
# valikoitui kuitenkin jokaiselle oppiaineelle omat eksplisiittiset loopit, jotta käyttäjävirheiltä vältyttäisiin
# (unohtaa merkitä jonkin oppiaineen, kirjoittaa väärin yms.)
@juvuorin
juvuorin / villes.py
Last active March 8, 2021 09:01
koiramainenOhjelmointikisa2020
# Kirjoita tähän koirasi nimi heittomerkkien sisään
''' Luodaan koiran nimen sisältävä muuttuja '''
koira = 'Selma'
# Merkitse alle koirasi saamat arvosanat
''' Kun arvosanat lasketaan yhteen, varmistetaan niiden tallentuminen
kokonaislukuina lisäämällä laskettavat muuttujat
int()-komennon sisään. Desimaalierottimena Pythonissa
toimii piste. Esim. 9.0. Luvut pyöristetään alaspäin, jolloin int(9.7) => 9.