desafío total: cómo resolver retos extremos

19
DESAFÍO TOTAL: CÓMO RESOLVER RETOS EXTREMOS

Upload: rafbermudez

Post on 16-Feb-2017

398 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Desafío total:  cómo resolver retos extremos

DESAFÍO TOTAL: CÓMO RESOLVER RETOS EXTREMOS

Page 2: 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

Page 3: Desafío total:  cómo resolver retos extremos

¡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

Page 4: Desafío total:  cómo resolver retos extremos

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

Page 5: Desafío total:  cómo resolver retos extremos

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 MOV1 12 23 5 1 + 2 + 24 10 2 + 3 + 55 21 5 + 6 + 106 42 10 + 11 + 21

N ? ?? + ?? + ??N ? (N-2) + (N-2) +1 + (N-1) = 2(N-2) + (N-1) + 1

+N-1

+N-1 #ETSChallenge

Page 6: Desafío total:  cómo resolver retos extremos

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

Page 7: Desafío total:  cómo resolver retos extremos

¡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”.

Page 8: Desafío total:  cómo resolver retos extremos

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

Page 9: Desafío total:  cómo resolver retos extremos

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

Page 10: Desafío total:  cómo resolver retos extremos

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

Page 11: Desafío total:  cómo resolver retos extremos

Love is in the air

El problema del viajante

NP - COMPLETO

#ETSChallenge

Page 12: Desafío total:  cómo resolver retos extremos

● 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

Page 13: Desafío total:  cómo resolver retos extremos

Aprendiendo a competir

Afrontando competiciones

❏ El envoltorio❏ Lenguajes❏ I / O❏ Generalizando retos

#ETSChallenge

Page 14: Desafío total:  cómo resolver retos extremos

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

Page 15: Desafío total:  cómo resolver retos extremos

¿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

Page 16: Desafío total:  cómo resolver retos extremos

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

Page 17: Desafío total:  cómo resolver retos extremos

Entrada / salida por fichero

● Input254 4O O O XO X O XO X O XM X B X104 4O O O MO X O XM X O XO X B X

● OutputNO9

Afrontando competiciones

❏ El envoltorio❏ Lenguajes❏ I / O❏ Generalizando retos

#ETSChallenge

Page 18: Desafío total:  cómo resolver retos extremos

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

Page 19: Desafío total:  cómo resolver retos extremos

¡Gracias! ¿Preguntas?DESAFÍO TOTAL …COMPLETADO

@rafbermudez@EtsFactory ETS Asset Management Factory#ETSChallenge