Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Kilpailu 2019-2020?

Sivun loppuun

TapaniS [15.10.2019 09:30:46]

#

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?

Metabolix [16.10.2019 19:48:08]

#

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.

jone2712 [16.10.2019 20:04:51]

#

Tehdään kilpailu siitä, kuka ratkaisee eniten taikaneliöitä. 3, 4, 5, 6, jne. Prosessointiaika voisi olla yksi tunti tai ainakin vartti.

Metabolix [16.10.2019 20:21:14]

#

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.

jone2712 [18.10.2019 09:29:25]

#

Harmi, kun tuo taikaneliöluettelo on mennyt ohi. Itse pääsin sataan inhimillisessä ajassa.

Metabolix [18.10.2019 17:19:26]

#

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.

TapaniS [21.10.2019 16:15:30]

#

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.

TapaniS [24.10.2019 21:44:21]

#

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.

TapaniS [27.10.2019 18:46:24]

#

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.

Tronic [28.10.2019 14:00:44]

#

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.

Teuro [29.10.2019 09:05:20]

#

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.

TapaniS [31.10.2019 10:23:23]

#

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.

Teuro [31.10.2019 12:31:21]

#

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.

TapaniS [02.11.2019 17:14:41]

#

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.

Metabolix [22.11.2019 23:59:59]

#

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. ;)

Metabolix [24.11.2019 15:13:58]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta