Skip to content

Instantly share code, notes, and snippets.

@juvuorin
Last active April 24, 2020 11:08
Show Gist options
  • Save juvuorin/e35c2b7bb2d57db6b2ee35e4f8b0aa78 to your computer and use it in GitHub Desktop.
Save juvuorin/e35c2b7bb2d57db6b2ee35e4f8b0aa78 to your computer and use it in GitHub Desktop.
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
# lambda-funktiolle helpomman parametrien vaihtelun vuoksi.
#
# Ohjelman parametrit annetaan rivin lopussa olevana listana, ja on pakotettu tehtävänannossa annettuun järjestykseen.
# Mitä syvimmät pahoittelut kaikille, jotka joutuvat koodiani analysoimaan.
(lambda arvosanat: print("Metsästys: {0}\nPihatyöt: {1}\nMuut: {2}".format(*(lambda pisteet,tulokset: [i for i in pisteet] if [pisteet.__setitem__(0, pisteet[0] + int(kouluaine.split(":")[-1]))if kouluaine.split(":")[0].lower().strip() in {"pupun jäljestys", "hirven jäljestys", "linnun noutaminen"} else pisteet.__setitem__(1, pisteet[1] + int(kouluaine.split(":")[-1])) if kouluaine.split(":")[0].lower().strip() in {"kukkapenkkien kaivaminen", "lumen pöllyytys"} else pisteet.__setitem__(2, pisteet[2] + int(kouluaine.split(":")[-1])) for kouluaine in tulokset.split(",")] else "Juankoski, here I come!")([0, 0, 0], "Pupun jäljestys:{0}, Hirven jäljestys:{1}, Linnun noutaminen:{2},Lumen pöllyytys:{3}, Kukkapenkkien kaivaminen:{4}, Parvekkeen vahtiminen:{5}, Piilotetun luun löytäminen:{6}, Oman hännän jahtaaminen:{7}, Kuun ulvonta:{8}".format(*arvosanat)))))([10, 10, 8, 9, 9, 7, 7, 10, 9])
@juvuorin
Copy link
Author

juvuorin commented Apr 23, 2020

Tämä ohjelma on erinomainen esimerkki siitä, miten vaikealukuiseksi voi ohjelmakoodin kirjoittaa. Kuten työn tekijä toteaakin, työssä on käytetty vaikealukuisia ja epäkäytännöllisiä ratkaisuja ja se on erinomainen esimerkki siitä, miten "kätevillä" ohjelmointikielen käsitteillä voi ampua itseään sekä päähän että jalkaan samaan aikaan.

Juicen kappaleen "Juankoski here I come" käyttäminen else-haarassa, johon ei koskaan tulla on humoristin valinta ja se kuvastaa juicemaista monitulkintaisuutta, joka on näppärän saumattomasti yhdistetty tietojenkäsittelyn maailmaan pyytämättä ja yllättäen.

Tästä kannattaa jokaisen Python-ohjelmoijan ottaa sekä oppia että "oppia".

Tsemppiä ohjelmointihommiin ja pidähän kiinni hauskoista else-haaroista jatkossakin!

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