ETS DEVELOPMENT CHALLENGE

Anuncio
ETS DEVELOPMENT CHALLENGE
¿Te apetece un reto?
Nosotros te proponemos 3 entretenidos retos con los que seguro te divertirás poniendo a
trabajar tus neuronas. Si eres de los que además de “darle a la tecla” te gusta “darle al coco”,
te desafiamos a que nos sorprendas con las líneas de código que salen de tus dedos.
RETO 1
Para ir abriendo boca te presentamos este primer problema tipo. Un pequeño programa muy académico
con el que desentumecer nuestros dedos y la mente.
¿Sabes lo que es un palíndromo? Seguro que sí, pero a lo mejor no sabías que ese era
su nombre. Descubre con nosotros su significado y de paso resuelve la algoritmia escondida en la construcción de estas curiosas palabras.
Detrás del término de palíndromo se esconde un concepto muy sencillo pero a la vez único: un palíndromo no es más que una palabra o cadena de caracteres que se lee igual de izquierda a derecha que
de derecha a izquierda.
Otro concepto que viene a cuento para este problema es el de PalMeasure de una cadena. Este término
hace referencia a la suma de las longitudes de sus subcadenas, que son palíndromos a su vez.
El reto consiste en que implementes una solución que devuelva el PalMeasure de la concatenación de
todas las cadenas de caracteres contenidas en el array de cadenas de texto pasado por parámetro al
programa.
DEFINICIÓN
Clase: Método: Parámetros: Devuelve: Cabecera del Método: PalindromeAnalyzer
SummaryLength
String []
long
long SummaryLength (String [] text)
(Asegúrate de que tu método es público)
NOTAS
•
•
•
Una subcadena es una secuencia de caracteres consecutivos de una cadena.
Una cadena completa cuenta como una subcadena de sí misma.
Ten en cuenta que aunque las subcadenas tengan el mismo texto, si estas se encuentran en posiciones distintas también contarán para el cálculo del PalMeasure. Por ejemplo, si el parámetro de
entrada es {“AAA”}, el resultado sería 10.
RESTRICCIONES
•
•
•
text contendrá entre 1 y 50 elementos, ambos inclusive.
Cada elemento de text contendrá únicamente letras mayúsculas (“A” - “Z”).
Cada elemento de text contendrá entre 1 y 50 caracteres, ambos inclusive.
EJEMPLOS
1){“AAA”}
Returns: 10
2){“AB”}
Returns: 2
3){“AB”, “BA”}
Returns: 10
4){“AB”, “AAA”}
Returns: 15
5){“AZ”, “ZZ”, “A”}
Returns: 17
RETO 2
Si has llegado hasta aquí es que has aceptado nuestro desafío y tienes ganas de seguir devanándote los
sesos. Vamos pues con un problema con algo más de complejidad, con el que vamos a intentar transmitirte, a grandes rasgos, qué tipo de información manejamos en nuestro día a día. Como podrás imaginar,
los complejos algoritmos que desarrollamos en nuestras oficinas vienen respaldados por una ingente
cantidad de información que en la mayoría de los casos toma la forma de series de precios o matrices.
Es por esto que el siguiente reto quiere medir cómo te manejas con estas estructuras de datos complejas y tu habilidad a la hora de recorrerlas de forma eficiente. Vayamos entonces al problema concreto.
Llamamos a una matriz rectangular monótona si en todas las filas y en todas las columnas cada elemento es mayor que el anterior (ai,j < ai + 1,j y ai,j < ai,j + 1). Se tienen cuatro números enteros, n, m, row y col.
Se debe devolver una matriz rectangular monótona con n filas y m columnas que contenga todos los
números enteros entre 0 y (n*m - 1), de tal forma que el elemento que ocupa la posición (row, col) sea
el más pequeño posible. Todos los índices empiezan de 0. Si hay varias soluciones, se debe devolver la
más pequeña según el orden lexicográfico (ver nota).
Por ejemplo, si n = 4, m = 5, row = 3 and col = 3, la matriz que se debe devolver es:
0 1 2 3 16
4 5 6 7 17
8 9 10 11 18
12 13 14 15 19
La matriz debe devolverse como un tipo string[] donde el i-ésimo elemento representa la i-ésima fila.
Cada fila debe representarse como una lista de los valores de la fila separados por un solo espacio.
DEFINICIÓN
Namespace: Clase: Método: Parámeteros:
Devuelve: Cabecera del método: ETS.Pruebas
ConstructorMatriz
Construir
int, int, int, int
string[]
string[] construir(int n, int m, int row, int col)
(el método debe ser público)
NOTAS
•
La matriz rectangular A nxm es menor según el orden lexicográfico que la matriz Bsi y solo si el
vector (A0,0, A0,1, ..., A0,m-1, A1,0, A1,1, ..., A1,m-1, ..., An-1,0, An-1,1, ..., An-1,m-1) es menor según el orden lexicográfico
que el vector (B0,0, B0,1, ..., B0,m-1, B1,0, B1,1, ..., B1,m- 1, ..., Bn-1,0, Bn-1,1, ..., Bn-1,m-1).
RESTRICCIONES
•
•
•
•
n debe tener un valor entre 1 y 10, ambos inclusive.
m debe tener un valor entre 1 y 10, ambos inclusive.
row debe tener un valor entre 0 y n-1, ambos inclusive.
col debe tener un valor entre 0 y m-1, ambos inclusive.
EJEMPLOS
1)
4
5
3
3
Devuelve: {“0 1 2 3 16”, “4 5 6 7 17”, “8 9 10 11 18”, “12 13 14 15 19” }
2)
4
5
2
1
Devuelve: {“0 1 6 7 8”, “2 3 9 10 11”, “4 5 12 13 14”, “15 16 17 18 19” }
3)
1
1
0
0 Devuelve: {“0” }
4)
10
10
9
9
Devuelve:
{“0 1 2
“10 11
“20 21
“30 31
“40 41
“50 51
“60 61
“70 71
“80 81
“90 91
3 4 5
12 13
22 23
32 33
42 43
52 53
62 63
72 73
82 83
92 93
6 7 8
14 15
24 25
34 35
44 45
54 55
64 65
74 75
84 85
94 95
9”,
16 17
26 27
36 37
46 47
56 57
66 67
76 77
86 87
96 97
18
28
38
48
58
68
78
88
98
19”,
29”,
39”,
49”,
59”,
69”,
79”,
89”,
99” }
RETO 3
Por último vayamos con un problema algo más distendido, porque en ETS no todo es trabajar y también
disfrutamos de divertidas propuestas con las que relajarnos y desconectar de las presiones del día a día.
La fiebre de los drones ha llegado a nuestra compañía y se quiere organizar una carrera con estas divertidas aeronaves dentro de nuestra sede. Para esta carrera se ha querido definir una serie de puntos de
control dentro de nuestras instalaciones.
Si superas todos los retos que te proponemos probablemente tendrás oportunidad de conocer nuestras
oficinas de primera mano, pero a modo de presentación te diremos que nuestras oficinas están situadas en la zona norte de Madrid. Disponemos de tres edificios que designamos con las letras A, M y F
(siglas de Asset Management Factory), una zona de parking para empleados y en el medio de todo ello
una pequeña casita rodeada de jardines que hace las veces de punto de reunión en el que comemos y
socializamos.
Dicho esto, parece lógico definir los siguientes puntos de control o checkpoints para la I carrera oficial de
drones de ETS:
•
•
•
•
•
Edificio A (código A)
Edificio M (código M)
Edificio F (código F)
“La casita” (código C)
Parking (código P)
Partiendo de estas localizaciones se pide que se diseñe un programa que calcule todos los itinerarios
posibles entre un punto de origen y uno de destino teniendo en cuenta un tiempo máximo marcado
por la autonomía de los drones.
Para proceder al cálculo de las trayectorias posibles y después de un “riguroso” estudio sobre el terreno
se debe facilitar un grafo dirigido en el cual un vértice representa un punto de control y un arco representa una ruta entre dos puntos. El peso del arco representa el tiempo de vuelo en minutos entre dos
puntos. Un itinerario entre dos localizaciones (de A a M) con un tiempo de 5 minutos es representado
con AM5 (códigoSalida + códigoLlegada + tiempoVuelo).
Un ejemplo de grafo dirigido sería: AM5, MF4, FC8, CF8, CP6, AC5, FP2, PM3, AP7
DEFINICIÓN
Namespace: Clase: Método: Parámeteros: Devuelve: Cabecera del método: ETS.Drones
ItinerariosDrones
obtenerItinerarios
string, string, int, string[]
string[]
string[] obtenerItinerarios (string origen, string destino, int
tiempoMax, string[] grafo)
(el método debe ser público)
NOTAS
Debido a la orografía de la zona en la que se encuentran nuestras oficinas se tienen en cuenta las siguientes consideraciones:
•
Que exista la ruta entre A y M no implica que exista también la ruta entre M y A, ya que si el espacio
disponible es muy reducido se podrían producir cuellos de botella con drones volando en direcciones opuestas.
•
En el caso de haber rutas bidireccionales no necesariamente tienen que tomar el mismo tiempo
en ambos sentidos. Por ejemplo, para llegar del punto A al C se puede tardar 2 minutos y en cambio de C a A la duración sería de 3 minutos, debido a que los trayectos definidos son distintos y el
segundo implica salvar unos setos de por medio.
NOTAS
En lo referente al grafo dirigido que se pasa por parámetro, dado un itinerario, cada ruta que lo compone
no puede aparecer más de una vez, y para cada ruta, el punto de salida y el de llegada no pueden ser
nunca el mismo.
EJEMPLOS
origen : “F”
destino : “F”
tiempoMax : 30
grafo : [“AM5”,“MF4”,“FC8”,“CF8”,“CP6”,“AC5”,“FP2”,“PM3”,“AP7”]
Devuelve: {“FCF”, “FPMF”, “FPMFCF”, “FCFPMF”, “FCPMF”, “FPMFPMF”, “FPMFPMFPMF” }
Descargar