Sudoku in Objective Caml. Sudoku è un gioco di logica nel quale al giocatore o solutore viene proposta una griglia di 9×9 celle, ciascuna delle quali può contenere un numero da 1 a 9, oppure essere vuota; la griglia è suddivisa in 9 righe orizzontali, 9 colonne verticali e, da bordi in neretto, in 9 "sottogriglie", chiamate regioni, di 3×3 celle contigue. Scopo del gioco è quello di riempire le caselle bianche con numeri da 1 a 9, in modo tale che in ogni riga, colonna e regione siano presenti tutte le cifre da 1 a 9 e, pertanto, senza ripetizioni.
Social Network Analysis for Journalists Using the Twitter APIDavide Ciambelli
This certificate of attendance certifies that Davide Ciambelli attended a workshop on "Social Network Analysis for Journalists Using the Twitter API" at the International Journalism Festival in Perugia, Italy in 2013. The certificate was issued by the School of Data Journalism in collaboration with the European Journalism Centre and Open Knowledge Foundation.
This document contains personal information for an individual named Davide Cook, including their date of birth, email, nationality, and records for 8 celestial bodies they have explored in a game or simulation with details on the number of missions, their difficulty levels, and exploration levels. The document also lists their total number of missions as 14 with a score of 0.
Programmazione e gestione della sicurezza: Verbale elettronicoDavide Ciambelli
Realizzare un applicativo che permetta di verbalizzare gli esami in forma digitale. Ogni esame sarà formato dal nome dell'insegnamento, la data dell'esame, il nome e il numero di matricola dello studente che sostiene l'esame, il numero di crediti, alcune possibili note o domande effettuate durante l'esame e naturalmente dal voto in trentesimi. L'esame così costituito dovrà essere firmato digitalmente dallo studente. Ogni esame sarà memorizzato in un verbale che conterrà il nome della facoltà, il nome del corso di laurea, il nome dell'insegnamento, la lista dei docenti in commissione. Il verbale per essere “chiuso” dovrà essere corredato da un timestamping e firmato digitalmente da ogni componente della commissione.
Social Network Analysis for Journalists Using the Twitter APIDavide Ciambelli
This certificate of attendance certifies that Davide Ciambelli attended a workshop on "Social Network Analysis for Journalists Using the Twitter API" at the International Journalism Festival in Perugia, Italy in 2013. The certificate was issued by the School of Data Journalism in collaboration with the European Journalism Centre and Open Knowledge Foundation.
This document contains personal information for an individual named Davide Cook, including their date of birth, email, nationality, and records for 8 celestial bodies they have explored in a game or simulation with details on the number of missions, their difficulty levels, and exploration levels. The document also lists their total number of missions as 14 with a score of 0.
Programmazione e gestione della sicurezza: Verbale elettronicoDavide Ciambelli
Realizzare un applicativo che permetta di verbalizzare gli esami in forma digitale. Ogni esame sarà formato dal nome dell'insegnamento, la data dell'esame, il nome e il numero di matricola dello studente che sostiene l'esame, il numero di crediti, alcune possibili note o domande effettuate durante l'esame e naturalmente dal voto in trentesimi. L'esame così costituito dovrà essere firmato digitalmente dallo studente. Ogni esame sarà memorizzato in un verbale che conterrà il nome della facoltà, il nome del corso di laurea, il nome dell'insegnamento, la lista dei docenti in commissione. Il verbale per essere “chiuso” dovrà essere corredato da un timestamping e firmato digitalmente da ogni componente della commissione.
This certificate of achievement was awarded to Davide Ciambelli for successfully completing the SEO Fundamentals Exam. The certificate expires on May 16, 2019 and includes the certification exam ID of 15 and completion code of c87bc253023d3c4.
Learn the basic features of Google Analytics including how to create an account, implement tracking code, analyze basic reports, and set up goals and campaign tracking.
Un piano di lezioni gratuite per scoprire tutte le opportunità del Web, con video tutorial che spaziano dalle strategie sui social media al marketing per i motori di ricerca, e molto altro.
Rianimazione Cardiopolmonare di Base con uso di Defibrillatori Semiautomatici Esterni e abilitazione all'utilizzo dei dispositivi DAE (defibrillatori semiautomatici esterni).
Il brillante ispettore Stefano Gai è alle prese con il caso più difficile della sua intera carriera.
Una delle più alte cariche della setta segreta dei “Ritardati” , (che mantiene l’anonimato con lo pseudonimo di La Rita)confida all’ispettore l’esistenza di un piano diabolico per rendere tutti gli essere umani simili a vegetali per poter così ridare un equilibrio ad un mondo sempre più diretto verso il baratro.
Per poter attenuare questo piano perverso i Ritardati hanno però bisogno di un aiuto esterno alla setta.
Lopins.
La Rita non sa cosa voglia dire ma sa che senza di esso il piano non potrà andare in porto.
Ed è su queste poche ed incerte basi che l’ispettore Gai si getta in una ricerca che lo porterà fino ai confini dell’oblio della menta umana.
Caricamento...
Abstract—In this paper, we overview the 2009 Simulated Car
Racing Championship—an event comprising three competitions
held in association with the 2009 IEEE Congress on Evolutionary
Computation (CEC), the 2009 ACM Genetic and Evolutionary
Computation Conference (GECCO), and the 2009 IEEE Sympo-
sium on Computational Intelligence and Games (CIG). First, we
describe the competition regulations and the software framework.
Then, the five best teams describe the methods of computational
intelligence they used to develop their drivers and the lessons they
learned from the participation in the championship. The orga-
nizers provide short summaries of the other competitors. Finally,
we summarize the championship results, followed by a discussion
about what the organizers learned about 1) the development of
high-performing car racing controllers and 2) the organization of
scientific competitions.
Per chi incomincia addentrarsi nel magico mondo dei comandi da terminale la vita può essere dura. In rete esistono diverse guide, ma la “Linux Bash Shell Cheat Sheet for Beginners” di Raphael è qualcosa che i principianti dovrebbero tenere a portata di mano. La segnaliamo un po’ perchè è molto semplice e chiara, e un po’ perchè è stata scritta da un sedicenne canadese. Personalmente è una cosa che mi fa piacere, perchè dimostra che anche i giovanissimi si accostano a linux nel modo migliore, ovvero “imparo e a mia volta diffondo”.
In un sistema elaboratore in multiprogrammazione ogni programma è inizialmente caricato nel sistema da un lettore di schede, riceve poi una o più iterazioni di CPU e operazioni su nastro o disco e alla fine esce dal sistema stampando i risultati. Ogni lavoro riceve un numero di iterazioni distribuito geometricamente con media 4 iterazioni prima di uscire dal sistema attraverso la stampante. Terminato un servizio di CPU, se non esce ha 0,875 probabilità di richiedere un servizio disco e 0,125 di richiedere nastro. Il servizio CPU è esponenziale di media 0,8 s; quello di disco uniforme tra 0,5 e 2,5 s, e quello di nastro ancora uniforme tra 2 e 16 s. La coda Q1 è a due livelli A e B con prelazione e priorità a favore di A. All'interno di ciascun livello il servizio è FIFO. Le code Q2 e Q3 siano invece servite SPTF. Il 20% dei lavori in arrivo dall'esterno siano diretti alla categoria A e i rimanenti a B. Nel corso delle iterazioni i lavori conservano la propria classificazione. Il sistema può ospitare soltanto un numero limitato di programmi (Q1 + Q2 + Q3 <= 20). Nell'ipotesi che il sistema funzioni al massimo della capacità (20) determinare media e varianza del numero di lavori espletati per unità di tempo, al 90% del livello di confidenza.
Nel problema del taglio del vetro (conosciuto come cutting stock bidimensionale o TDC), dato uno stock rettangolare di materia prima di dimensioni (L,W), e dato un insieme P di pezzi rettangolari desiderati a ciascuno dei quali e` associata una coppia di dimensioni (l,w), si deve trovare l’insieme di pezzi, sottoinsieme di P, estraibile dallo stock che massimizzi la somma dei profitti dei pezzi in esso contenuti (Figure 1.1). Un insieme S di pezzi estraibile `e definito in letteratura come “feasible pattern”. Un esempio di pezzi non estraibile, nel caso di stock con dimensioni (5, 5) `e S = (3, 3), (4, 4). Se piu` pezzi sono identici essi costituiscono un “tipo” di pezzo ed il numero ne rappresenta la domanda. Un caso particolare di TDC `e classificato come guillotine e riguarda tutte le problematiche di taglio di sagome a partire da un unico pezzo e si prefigge come obiettivo quello di minimizzare lo sfrido (scarto) con alcuni vincoli operativi.
Pool di macchine Condor con utilizzo di Checkpoint ServerDavide Ciambelli
Installare un pool di macchine Condor (almeno 3) che utilizzino lo standard Universe e un checkpoint server e verificare che, sotto opportune condizioni (es.: l'owner ricomincia a utilizzare la macchina), i job vengono sospesi e migrati e che venga utilizzato il checkpoint server. Verificare inoltre il supporto di Condor per delegare l'amministrazione ad utenti che non siano root e le restrizioni applicabili.
This certificate of achievement was awarded to Davide Ciambelli for successfully completing the SEO Fundamentals Exam. The certificate expires on May 16, 2019 and includes the certification exam ID of 15 and completion code of c87bc253023d3c4.
Learn the basic features of Google Analytics including how to create an account, implement tracking code, analyze basic reports, and set up goals and campaign tracking.
Un piano di lezioni gratuite per scoprire tutte le opportunità del Web, con video tutorial che spaziano dalle strategie sui social media al marketing per i motori di ricerca, e molto altro.
Rianimazione Cardiopolmonare di Base con uso di Defibrillatori Semiautomatici Esterni e abilitazione all'utilizzo dei dispositivi DAE (defibrillatori semiautomatici esterni).
Il brillante ispettore Stefano Gai è alle prese con il caso più difficile della sua intera carriera.
Una delle più alte cariche della setta segreta dei “Ritardati” , (che mantiene l’anonimato con lo pseudonimo di La Rita)confida all’ispettore l’esistenza di un piano diabolico per rendere tutti gli essere umani simili a vegetali per poter così ridare un equilibrio ad un mondo sempre più diretto verso il baratro.
Per poter attenuare questo piano perverso i Ritardati hanno però bisogno di un aiuto esterno alla setta.
Lopins.
La Rita non sa cosa voglia dire ma sa che senza di esso il piano non potrà andare in porto.
Ed è su queste poche ed incerte basi che l’ispettore Gai si getta in una ricerca che lo porterà fino ai confini dell’oblio della menta umana.
Caricamento...
Abstract—In this paper, we overview the 2009 Simulated Car
Racing Championship—an event comprising three competitions
held in association with the 2009 IEEE Congress on Evolutionary
Computation (CEC), the 2009 ACM Genetic and Evolutionary
Computation Conference (GECCO), and the 2009 IEEE Sympo-
sium on Computational Intelligence and Games (CIG). First, we
describe the competition regulations and the software framework.
Then, the five best teams describe the methods of computational
intelligence they used to develop their drivers and the lessons they
learned from the participation in the championship. The orga-
nizers provide short summaries of the other competitors. Finally,
we summarize the championship results, followed by a discussion
about what the organizers learned about 1) the development of
high-performing car racing controllers and 2) the organization of
scientific competitions.
Per chi incomincia addentrarsi nel magico mondo dei comandi da terminale la vita può essere dura. In rete esistono diverse guide, ma la “Linux Bash Shell Cheat Sheet for Beginners” di Raphael è qualcosa che i principianti dovrebbero tenere a portata di mano. La segnaliamo un po’ perchè è molto semplice e chiara, e un po’ perchè è stata scritta da un sedicenne canadese. Personalmente è una cosa che mi fa piacere, perchè dimostra che anche i giovanissimi si accostano a linux nel modo migliore, ovvero “imparo e a mia volta diffondo”.
In un sistema elaboratore in multiprogrammazione ogni programma è inizialmente caricato nel sistema da un lettore di schede, riceve poi una o più iterazioni di CPU e operazioni su nastro o disco e alla fine esce dal sistema stampando i risultati. Ogni lavoro riceve un numero di iterazioni distribuito geometricamente con media 4 iterazioni prima di uscire dal sistema attraverso la stampante. Terminato un servizio di CPU, se non esce ha 0,875 probabilità di richiedere un servizio disco e 0,125 di richiedere nastro. Il servizio CPU è esponenziale di media 0,8 s; quello di disco uniforme tra 0,5 e 2,5 s, e quello di nastro ancora uniforme tra 2 e 16 s. La coda Q1 è a due livelli A e B con prelazione e priorità a favore di A. All'interno di ciascun livello il servizio è FIFO. Le code Q2 e Q3 siano invece servite SPTF. Il 20% dei lavori in arrivo dall'esterno siano diretti alla categoria A e i rimanenti a B. Nel corso delle iterazioni i lavori conservano la propria classificazione. Il sistema può ospitare soltanto un numero limitato di programmi (Q1 + Q2 + Q3 <= 20). Nell'ipotesi che il sistema funzioni al massimo della capacità (20) determinare media e varianza del numero di lavori espletati per unità di tempo, al 90% del livello di confidenza.
Nel problema del taglio del vetro (conosciuto come cutting stock bidimensionale o TDC), dato uno stock rettangolare di materia prima di dimensioni (L,W), e dato un insieme P di pezzi rettangolari desiderati a ciascuno dei quali e` associata una coppia di dimensioni (l,w), si deve trovare l’insieme di pezzi, sottoinsieme di P, estraibile dallo stock che massimizzi la somma dei profitti dei pezzi in esso contenuti (Figure 1.1). Un insieme S di pezzi estraibile `e definito in letteratura come “feasible pattern”. Un esempio di pezzi non estraibile, nel caso di stock con dimensioni (5, 5) `e S = (3, 3), (4, 4). Se piu` pezzi sono identici essi costituiscono un “tipo” di pezzo ed il numero ne rappresenta la domanda. Un caso particolare di TDC `e classificato come guillotine e riguarda tutte le problematiche di taglio di sagome a partire da un unico pezzo e si prefigge come obiettivo quello di minimizzare lo sfrido (scarto) con alcuni vincoli operativi.
Pool di macchine Condor con utilizzo di Checkpoint ServerDavide Ciambelli
Installare un pool di macchine Condor (almeno 3) che utilizzino lo standard Universe e un checkpoint server e verificare che, sotto opportune condizioni (es.: l'owner ricomincia a utilizzare la macchina), i job vengono sospesi e migrati e che venga utilizzato il checkpoint server. Verificare inoltre il supporto di Condor per delegare l'amministrazione ad utenti che non siano root e le restrizioni applicabili.
Pool di macchine Condor con utilizzo di Checkpoint Server
Objective Caml Sudoku
1. Università degli Studi di Perugia
LAUREA SPECIALISTICA IN INFORMATICA
Anno Accademico 2007/2008
Programmazione Avanzata
Progetto:
OSudoku
Studenti:
Manfucci Andrea
Ciambelli Davide
1
2. Introduzione
Sudoku è un gioco di logica nel quale al giocatore o solutore viene proposta una griglia di 9×9
celle, ciascuna delle quali può contenere un numero da 1 a 9, oppure essere vuota; la griglia è
suddivisa in 9 righe orizzontali, 9 colonne verticali e, da bordi in neretto, in 9 "sottogriglie",
chiamate regioni, di 3×3 celle contigue. Scopo del gioco è quello di riempire le caselle bianche con
numeri da 1 a 9, in modo tale che in ogni riga, colonna e regione siano presenti tutte le cifre da 1 a 9
e, pertanto, senza ripetizioni.
Problema
Data una istanza di Sudoku (griglia proposta o matrice incompleta) trasformarla in modo da ottenere
una matrice completa (matrice priva di celle bianche).
Studio della soluzione
Come primo passo andiamo a definire le strutture dati per l'implementazione del programma. Il
programma è composto da 6 funzioni principali:
Definzione Matrice:
let matrice = Array.init 9 (fun _ > input_line stdin)
Tipo: val matrice : string array =
[|"520083070"; "308070000"; "170000003";
"060004700"; "403701506"; "001600040";
"600000017"; "000010205"; "010260034"|]
La scacchiera del Sudoku è rappresentata da un array di stringhe mantenuto in una variabile globale
matrice. Inizialmente il programma legge 9 linee di input composte da 9 caratteri ciascuna per
riempire la scacchiera con i valori classici del Sudoku (numeri da 1 a 9). Ad ogni cella vuota
corrisponde uno zero.
Definizione Stampa:
let stampa() = Array.iter print_endline matrice;;
Tipo: val stampa : unit > unit = <fun>
Questa è la funzione che permette di visualizzare in output sia la matrice di partenza che quella
risultante. Da notare le parentesi su stampa perchè nonostante sia senza parametri gli viene passato
implicitamente l'array matrice.
2
3. Definzione Controllo:
let rec controllo ?(i=0) colonna riga n =
i<9 && (matrice.(riga).[i] = n
|| matrice.(i).[colonna] = n
|| matrice.(riga/3*3 + i/3).[colonna/3*3 + i mod 3] = n
|| controllo ~i:(i+1) colonna riga n);;
Tipo: val controllo : ?i:int > int > int > char > bool = <fun>
Questa è una delle funzioni più importanti del programma perchè verifica se il numero che si vuole
inserire nella scacchiera rispetta i vincoli del gioco (relativi all'unicità del numero in questione su
una singola colonna, una singola riga e all'interno della sottogriglia 3x3). La funzione controllo
accetta in ingresso due parametri di tipo intero (colonna e riga) e un char n che rappresenta il
numero da controllare.
Definizione Ferma:
let rec ferma fx corretto inf sup = if (inf = sup) then corretto
else ferma fx (fx corretto inf) (inf+1) sup
Tipo: val ferma : ('a > int > 'a) > 'a > int > int > 'a = <fun>
La funzione ferma permette l'inserimento di un numero nella scacchiera sostituendo il numero
precedentemente inserito poiché errato. La funzione accetta in input 4 parametri: una funzione fx,
un char che rappresenta il numero al passo precedente, due interi inf ed sup e restituisce il numero
corretto da inserire nella scacchiera.
Definizione Cerca:
let rec cerca ?(colonna=0) ?(riga=0) f soluzioni = match colonna, riga with
9, riga > cerca ~colonna:0 ~riga:(riga+1) f soluzioni
| 0, 9 > f soluzioni
| colonna, riga >
if matrice.(riga).[colonna] <> '0' then cerca ~colonna:(colonna+1)
~riga f soluzioni
else ferma (fun attuale n_intero >
let n_char = Char.chr (n_intero + 48)
in if controllo colonna riga n_char then attuale
else (matrice.(riga).[colonna] < n_char;
let back = cerca ~colonna:(colonna+1) ~riga f attuale
in matrice.(riga).[colonna] < '0'; back)) soluzioni 1 10;;
Tipo: val cerca : ?colonna:int > ?riga:int > ('a > 'a) > 'a > 'a = <fun>
3
4. Cerca è la funzione che esamina tutte le posizioni della scacchiera in successione provando i numeri
da 1 a 9 in ogni cella vuota. Verifica tre possibili casi:
● il caso in cui la riga è finita e quindi effettua la ricorsione sulla riga successiva;
● il caso in cui la scacchiera è stata visionata completamente e quindi si è trovata una
soluzione;
● l'ultimo caso è quello generale in cui riga e colonna hanno dei valori diversi dai precedenti.
Definizione:
let () = Printf.printf "%d soluzione(i)n" (cerca (fun i >
stampa(); i+1) 0);;
Quest'ultima funzione è quella relativa alle chiamate di cerca e stampa che mostrano in sostanza
tutte le possibili soluzioni del gioco.
Esempio
Il programma da noi realizzato, una volta lanciato, attende in input una griglia del tipo:
520083070
308070000
170000003
060004700
403701506
001600040
600000017
000010205
010260034
dove a celle vuote corrisponde il valore 0. L'output proveniente da questa particolare griglia è il
seguente:
526483179
348179652
179526483
265834791
483791526
791652348
652348917
834917265
917265834
Si può notare facilmente che la griglia restituita dal programma è una soluzione corretta del gioco.
4