SlideShare a Scribd company logo
Coding Gym: divertirsi e
migliorarsi a colpi di algoritmi
Marco Arena
ROME - APRIL 13/14 2018
CODING GYMCODING GYM
DIVERTIRSI E MIGLIORARSI A COLPI DI ALGORITMIDIVERTIRSI E MIGLIORARSI A COLPI DI ALGORITMI
Marco Arena
Codemotion Roma / 14 Aprile 2018
Queste slides sono soggette alla licenza:
Attribution-NonCommercial-ShareAlike 3.0 Unported
CC BY-NC-SA 3.0
UN PO' DI STORIA...UN PO' DI STORIA...
AUMENTARE IL VALORE DI UN PROBLEMAAUMENTARE IL VALORE DI UN PROBLEMA
Trovare soluzioni alternative
Comprendere pro, contro e compromessi di ogni soluzione
Guardare le soluzioni degli altri
Risolverlo in termini di soluzioni/costrutti standard (patterns)
Esplorare concetti
Per trovare soluzioni alternative, spesso basta
"perturbare" il problema
ESEMPI DI "PERTURBAZIONI"ESEMPI DI "PERTURBAZIONI"
vietare l'allocazione di spazio aggiuntivo
cambiare la scala degli input - 100 -> 10'000'000
assegnare/rimuovere proprietà - la sequenza diventa ordinata
mettersi vincoli "strani" - togli tutti i for
ALLENARSI IN MODO NON CONVENZIONALEALLENARSI IN MODO NON CONVENZIONALE
CON LA COMPETITIVE PROGRAMMINGCON LA COMPETITIVE PROGRAMMING
Non è una gara
Andare oltre la prima soluzione
Perturbare i requisiti iniziali
Cercare e confutare patterns
Esplorare concetti
SI LAVORA A COPPIESI LAVORA A COPPIE
Concorrenza (no competizione)
SI PUÒ USARE QUALSIASI LINGUAGGIOSI PUÒ USARE QUALSIASI LINGUAGGIO
SI PUÒ USARE QUALSIASI LINGUAGGIOSI PUÒ USARE QUALSIASI LINGUAGGIO
RETROSPETTIVA DOPO OGNI ESERCIZIORETROSPETTIVA DOPO OGNI ESERCIZIO
RETROSPETTIVA DOPO OGNI ESERCIZIORETROSPETTIVA DOPO OGNI ESERCIZIO
Confronto sulle soluzioni trovate
Compromessi, pro e contro
Condivisione
Lavagna a disposizione di tutti (non esiste "docente")
CODING GYM È PREPARATACODING GYM È PREPARATA
Il moderatore può aggiungere valore alla retrospettiva:
guidando i partecipanti verso soluzioni alternative
mostrando concetti e patterns
alimentando discussioni - ad esempio perturbando il problema
AFFRONTIAMO DUE ESERCIZIAFFRONTIAMO DUE ESERCIZI
CHALLENGECHALLENGE
ARRAY SUMARRAY SUM
INPUTINPUT
EXPECTED OUTPUTEXPECTED OUTPUT
1 2 3 4 5
15
ARRAY SUMARRAY SUM
TAKE 1TAKE 1
vector<int> v;
int elem;
while (cin >> elem)
v.push_back(elem);
int sum = 0;
for (int i=0: i<N; ++i)
sum += v[i];
cout << sum;
ARRAY SUMARRAY SUM
TAKE 2TAKE 2
vector<int> v;
int elem;
while (cin >> elem)
v.push_back(elem);
auto sum = accumulate(begin(v), end(v), 0);
cout << sum;
ARRAY SUMARRAY SUM
TAKE 3TAKE 3
vector<int> v;
copy(istream_iterator<int>(cin), istream_iterator<int>(),
back_inserter(v));
auto sum = accumulate(begin(v), end(v), 0);
cout << sum;
ARRAY SUMARRAY SUM
TAKE 4TAKE 4
cout << accumulate(istream_iterator<int>(cin), istream_iterator<int>(), 0
PATTERNS E IDIOMIPATTERNS E IDIOMI
UN PATTERN, MOLTI IDIOMIUN PATTERN, MOLTI IDIOMI
accumulate(begin(v), end(v), 0); // C++
reduce(operator.add, v, 0); # Python
v.Aggregate((a,b) => a + b) // C#
foldl (+) 0 v -- Haskell
CHALLENGECHALLENGE
MINIMUM LOSSMINIMUM LOSS
Rivendere una casa perdendo meno soldi.
MINIMUM LOSSMINIMUM LOSS
Possiamo scegliere quando comprare e quando
rivendere. L'obiettivo è minimizzare la perdita.
REGOLEREGOLE
Il prezzo di vendita deve essere inferiore a quello di acquisto
Possiamo vendere solo "nel futuro" (non allo stesso anno)
Tutti i prezzi sono distinti
MINIMUM LOSSMINIMUM LOSS
INPUTINPUT
EXPECTED OUTPUTEXPECTED OUTPUT
Possibilità:
compro a 14, rivendo a 7, 8, 2 o 5
compro a 7, rivendo a 2 o 5
compro a 8, rivendo a 2 o 5
compro a 2
compro a 5
5
14 7 8 2 5
2
MINIMUM LOSSMINIMUM LOSS
INPUTINPUT
EXPECTED OUTPUTEXPECTED OUTPUT
Possibilità:
compro a 14, rivendo a 8 => perdo 6
compro a 8, rivendo a 5 => perdo 3
compro a 2
compro a 5
5
14 7 8 2 5
2
compro a 7, rivendo a 5 => perdo 2
TAKE 1TAKE 1
O( )N
2
int n;
cin >> n;
vector<int> v(n);
copy_n(istream_iterator<int>(cin), n, begin(v));
auto minLoss = INT_MAX;
for (auto i=0; i<n; ++i)
{
for (auto j=i+1; j<n; ++j)
{
if (v[i] > v[j])
{
minLoss = min(minLoss, v[i] - v[j]);
}
}
}
cout << minLoss;
no a
Ooooops
Minimum Loss su HackerRank
N 2 × 10
5
PER OGNI PREZZO,PER OGNI PREZZO,
STIAMO CERCANDO NEL FUTUROSTIAMO CERCANDO NEL FUTURO
IL PREZZO PIÙ "VICINO"IL PREZZO PIÙ "VICINO"
COME SI MINIMIZZANO LE DISTANZE TRACOME SI MINIMIZZANO LE DISTANZE TRA
TUTTI I PREZZI?TUTTI I PREZZI?
POSSIAMO ORDINARLI?POSSIAMO ORDINARLI?
OGNI COPPIA RAPPRESENTA:OGNI COPPIA RAPPRESENTA:
prezzo
posizione nella "storia"
compro al valore a destra: 14
rivendo al valore a sinistra: 8
14 è il miglior prezzo di acquisto per rivendere a 8
DIMENTICATO NIENTE?DIMENTICATO NIENTE?
Questa combinazione non ha senso!
5 è "più avanti" di 2
Questa combinazione va bene!
Compro a 7, rivendo a 5
Questa combinazione non ha senso!
8 è più avanti di 7
Questa combinazione va bene!
Compro a 14, rivendo a 8
CAPITO L'ANTIFONA?CAPITO L'ANTIFONA?
TAKE 2TAKE 2
⚠ Abbiamo raddoppiato lo spazio
O(N ⋅ Log(N ))
index = range(0, len(price))
zipped = zip(price, index)
zipped.sort(key = lambda t: t[0])
zipped = izip(zipped, zipped[1::])
valids = ifilter(lambda (x1, x2): x1[1]>x2[1], zipped)
differences = imap(lambda (x1, x2) : x2[0]-x1[0], valids)
print min(differences)
no a
Minimum Loss su HackerRank
N 2 × 10
5
PERTURBAZIONEPERTURBAZIONE
I DATI ARRIVANO IN STREAMINGI DATI ARRIVANO IN STREAMING
(NON LI POSSIAMO PRE-PROCESSARE)(NON LI POSSIAMO PRE-PROCESSARE)
Lo vedete il sotto-problema?
SOTTO-PROBLEMASOTTO-PROBLEMA
Dato un prezzo , trovare il primo prezzo più grande di
tra quelli già arrivati
p
p
HO TROVATO LA SOLUZIONE AD UNHO TROVATO LA SOLUZIONE AD UN
PROBLEMA SIMILE...PROBLEMA SIMILE...
...MA FUNZIONA SU DATI ORDINATI......MA FUNZIONA SU DATI ORDINATI...
UPPER BOUNDUPPER BOUND
I dati vanno mantenuti ordinati
Che struttura dati usiamo?
SET (ORDERED)SET (ORDERED)
✔ RICERCA:✔ RICERCA:
✔ INSERIMENTO:✔ INSERIMENTO:
E.g. set di C++, TreeSet di Java, SortedSet di C#
OO((llooggNN ))
OO((llooggNN ))
ONLINE - C++ONLINE - C++
O(N ⋅ Log(N ))
int curr, loss = INT_MAX;
set<int> prices;
while (cin >> curr)
{
const auto ub = prices.upper_bound(curr); // 👈💣
if (ub != end(prices))
loss = min(loss, *ub-curr);
prices.insert(ub, curr);
}
cout << loss;
ONLINE - JAVAONLINE - JAVA
O(N ⋅ Log(N ))
Scanner in = new Scanner(System.in);
TreeSet<Integer> prices = new TreeSet<Integer>();
int loss = Integer.MAX_VALUE;
while (in.hasNext())
{
int elem = in.nextLong();
Integer ub = prices.higher(elem); // 👈💣
if (ub != null)
loss = Math.min(loss, ub-elem);
prices.add(elem);
}
System.out.println(loss);
in.close();
Usiamola per risolvere il problema originale
C++ Of ine (sort + linear scan)
C++ Online (loop with set)
Ovviamente occorrono misure più accurate
APPROCCIO NON CONVENZIONALEAPPROCCIO NON CONVENZIONALE
ALLA COMPETITIVE PROGRAMMINGALLA COMPETITIVE PROGRAMMING
Non è una gara
Andare oltre la prima soluzione
Perturbare i requisiti iniziali
Cercare e confutare patterns
Esplorare concetti
CODING GYMCODING GYM
È UN LABORATORIO MENSILEÈ UN LABORATORIO MENSILE
SVILUPPATO PER PIÙ PERSONESVILUPPATO PER PIÙ PERSONE
BASATO SU QUESTO APPROCCIOBASATO SU QUESTO APPROCCIO
DOVE PARTECIPARE OGGIDOVE PARTECIPARE OGGI
coding-gym.org
QUANDO PARTECIPARE AD APRILEQUANDO PARTECIPARE AD APRILE
VUOI ORGANIZZAREVUOI ORGANIZZARE
CODING GYM?CODING GYM?
Parlami dopo il talk oppure scrivimi:
marco@italiancpp.org
GRAZIE!GRAZIE!
coding-gym.org
marco@italiancpp.org
DOMANDEDOMANDE

More Related Content

Similar to Coding Gym: divertirsi e migliorarsi a colpi di algoritmi by Marco Arena

Java dispense 01.pdf
Java dispense 01.pdfJava dispense 01.pdf
Java dispense 01.pdf
GiacomoMessina3
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
PyCon Italia
 
A brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA eventA brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA event
Pietro Di Bello
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Codemotion
 
05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioniPiero Fraternali
 
Array
ArrayArray
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)STELITANO
 
