PDA

View Full Version : [Vari] - Competizione


gugoXX
24-12-2010, 19:17
Avrei voglia di lanciare una serie di competizioni.
Il formato di ciascuna competizione sarebbero un esercizio come il seguente:

Tris:
Costruire un programma console nel linguaggio che si vuole.
Tale programma deve accettare un parametro da linea di comando, e deve restituire risultati su STDOUT
Il parametro della linea di comando e' una stringa di 9 caratteri, corrispondenti alle celle del gioco del tris
Ciascun carattere potra' essere O, X o Z corripsondenti al palla, alla croce o ad una cella vuota
Il programma deve simulare una mossa del gioco del tris, dovra' in pratica leggere la stringa in input, capirla e decidere dove mettere il proprio simbolo su una delle celle precedentemente Z.
La mossa dovra' essere decisa in un massimo di 2 secondi.
Dovra' quindi restituire 2 stringhe: il nickname del partecipante ed una stringa di 9 caratteri con il carattere-mossa scelto sostituito.
Inizia X a muovere. Se quindi il numero di X e' pari al numero di O allora il programma capira' che a lui e' assegnato il simbolo X, altrimenti sara' O.

Basta.
Ovviamente il tris e' un primo esercizio di semplice fattibilita', dato che cio' che verrebbe dopo sarebbe decisamente piu' interessante.

Ovviamente mi piacerebbe costruire un tournament per le competizioni, dove ogni partecipante incontrera' tutti gli altri partecipanti.
Occorre quindi un server che gestisca questa impostazione.
I partecipanti dovranno uploadare il codice da compilare, che verra' compilato ed eseguito dal server mediante un terzo programma che io (o anche altri, nessun problema) metterei a disposizione per pilotare il tournament.
Tale programma server controllerebbe la correttezza delle mosse di ciascun programma uploadato, darebbe un punteggio per ciascuno ad ogni partita,compilera' anche una classifica con ratio e punteggi da definirsi, che copra correttezza, vittorie, tempi di esecuzione, etc. che verrebbe in qualche modo pubblicata per la consultazione online.
Magari nella consultazione potrebbe anche starci posto per la pubblicazione di qualche paginetta relativa a tutti i codici che hanno partecipato.

Ovviamente il server dovra' essere dotato degli eseguibili per la compilazione/esecuzione di tutti i linguaggi che ci interesserebbe supportare.

I problemi che vedo sono 2:
1. Poiche' siamo tutti buoni, ma qualcuno e' un PDM, servirebbe un meccanismo di boxing della sessione di esecuzione, in modo che il server non venga danneggiato da un programma malware, se non addirittura il server non venga usato a fini illegali per danneggiare/compiere azioni illegali all'esterno.
Il boxing dovrebbe essere anche castrato, magari senza supporto di rete, e con direttive di SO limitate se non nulle.
Direi solo e tutto quanto permette il linguaggio nativo puro.
2. Non so che servizio si puo' usare per la gestione del tutto.

Idee?

cdere
24-12-2010, 22:49
idea davvero molto interessante.
Per quanto riguarda il problema del boxing al momento non mi viene sinceramente nulla (auguri! :D) mentre per il punto 2 chiaramente la miglior soluzione (nella mia opinione dal punto di vista del tempo, della funzionalità e di quant'altro) è programmarlo un servizio che si occupi di una gestione di questo tipo (dato le specifiche molto particolari), impostato per bene non dovrebbe essere un progetto troppo difficile.

Parliamone comunque, nel caso si tira su un svn e via.
Per quanto riguarda l'hosting di tale servizio invece sarà qualcosa di molto poco esigente di traffico di rete, quindi si potrebbe praticamente hostare su una vm praticamente dovunque.. (anche a casa mia)

ora devo proprio scappare, di nuovo, auguri :D

marco.r
25-12-2010, 12:38
Avrei voglia di lanciare una serie di competizioni.
Il formato di ciascuna competizione sarebbero un esercizio come il seguente:

È una cosa a cui sto pensando da un po' anche io, per cui approvo :D.
Ho già anche in cantiere qualcosa ma è sempre mancato il tempo per completare l'opera... anche se forse ora ho un po' di giorni di tranquillita'


Ovviamente mi piacerebbe costruire un tournament per le competizioni, dove ogni partecipante incontrera' tutti gli altri partecipanti.
Occorre quindi un server che gestisca questa impostazione.
I partecipanti dovranno uploadare il codice da compilare, che verra' compilato ed eseguito dal server mediante un terzo programma che io (o anche altri, nessun problema) metterei a disposizione per pilotare il tournament.
Tale programma server controllerebbe la correttezza delle mosse di ciascun programma uploadato, darebbe un punteggio per ciascuno ad ogni partita,compilera' anche una classifica con ratio e punteggi da definirsi, che copra correttezza, vittorie, tempi di esecuzione, etc. che verrebbe in qualche modo pubblicata per la consultazione online.
Magari nella consultazione potrebbe anche starci posto per la pubblicazione di qualche paginetta relativa a tutti i codici che hanno partecipato.

Prova a dare una occhiata a http://ai-contest.com/
Il codice del lato server è scaricabile e se non ricordo male dovrebbe essere open source e. Potrebbe essere un punto di partenza anche se di per sè il lato server non è molto difficile da implementare.


1. Poiche' siamo tutti buoni, ma qualcuno e' un PDM, servirebbe un meccanismo di boxing della sessione di esecuzione, in modo che il server non venga danneggiato da un programma malware, se non addirittura il server non venga usato a fini illegali per danneggiare/compiere azioni illegali all'esterno.
Il boxing dovrebbe essere anche castrato, magari senza supporto di rete, e con direttive di SO limitate se non nulle.
Direi solo e tutto quanto permette il linguaggio nativo puro.
2. Non so che servizio si puo' usare per la gestione del tutto.

Secondo me la cosa più pratica è tenere distinti server web per la gestione del contest e box per l'esecuzione delle partite. In questo modo uno si puo' arrangiare come meglio crede, da macchine virtuali a VServer a Jail . Basta che il box si colleghi ogni tot per verificare se ci sono nuovi partecipanti e per caricare i risultati delle partite già svolte.

Non che non si possa fare anche in un qualche servizio di hosting ma lo vedo più complicato e costoso.

cdere
28-12-2010, 00:11
ma allora non se ne fa più nulla alla fine?

marco.r
28-12-2010, 11:24
Io stavo smaltendo i bagordi natalizi... :D
Oggi provo a ripescare quello che avevo fatto e vedere cosa va bene nell'ottica, e a riguardare il codice che ho linkato prima...
Il problema principale e' lo spazio web, capire chi puo' mettere a disposizione cosa, poi da li' ci si regola.
Se optiamo per qualcosa di non troppo complicato (php, python, rails...) ne posso mettere a disposizione io.

cdere
28-12-2010, 12:57
io conosco un servizio di hosting free davvero ottimo, offre shell ssh, supporto a python, ruby, php, perl più il supporto a tutti i framework più diffusi (django symfony, Ruby on Rails..), databases (sqlite, postgresql, mysql...)

il contro è che nella accezione gratuita dell'abbonamento si hanno 10mb di spazio e 1GB di traffico al mese, ma secondo me riusciremmo a rientrarci tranquillamente oppure ci organizziamo da qualcuno tipo la soluzione da te che suggerivi tu o anche da me!

asrm
28-12-2010, 14:17
Carina come idea. ;)