• Hyppää ensisijaiseen valikkoon
  • Hyppää pääsisältöön
Solidabis

Solidabis

Toteutamme sen minkä asiakkaamme tarvitsee.

  • Etusivu
  • Palvelut
    • Kaikki palvelut
    • Ohjelmistokehitys
    • Design
    • Prosessikehitys
  • Ajankohtaista
    • Kaikki uutiset
    • Asiakastarinat
    • Ihmiset
    • Blogit
  • Me
  • Töihin
  • Yhteystiedot
  • Koodihaaste
Etusivu › Ajankohtaista › Kevään reittiopas-teemainen koodihaaste ratkaistu – tutustu voittajaratkaisuun!

Kevään reittiopas-teemainen koodihaaste ratkaistu – tutustu voittajaratkaisuun!

26/05/2020

Koodihaaste Solidabis

Heti kärkeen suuri kiitos kaikille 46 osallistujalle! Koodihaasteen raati kävi jokaisen työn läpi, ja parhaimpiin suorituksiin oli suorastaan tungosta. Voittajien valinta ei siis ollut tälläkään kertaa helppo tehtävä. Lopullinen voittaja valittiin Solidabiksen sisäisellä äänestyksellä – kansa on siis puhunut!

On ilo nähdä, että kisa innostaa koodareita osallistumaan. Seuraavat palautteet kielivät siitä, että koodihaasteen parissa viihdyttiin monipuolisesti:

  • ”Koodihaaste oli tosi hauska tehdä!” 
  • “Haluan kiittää hauskasta tehtävästä, oli mielenkiintoista hypätä pois mukavuusalueelta ja opiskella uusia teknologioita tällaisen pikkuprojektin parissa.” 
  • ”Suuri kiitos erinomaisen mukavasta pääsiäisen ajan aikasyöpöstä!” 
  • ”Kiitos mielenkiintoisesta haasteesta, vaikka en kilpailussa pärjäisikään, niin opin ainakin paljon uusia jippoja ja tekniikoita luodessani ratkaisuani.” 
Koodihaasteen voittajat

Koodihaasteen ja 300 € Verkkokauppa.com lahjakortin voittajaksi valittiin Pekka Turtola (Vantaa), onneksi olkoon! Pekan voittajatyöhön pääsee tutustumaan täällä.

Kaksi muuta kärkityötä palauttivat Joska Kallatsa (Järvenpää) sekä Aleksi Leino (Espoo). Molemmat palkitaan 100 € Verkkokauppa.com-lahjakorteilla. Paljon onnea!

Lisäksi arvoimme kaikkien osallistujien kesken yhden 100€ lahjakortin Verkkokauppa.comiin sekä neljä kahden Finnkino-superlipun pakettia. Arvonnan voitot jakautuivat seuraavasti.

Verkkokauppa.comin 100€ lahjakortti:

  • Otso, Helsinki

2 x Finnkinon Superliput:

  • Vili, Raisio
  • Kaarlo, Helsinki
  • Tuomo, Jyväskylä
  • Erik, Vantaa

Tarjosimme 2 x Finnkinon superliput voittaneille mahdollisuuden vaihtaa palkinnon 25€ Verkkokauppa.comin lahjakorttiin Finnkinojen ollessa koronaviruksen vuoksi toistaiseksi suljettuina.

Kiitos kaikille osallistujille ja onnea voittajille!

Mistä koodihaasteessa oli kyse? 

Koodihaasteen aiheena oli tällä kertaa reittioppaan toteuttaminen, eli annetun materiaalin pohjalta lyhyimmän reitin etsiminen matkustajalle. Aineisto koostuu tieverkostosta sekä bussireiteistä, jotka kulkevat teitä pitkin. Tehtävänä oli toteuttaa käyttöliittymä, jonka avulla käyttäjä pystyy selvittämään parhaan reitin paikasta toiseen. Varsin tuttu konsepti siis ainakin julkisen liikenteen hyödyntäjille! 

Suurin osa osallistuneista suoritti varsinaisen reittihaun oikein. Virheitä sattui esimerkiksi, jos ratkaisussa ei huomioitu kulkuvälineen vaihtojen minimointia tai ettei kaikkia teitä pitkin kulkenut bussilinjaa. Toteutuksia testattiin myös suuremmalla aineistolla, sillä skaalautuvuus oli myös arvioitava osa-alue. Reittioppaan tuli esittää tulokset käyttöliittymässä, jonka toteutus painoi myös arvostelussa. Näimmekin myös visuaalisesti erittäin hienoja palautuksia, joissa oli hyödynnetty listauksia, animointia ja karttagraafeja. Arviossa painotettiin koodin selkeyttä, laatua, käyttöliittymän toimivuutta, ulkoasua ja reittihaun tuloksen oikeellisuutta. Parhailla töillä nämä kaikki osa-alueet olivat hallussa, mikä teki voittajan valinnasta haastavaa. 

