Olisiko nyt hyvä hetki laittaa ideoita uutta kisaa varten? Viime vuoden poimintapeli oli erinomainen kilpailu, johon saatiin runsaasti osallistujia! Saadaanko kisa aikaan tänäkin vuonna?
Kyllä varmaan jokin kisa tulee taas.
Juuri viime päivinä olen tehnyt keväällä ehdotettuja parannuksia: kilpailun apuohjelma KilpailuProxy tukee useaa ohelmaa kerralla ja myös tiedostojen käsittelyä, joten pienellä lisäkehityksellä seuraavassa kisassa voisi ajaa testaussivulla koko turnauksen.
Mielenkiintoisia ehdotuksia kisan aiheeksi on jo ennestään monta. Eniten kisaa saa edistettyä, jos esittää idean lisäksi konkreettisen suunnitelman säännöistä, pistelaskusta ja turnauksen kulusta. Aiheen pitää olla tarpeeksi vaikea, jotta parasta ratkaisua ei voi tehdä helposti, mutta tarpeeksi helppo, jotta mahdollisimman moni pystyisi osallistumaan.
Tehdään kilpailu siitä, kuka ratkaisee eniten taikaneliöitä. 3, 4, 5, 6, jne. Prosessointiaika voisi olla yksi tunti tai ainakin vartti.
Mielestäni taikaneliöt ovat liian puhtaasti matemaattinen ongelma tällaiseen kilpailuun. Taikaneliöistä voi varmasti tehdä monenlaisia algoritmitehtäviä (esim. Taikaneliöluettelo), ja tuollainen tehtävä voisi olla osana jotain algoritmikilpailua. Toisaalta taikaneliöistä on paljon valmista tietoa, ihan jo Wikipediasta löytyy algoritmeja erikokoisten taikaneliöiden generointiin. Aihe ei vaikuta realistiselta tällaisessa eritasoisten koodareiden hupikilpailussa.
Kilpailuaiheen olisi syytä olla sellainen, että vähintään kaksi ohjelmaa voi kilpailla suoraan keskenään. Esimerkiksi jonkin vähemmän tunnetun lautapelin tekoäly sopii hyvin aiheeksi. Yksilösuoritus tulee kyseeseen vain, jos tehtävänä on jonkinlainen luova työ kuten säveltäminen tai piirtäminen.
Harmi, kun tuo taikaneliöluettelo on mennyt ohi. Itse pääsin sataan inhimillisessä ajassa.
Kyllähän Putkapostiin voi lähettää vastauksia yhä edelleenkin.
Kuten sanoin, taikaneliöiden laskemiseen tunnetaan tehokkaita algoritmeja. Esimerkiksi neljällä jaollisen taikaneliön ruutuja voi laskea vaikka yksitellen lyhyellä kaavalla, jolloin 1000×1000-neliön saa noin sekunnissa jopa Pythonilla puhumattakaan C:stä.
#!/usr/bin/python3 def taikanelion_ruutu(n, x, y): assert(n % 4 == 0) return ((((x ^ y) + 1) & 2) >> 1) * (n * n - 2 * (y * n + x) - 1) + y * n + x + 1
Eli jos taikaneliön laskemisessa tulos ”inhimillisessä ajassa” jää sataan, ...
Ehkä tämä riittää taikaneliöistä, ja voidaan palata asiaan eli kisaan.
Tuli ajatus mahdollisesta pelistä, jota ehkä voisi jalostaa eteenpäin (idea Civilization -pelistä).
Pelaajat lähtevät peliruudukon (esim 25x25 ruutua) nurkista ja viimeisenä hengissä selviytynyt on voittaja. Yksi vuoro sisältää esim. 2 toimenpidettä (liike tai potkaisu viereiseen ruutuun, jousipyssyammunta tai ensiapu).
Kentältä on mahdollista poimia kypärä ja jousipyssy. Jousipyssyllä voi ampua 3 ruudun päähän kuolettavasti. Jos on kypärä päässä, pitää saada kaksinkertainen isku, ennenkuin kuolee. Normaalisti vaaditaan esim. 2-4 potkua ennenkuin kuolee. Ensiavussa vointi paranee esim. 10% yhden toimenpiteen aikana.
Toinen samantapainen peli voisi olla esim. pullansyöntikilpailu. Pelaajat lähtevät pelialueen nurkista, jokaisella 10 pullaa pussissa. Pullat pitää syödä itse tai syöttää toisille. Jos tulee ruutuun, jonka viereisessä ruudussa on toinen kilpailija, hänelle voi tarjota pullan, eikä hän saa kieltäytyä syömästä sitä. Se voittaa, joka syö vähiten pullia. Aina, kun syö pullan, saa siitä energiaa kulkea pidemmän matkan seuraavalla vuorolla (tai säästää askeleet sopivaan hetkeen). Jos on saanut pullan toiselta kilpailijalta, niin hänelle ei voi tarjota pullaa seuraavalla vuorolla.
Vielä yksi lautapeliajatus: jokaisen pelaajan päämaja sijaitsee lähellä nurkkaa (1-3 ruudun etäisyydellä). Päämajasta ilmestyy päämajan viereisiin ruutuihin aina vuoron alussa oma pelinappula, jos ruutu on tyhjä. Jokaisella vuorolla voi liikuttaa kahta eri nappulaa yhden askeleen tai syödä vastustajan nappulan ja liikuttaa toista nappulaa yhden askeleen. Syöminen voi tapahtua yhden tai kahden ruudun päähän menemällä ruutuun, jossa vastustajan nappula sijaitsee. Tällöin oma nappula jää laudalle ja vastustajan nappula poistetaan laudalta. Tällöin ensimmäinen oma nappula voi liikkua siis kahden askeleen päähän.
Päämäärä on valloittaa vastustajan päämaja saattamalla oma nappula vastapelaajan päämajaan. Tämä voidaan tehdä esim. kahden askeleen siirrolla. Tällöin vastustajan kaikki nappulat poistetaan laudalta ja hänen pelinsä loppuu tähän. Pelin voittaa henkilö, joka jää viimeisenä laudalle.
Näiden yksinkertaistettujen shakkien sijaan mielenkiintoisempaa voisi olla jokin rajoitettuun informaatioon perustuva ja mahdollisesti yhteistyötä edellyttävä peli. En yritäkään säveltää sääntöjä tähän, mutta siis tällainen konsepti.
Sopisiko Quoridor peli-ideaksi? Pelilaudalla on 2 tai 4 pelaajaa, jotka yrittävät päästä laudan toiselle reunalle. Oman vuoron aikana saa joko rakentaa esteitä muiden kiusaksi tai siirtyä vapaaseen ruutuun. Jokaisella on alussa saman verran esteitä, joista voi rakentaa esteitä muiden tielle. Missään vaiheessa esteet eivät saa tukkia kenekään reittiä lopullisesti, eli aina pitää olla mahdollisuus päästä etenemään kohti vastareunaa.
Sanapelistä saisi myös tehtyä kisan, mutta meneekö liian vaikeaksi?
Laudalla on kirjaimia kirjain piilotettuna. Näitä voi poimia omaan käyttöön kulkemalla lautaa pitkin aina askeleen yhdellä vuorolla. Kirjaimista pitää muodostaa sanalistalla olevia sanoja, pidemmistä sanoista saa enemmän pisteitä kuin lyhyistä, esim (pituus-3) x 5. Kuka pääsee ensin esim. 100 pisteeseen, voittaa kisan ja peli loppuu. Käyttämättömistä kirjaimista vähennetään 5 pistettä / kirjain kunkin loppupisteistä. Jokaisella voisi olla käytettävissä pelin alussa esim. kaksi vapaasti valittavaa kirjainta. Mahdollisesti kierros pelataan aina loppuun, että kaikilla on yhtä monta vuoroa käytettävänään.
Jospa sanapelissä laudalle ilmaantuisi kirjaimia poimittavaksi ja kirjaimen kohdalla äly saisi päättää ottaako kirjaimen vai jättääkö sen paikalleen. Kirjaimen saa lisätä vain joko tyhjään tietorakenteeseen tai aiemmin lisättyjen merkkien perään. Kirjainten järjetystä ei saa muokata, vaan sanat tulee koota kirjain kerrallaan.
Vielä yksi ajatus jalostettavaksi:
A) Perinteinen laivanupotus
B) Dynaaminen laivastosota
Jälkimmäisessä esim. neljä pelaajaa asettelee laivastonsa kukin omalle alueelleen. Vuoronsa aikana voi liikuttaa esim. yhtä laivaa niin monta ruutua kuin sen koko on. Toisten laivat tulevat näkyviin esim. 8 ruudun etäisyydeltä ja oma tykin kantama on esim. viiden ruudun päähän. Jos viiden ruudun pituinen alus on saanut kaksi osumaa, sillä voi ajaa enää 5-2=3 ruutua / vuoro. Kun aluksen jokainen ruutu saa osuman, se uppoaa. Jos isommalla aluksella ajaa pienemmän yli, niin pienempi uppoaa ja isompi kärsii vaurion, joka vastaa pienemmän aluksen kokoa (esim. kahden ruudun kokoinen alus -> kaksi osumaa). Jos pienemmällä aluksella törmää isompaan, niin pienempi uppoaa ja isompi kärsii vaurion, joka on pienemmän aluksen kokoinen. Vielä pitäisi miettiä / testata sallitaanko vain yksi tykinlaukaus / vuoro vai niin, että kaikki omat alukset voivat ampua samaan aikaan. Pelin voittaa se, jonka laiva(t) selviää taistelusta.
Hyviä uutisia.
Olen saanut kirjoitettua uudestaan kisan testaussivun rungon, joten tulevan kisan pitäisi sujua entistä luotettavammin, ja sivulle tulee myös mahdollisuus turnauksen ajamiseen (omavalintaisilla asetuksilla). JavaScriptin asynkroniset funktiot tulivat vihdoin tutuiksi.
Myös kisan konsepti on alkanut hahmottua. Toiveiden mukaisesti pelissä on rajoitettu informaatio ja hieman myös yhteistyötä. Tänään koodailin jo itse peliä kisasivulle. Matematiikka näyttää toimivan, asiat liikkuvat ruudulla ja peli jopa päättyy lopetusehtoon. Vielä puuttuu ”pieniä” asioita kuten varsinaiset säännöt, pisteytys, pelin parametrit, turnauksen tulosten näyttö ja esimerkkiohjelma. Uskon kuitenkin, että kisa voisi alkaa 1–2 viikossa. Lisätietoa on luvassa lähipäivinä.
Yksi kriittinen osa kisasta puuttuu, nimittäin logo. Aiempaan tapaan logo on PNG-muodossa (myös SVG voisi sopia) ja kooltaan 120x60 pikseliä sisältäen 1 pikselin levyisen reunaviivan. Logon kuva-aiheena on ohjelmia piilossa toisiltaan, ja logossa on hyvin näkyvä teksti "Ohjelmoi tekoäly". Naiivi ideani tähän on, että lamppupäiset robotit (1–3 kpl) kurkistaisivat puiden tai kivien takaa, mutta mielikuvitusta saa tietenkin käyttää. Ehdotuksia logoksi voi lähettää esimerkiksi sähköpostitse. Kiitos jo etukäteen taiteilijalle. ;)
Testaussivu toimii ja turnaus toimii. Puuttuu ohjesivu ja esimerkkiohjelma, ja pelin parametreja pitää ehkä viilata vielä. Laitetaan kisa käyntiin viikon päästä eli 1.12. Aikaa on perinteiseen tapaan reilu kuukausi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.