DESAFÍO TOTAL:
CÓMO RESOLVER RETOS EXTREMOS
¿Por qué participar?
● ¡Premios!
● Promoción personal
● Conocer gente, socializar
● Aprender y mejorar
● ¡Es divertido!
Concursos extremos
de programación
#ETSChallenge
¡Es hora de probar su efectividad en Chimpancés!
El origen del planeta de los simios
“Un grupo de investigación secreto está desarrollando
un nuevo fármaco que aumenta significativamente la
inteligencia.”
Problema 1
#ETSChallenge
El origen del planeta de los simios
● Todos los interruptores están inicialmente ON
● La caja se abrirá cuando estén todos OFF
● El interruptor de la derecha se puede conmutar siempre
● Cualquier otro interruptor se puede conmutar, si y sólo si,
su interruptor de la derecha está ON y el resto OFF
● Irremediablemente queremos abrir la caja cuanto antes
...
Objetivo: Mínimo número de conmutaciones para N interruptores
#ETSChallenge
111
110
010
011
001
000
El origen del planeta de los simios
1111
1101
1100
0100
0101
0111
0110
0010
0011
0001
0000
...
11111
11110
11010
11011
11001
11000
01000
01001
01011
01010
01110
01111
…
111111
111101
111100
110100
110101
110111
110110
110010
110011
110001
110000
010000
010001
010010
010110
010111
010101
010100
011100
011101
011111
...
11
01
00
n MOV
1 1
2 2
3 5 1 + 2 + 2
4 10 2 + 3 + 5
5 21 5 + 6 + 10
6 42 10 + 11 + 21
N ? ?? + ?? + ??N ? (N-2) + (N-2) +1 + (N-1) = 2(N-2) + (N-1) + 1
+N-1
+N-1
#ETSChallenge
El origen del planeta de los simios
def minMovements= { numSwitches ->
BigInteger result
switch (numSwitches) {
case 1:
result = 1
break
case 2:
result = 2
break
default:
result = 2 * minMovements(numSwitches -2) + minMovements(numSwitches -1) +1
break
}
result
}
2(N-2) + (N-1) + 1
Complejidad:
O(2n
)
O(n)
}.memoize()
#ETSChallenge
¡Es hora de probar su efectividad!
Love is in the air
Problema 2
#ETSChallenge
“Partimos del axioma (no probado) de que ligar es
cuestión de probabilidad. Aprovechemos San Valentín
para enviar masivamente flores con un dron antes de
que se termine la batería”.
Love is in the air
● Un mapa bidimensional indica los N objetivos amorosos
● La batería permite un número limitado de movimientos
● Buena época, la ciudad está plagada de rosas.
● Parar a por una rosa nos supone un coste despreciable
● Existe espacio aéreo reservado o infranqueable
Objetivo: Movimientos mínimos para optimizar entregas
#ETSChallenge
Love is in the air
X X X X X X X X X X
X T O O O O O O T X
X X X X O O X X X X
X T O O O O O O T X
X X X X O D X X X X
X T O O O O O O T X
X X X X O O X X X X
X T O O O O O O T X
X X X X T T X X X X
X X X X X X X X X X
T = Objetivo
X = Infranqueable
O = Espacio aéreo
D = Dron#ETSChallenge
X T O O O O O O T X
X X X X O O X X X X
X T O O O O O O T X
X X X X O D X X X X
X T O O O O O O T X
X X X X O O X X X X
X T O O O O O O T X
X X X X T T X X X X
Grafo totalmente conexo
Nodos = D y T
Coste de NodoA a NodoB = camino más corto de A a B (Dijkstra)
Love is in the air
#ETSChallenge
Love is in the air
El problema del
viajante
NP - COMPLETO
#ETSChallenge
● Casos pequeños: Fuerza bruta
● Heurísticas o subóptimos
○ El vecino más próximo a mi posición
○ El vecino más próximo a mi y más lejano a meta
○ ...
● Encontrar subproblemas para los cuales heurísticas
mejores o algoritmos exactos son posibles
○ Combinación de heurísticas y fuerza bruta
■ Ramificación y acotación
■ Reordenamiento parcial
■ ...
Love is in the air
El problema del
viajante
NP - COMPLETO
#ETSChallenge
Aprendiendo a competir
Afrontando
competiciones
❏ El envoltorio
❏ Lenguajes
❏ I / O
❏ Generalizando retos
#ETSChallenge
Entiende el entorno
● Entiende la evaluación de la competición
○ Número de problemas
○ Puntuación de cada problema
○ Exactitud de las soluciones
○ Importancia de la velocidad de entrega
○ Condiciones bloqueantes
● Comprende qué evalúa cada problema
○ La exactitud es lo más importante
○ Limpieza de código
○ Complejidad computacional
○ Uso de memoria
● Lee (al menos) 5 veces el enunciado
Afrontando
competiciones
❏ El envoltorio
❏ Lenguajes
❏ I / O
❏ Generalizando retos
#ETSChallenge
¿Qué lenguaje escoger?
● Depende del problema concreto a resolver
● Suelen ser buenos...
○ Lenguajes de alto nivel que permiten scripting
○ Poco verbosos
○ Con excelente manejo de colecciones
○ Capacidades funcionales (pattern matching)
○ Vitaminados
● Por ejemplo:
○ python, groovy, haskell, scala,...
Afrontando
competiciones
❏ El envoltorio
❏ Lenguajes
❏ I / O
❏ Generalizando retos
#ETSChallenge
Entrada / salida
● El formato de entrada/salida es importante
○ Entrada por fichero
○ Entrada por línea de comando
○ Consumición de API
○ Función y test
● Ojo con entradas grandes
○ Problemas de rendimiento
○ Desbordamiento de memoria
Afrontando
competiciones
❏ El envoltorio
❏ Lenguajes
❏ I / O
❏ Generalizando retos
#ETSChallenge
Entrada / salida por fichero
● Input
2
5
4 4
O O O X
O X O X
O X O X
M X B X
10
4 4
O O O M
O X O X
M X O X
O X B X
● Output
NO
9
Afrontando
competiciones
❏ El envoltorio
❏ Lenguajes
❏ I / O
❏ Generalizando retos
#ETSChallenge
Resumiendo
● Tipos de retos
○ Transformaciones I/O
○ Manejo de colecciones
○ Relaciones de recurrencia
○ Pattern matching
○ Problemas N-P
○ Encriptación
● ¡Ojo!
○ Testing de extremos
○ Int overflow
○ Desbordamiento de memoria
○ Complejidad computacional exponencial
Afrontando
competiciones
❏ El envoltorio
❏ Lenguajes
❏ I / O
❏ Generalizando retos
#ETSChallenge
¡Gracias! ¿Preguntas?
DESAFÍO TOTAL …COMPLETADO
@rafbermudez
@EtsFactory ETS Asset Management Factory#ETSChallenge