Koodihaasteen voittaja
Kuva: Voittajaratkaisu (Pekka Turtola)

Kisaan oli mahdollista osallistua valitsemillaan työkaluilla. Teknologiat ovat listattuna alla olevassa taulukossa. Suosituimpia olivat siis React, JavaScript, Python ja Angular, mutta ratkaisuissa nähtiin myös Vue, .Net, Unity, Java (Spring Boot), Clojure, React Native sekä PHP & SQL.

Teknologioita: React, JavaScript, Python, Angular, Vue, .Net, Unity, Java (Spring Boot), Clojure, React Native ja PHP & SQL
Kuva: Koodihaasteratkaisuissa käytetyt teknologiat

Vapaasti valittavalla teknologialla haluttiin antaa mahdollisuus käyttää ominta tapaa haasteen toteuttamiseen – olikin mukava nähdä erilaisia ratkaisuja. Teknologiassa olikin odotetusti enemmän kirjavuutta kuin reitin ratkaisun algoritmissa. Teknologiavalinnan kannalta erityisesti esiin nousi Mauri Salbergin tietokantaa hyödyntävä ratkaisu. Mauri on tehnyt koodihaasteen ratkaisuprosessista loistavan YouTube-videosarjan, jossa hän käy läpi haasteen aina toimeksiannon analysoimisesta lopulliseen ratkaisuun. 

Ratkaisuja lyhyimmän reitin löytämiseen 

Lyhyimmän reitin ratkaiseminen on vanha pulma, jonka ratkaisemiseen on olemassa useita hyväksi havaittuja tapoja. Pyörää ei siis kannata keksiä uudestaan ja ongelmanratkaisu on hyvä aloittaa tiedonhaulla. Lyhyimmän reitin ongelmassa törmää ainakin seuraaviin vaihtoehtoihin, jotka kaikki olivat edustettuna kisassa. Kaikissa on omat etunsa ja myös karttaverkoston muoto vaikuttaa valitun ratkaisun tehokkuuteen: 

Dijkstran algoritmi on keksitty 1956 ja se on suosituin käytetty ratkaisu lyhyimmän reitin löytämiseen. Kyseessä on ahne algoritmi, joka käsittelee aina lyhyintä tunnettua polkua, kunnes löytää halutun määränpään. 

Bellman-Ford laskee reitin kaikkiin mahdollisiin loppupisteisiin. Tapa on hitaampi kuin Dijkstra, mutta mahdollistaa myös negatiivisten yhteyksien huomioisen. Reittioppaassa tämä ei ole kuitenkaan tarpeellista, sillä minkään reitin kulkeminen ei siirrä aikaa taaksepäin. Tilanne olisi eri, jos matka-ajan sijasta nodejen väliset arvot olisivat rahaa, ja kartalla kulkisi taksikuski. Tällöin olisi tarvetta käsitellä myös negatiivisia polkuja siinä yhteydessä, kun ketään ei olisi kyydissä ja kulkemisesta seuraavan asiakkaan luokse muodostuu bensakuluja. 

Floyd Warshall on algoritmi, joka tuottaa etäisyysmatriisin jokaisesta reitin pysäkistä toiseen. Etuna tällä lähestymisellä on, että kun kaikki reitit on kerran laskettu, niin ne voidaan hakea valmiiksi lasketusta matriisista tehokkaasti käyttäjälle, eikä reittiä lasketa joka kerta uudelleen käyttäjän kyselyn yhteydessä. Kaikkien mahdollisten reittien laskemiseen menee vaihtokauppana enemmän aikaa. 

Koodihaasteen ratkaisu
Kuva: Toinen sija (Joska Kallatsa) (vasemmalla) ja kolmas sija (Aleksi Leino) (oikealla)

Algoritmien toteuttamisen lisäksi tehtävässä oli oleellista huomioida myös rajoitteet, eli linjastoa pitkin kulkevat reitit ja vaihtojen minimointi. Vaikka datan käsittely tarvittavaan muotoon ja algoritmin implementointi on jo hyvä suoritus, niin nämä toimivat lisähaasteina tehtävässä. Mikään ratkaisutapa koodihaasteessa ei ollut oikea tai väärä, vaan riitti, että reittihaun tulokset ovat oikein ja toteutus tehokas. 