Java Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningJava Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine Learining
Andrea Ciccotta
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
K-Tech Formazione
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
Marcello Missiroli
 
Envy free makespan approximation
Envy free makespan approximationEnvy free makespan approximation
Envy free makespan approximationVincenzo De Maio
 
20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriente...
20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriente...20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriente...
20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriente...Francesco Cirillo
 
Python@Unina - Exercises
Python@Unina - ExercisesPython@Unina - Exercises
Python@Unina - Exercises
NaLUG
 
Complessita computazionalee
Complessita computazionaleeComplessita computazionalee
Complessita computazionalee
SimoneAielli1
 

Similar to Coding Gym: divertirsi e migliorarsi a colpi di algoritmi by Marco Arena (15)

Java dispense 01.pdf
Java dispense 01.pdfJava dispense 01.pdf
Java dispense 01.pdf
 
Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
 
A brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA eventA brief intro to TDD for a JUG-TAA event
A brief intro to TDD for a JUG-TAA event
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
 
05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni05 3 istruzioni-selezione-iterazione-condizioni
05 3 istruzioni-selezione-iterazione-condizioni
 
Array
ArrayArray
Array
 
Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)Lezione 23 (9 maggio 2012)
Lezione 23 (9 maggio 2012)
 
Java Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningJava Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine Learining
 
Corso Programmazione Java Base
Corso Programmazione Java BaseCorso Programmazione Java Base
Corso Programmazione Java Base
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
C2es Es Algebra
C2es Es AlgebraC2es Es Algebra
C2es Es Algebra
 
Envy free makespan approximation
Envy free makespan approximationEnvy free makespan approximation
Envy free makespan approximation
 
20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriente...
20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriente...20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriente...
20050621 Ridurre il Costo del Cambiamento Applicando il Design Object Oriente...
 
Python@Unina - Exercises
Python@Unina - ExercisesPython@Unina - Exercises
Python@Unina - Exercises
 
Complessita computazionalee
Complessita computazionaleeComplessita computazionalee
Complessita computazionalee
 

More from Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
Codemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
Codemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
Codemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Codemotion
 

More from Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Coding Gym: divertirsi e migliorarsi a colpi di algoritmi by Marco Arena