Desafío total: cómo resolver retos extremos

  • 1.
  • 2.
    ¿Por qué participar? ●¡Premios! ● Promoción personal ● Conocer gente, socializar ● Aprender y mejorar ● ¡Es divertido! Concursos extremos de programación #ETSChallenge
  • 3.
    ¡Es hora deprobar su efectividad en Chimpancés! El origen del planeta de los simios “Un grupo de investigación secreto está desarrollando un nuevo fármaco que aumenta significativamente la inteligencia.” Problema 1 #ETSChallenge
  • 4.
    El origen delplaneta de los simios ● Todos los interruptores están inicialmente ON ● La caja se abrirá cuando estén todos OFF ● El interruptor de la derecha se puede conmutar siempre ● Cualquier otro interruptor se puede conmutar, si y sólo si, su interruptor de la derecha está ON y el resto OFF ● Irremediablemente queremos abrir la caja cuanto antes ... Objetivo: Mínimo número de conmutaciones para N interruptores #ETSChallenge
  • 5.
    111 110 010 011 001 000 El origen delplaneta de los simios 1111 1101 1100 0100 0101 0111 0110 0010 0011 0001 0000 ... 11111 11110 11010 11011 11001 11000 01000 01001 01011 01010 01110 01111 … 111111 111101 111100 110100 110101 110111 110110 110010 110011 110001 110000 010000 010001 010010 010110 010111 010101 010100 011100 011101 011111 ... 11 01 00 n MOV 1 1 2 2 3 5 1 + 2 + 2 4 10 2 + 3 + 5 5 21 5 + 6 + 10 6 42 10 + 11 + 21 N ? ?? + ?? + ??N ? (N-2) + (N-2) +1 + (N-1) = 2(N-2) + (N-1) + 1 +N-1 +N-1 #ETSChallenge
  • 6.
    El origen delplaneta de los simios def minMovements= { numSwitches -> BigInteger result switch (numSwitches) { case 1: result = 1 break case 2: result = 2 break default: result = 2 * minMovements(numSwitches -2) + minMovements(numSwitches -1) +1 break } result } 2(N-2) + (N-1) + 1 Complejidad: O(2n ) O(n) }.memoize() #ETSChallenge
  • 7.
    ¡Es hora deprobar su efectividad! Love is in the air Problema 2 #ETSChallenge “Partimos del axioma (no probado) de que ligar es cuestión de probabilidad. Aprovechemos San Valentín para enviar masivamente flores con un dron antes de que se termine la batería”.
  • 8.
    Love is inthe air ● Un mapa bidimensional indica los N objetivos amorosos ● La batería permite un número limitado de movimientos ● Buena época, la ciudad está plagada de rosas. ● Parar a por una rosa nos supone un coste despreciable ● Existe espacio aéreo reservado o infranqueable Objetivo: Movimientos mínimos para optimizar entregas #ETSChallenge
  • 9.
    Love is inthe air X X X X X X X X X X X T O O O O O O T X X X X X O O X X X X X T O O O O O O T X X X X X O D X X X X X T O O O O O O T X X X X X O O X X X X X T O O O O O O T X X X X X T T X X X X X X X X X X X X X X T = Objetivo X = Infranqueable O = Espacio aéreo D = Dron#ETSChallenge
  • 10.
    X T OO O O O O T X X X X X O O X X X X X T O O O O O O T X X X X X O D X X X X X T O O O O O O T X X X X X O O X X X X X T O O O O O O T X X X X X T T X X X X Grafo totalmente conexo Nodos = D y T Coste de NodoA a NodoB = camino más corto de A a B (Dijkstra) Love is in the air #ETSChallenge
  • 11.
    Love is inthe air El problema del viajante NP - COMPLETO #ETSChallenge
  • 12.
    ● Casos pequeños:Fuerza bruta ● Heurísticas o subóptimos ○ El vecino más próximo a mi posición ○ El vecino más próximo a mi y más lejano a meta ○ ... ● Encontrar subproblemas para los cuales heurísticas mejores o algoritmos exactos son posibles ○ Combinación de heurísticas y fuerza bruta ■ Ramificación y acotación ■ Reordenamiento parcial ■ ... Love is in the air El problema del viajante NP - COMPLETO #ETSChallenge
  • 13.
    Aprendiendo a competir Afrontando competiciones ❏El envoltorio ❏ Lenguajes ❏ I / O ❏ Generalizando retos #ETSChallenge
  • 14.
    Entiende el entorno ●Entiende la evaluación de la competición ○ Número de problemas ○ Puntuación de cada problema ○ Exactitud de las soluciones ○ Importancia de la velocidad de entrega ○ Condiciones bloqueantes ● Comprende qué evalúa cada problema ○ La exactitud es lo más importante ○ Limpieza de código ○ Complejidad computacional ○ Uso de memoria ● Lee (al menos) 5 veces el enunciado Afrontando competiciones ❏ El envoltorio ❏ Lenguajes ❏ I / O ❏ Generalizando retos #ETSChallenge
  • 15.
    ¿Qué lenguaje escoger? ●Depende del problema concreto a resolver ● Suelen ser buenos... ○ Lenguajes de alto nivel que permiten scripting ○ Poco verbosos ○ Con excelente manejo de colecciones ○ Capacidades funcionales (pattern matching) ○ Vitaminados ● Por ejemplo: ○ python, groovy, haskell, scala,... Afrontando competiciones ❏ El envoltorio ❏ Lenguajes ❏ I / O ❏ Generalizando retos #ETSChallenge
  • 16.
    Entrada / salida ●El formato de entrada/salida es importante ○ Entrada por fichero ○ Entrada por línea de comando ○ Consumición de API ○ Función y test ● Ojo con entradas grandes ○ Problemas de rendimiento ○ Desbordamiento de memoria Afrontando competiciones ❏ El envoltorio ❏ Lenguajes ❏ I / O ❏ Generalizando retos #ETSChallenge
  • 17.
    Entrada / salidapor fichero ● Input 2 5 4 4 O O O X O X O X O X O X M X B X 10 4 4 O O O M O X O X M X O X O X B X ● Output NO 9 Afrontando competiciones ❏ El envoltorio ❏ Lenguajes ❏ I / O ❏ Generalizando retos #ETSChallenge
  • 18.
    Resumiendo ● Tipos deretos ○ Transformaciones I/O ○ Manejo de colecciones ○ Relaciones de recurrencia ○ Pattern matching ○ Problemas N-P ○ Encriptación ● ¡Ojo! ○ Testing de extremos ○ Int overflow ○ Desbordamiento de memoria ○ Complejidad computacional exponencial Afrontando competiciones ❏ El envoltorio ❏ Lenguajes ❏ I / O ❏ Generalizando retos #ETSChallenge
  • 19.
    ¡Gracias! ¿Preguntas? DESAFÍO TOTAL…COMPLETADO @rafbermudez @EtsFactory ETS Asset Management Factory#ETSChallenge