Retrospektiivi, eli katsaus koodihaasteen toteutukseen 

Koodihaasteen päätyttyä katselmoidaan taas hieman lähimenneisyyteen, eli mitä tunnelmia koodihaasteen toteuttamisesta heräsi ja minkälaisia oppeja tästä jäi mieleen. 

Tekniikat koodihaasteessa olivat jälleen osallistujien vapaasti valittavia kuten edellisessäkin koodihaasteessa, jossa selvitettiin kryptattuja sanoja. Valinnanvapauden tarkoituksena oli helpottaa osallistumisen kynnystä ja olla rajaamatta osallistujia tätä kautta pois. Tässä onnistuttiinkin osallistumisten perusteella hyvin. Arvosteluun tämän tiedettiin tuovat lisähaastetta, sillä suora vertaaminen ei ole täysin mahdollista. Hyvät koodauskäytännöt ovat kuitenkin hyvin universaaleja, ja näiltä osin arviointia pystyttiin tekemään onnistuneesti. Yksi hyvä perusteos aiheesta kiinnostuneille on Clean Code, jonka on kirjoittanut Robert C. Martin. Netistä Clean Codesta löytyy tiivistelmiä (esimerkiksi tämä), joista näkee nopeasti mihin asioihin koodin laadussa kannattaa kiinnittää huomiota. 

Suurin osa palautetuista töistä suoritti reitin etsimisen oikein, joten tällä tuloksessa ratkaisevaa eroa kisaajien kesken ei pystytty tuottamaan. Toimeksiannossa arviointikriteerinä oli myös käyttöliittymän selkeys ja laatu ja tällä kertaa siinä nähtiinkin suurimmat erot töiden välillä. Käyttöliittymän puolella arvostettiin erityisesti selkeyttä ja helppoa käytettävyyttä, sekä teknisiä ratkaisuja kuten kartan visualisointia ja mobiilin huomiointia. 

Yksi harkittava vaihtoehto tulevaisuutta ajatellen olisikin tehtävän suunnittelu niin, että pääpaino haasteen voittajan valinnassa olisi optimaalisimman tuloksen tuottaminen. Tätä varten tulisikin kehittää haaste erilaisella kulmalla, jossa oli selkeämpi “oikea vastaus”, jota kohti tulisi pyrkiä. Olemme halunneet kuitenkin kurkata myös kirjoitettua koodia ja antaa sille painoarvoa töiden arvioinnissa. 

Tsekkaa avoimet työpaikkamme, tai tutustu lisää Solidabikseen.

Solidabiksen Koodihaaste palaa vielä tänä vuonna. Seuraa meitä someissa @Solidabis, niin saat tietää tulevista haasteista. Kiitos vielä kerran kaikille osallistujille! 

Katso myös viime vuoden koodihaasteeseen liittyvät postaukset:

  • Full-Stack Devaaja Vellu voitti koodihaasteen
  • Koodihaastekatsaus, osa 1: Voittajat ja yleiskatsaus
  • Koodihaastekatsaus, osa 2: ratkaisutavat ja jälkilöylyt

Kirjoittaja Veli-Pekka Nurmi, tuttavallisemmin Vellu, toimii Solidabiksella ohjelmistokehittäjänä. Devauskokemuksen lisäksi Vellulla on usean vuoden kokemus tulospohjaisesta markkinoinnista ja analytiikasta erityisesti digitaalisissa kanavissa. Monipuolisen kokemuksen ansiosta Vellu pystyy samaistumaan myös loppukäyttäjien sielunelämään ja liiketoiminnan vaatimuksiin, josta on usein apua teknisiä ratkaisuja sorvatessa. Vellu osallistui Solidabiksen viime vuoden koodihaasteeseen, ja nappasi pääpalkinnon lisäksi työpaikan Solidabikselta – viimeisimmässä koodihaasteessa Vellu pääsikin toimimaan päävastuuhenkilönä.  

Yhteydenottolomake

  • Kenttä on validointitarkoituksiin ja tulee jättää koskemattomaksi.

Kategoriassa: Ajankohtaista

Solidabis

part of

twoday
  • Tietosuojaseloste
Sivut
  • Etusivu
  • Palvelut
  • Ajankohtaista
  • Me
  • Töihin
  • Yhteystiedot
Osoitteet
  • Keskuskatu 3 00100, Helsinki
  • Aurakatu 8
    20100, Turku
  • Kirkkokatu 13 A 90100, Oulu
Somet
Solidabis Solutions Oy | © 2023
This website uses cookies to improve your experience. AcceptReject Cookie policy
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Always Enabled

Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

Non-necessary

Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.

SAVE & ACCEPT