This graph shows how many times the word ______ has been mentioned throughout the history of the program.
Vamos a empezar con esta CodeSignal.
Si alguien dice, ostras, ¿por qué es interesante este?
Pues te voy a decir por qué es interesante, porque CodeSignal es la herramienta que utiliza Facebook para sus entrevistas.
Por lo tanto, creo que es muy interesante que te hagas todo esto del arcade y bueno, te lo puedes hacer conmigo, que lo vamos a hacer aquà juntos.
Pero las entrevistas que hace Facebook utiliza esta plataforma y sé que muchas de las que aparecen aquÃ, en este arcade, al final, han aparecido en entrevistas de Facebook.
Asà que bueno, yo creo que es interesante.
Para que veamos un poco, voy a hacer la de Add, que la de Add no tiene ningún tipo de misterio porque es sumar, pero es un poco para que veamos la plataforma.
Aquà al final lo que tenemos es los puntos que puedes ganar y tienes aquà una explicación.
Escribe una función que devuelva la suma de dos números, pero ya os digo que esto va a ir escalando muy rápidamente.
Te dan un ejemplo, aquà te dicen para el parámetro 1 y el segundo parámetro que sea 2, el output tiene que ser 3, la suma de 1 más 2.
Y te dice diferentes condiciones, te dice el tiempo lÃmite que se puede ejecutar, pues 4 segundos.
El input, ¿cómo va a ser? Pues va a tener unos constraints.
Por ejemplo, el primer parámetro va a ser, siempre va a estar entre menos 1000 y 1000.
No va a ser más de 1000 y menos de menos 1000.
Y el parámetro 2, pues lo mismo.
Y el output, pues tiene que ser eso, la suma de los dos inputs.
Y aquÃ, bueno, esto es la sintaxis de JavaScript que no sé para qué, porque se supone que si lo voy a hacer con JavaScript es que debo saber.
Aquà podéis cambiar el lenguaje, ¿veis? Tenéis un montón de lenguaje.
Lo digo por si en algún momento decÃs, ah, pues quiero practicar TypeScript, pues lo podéis poner en TypeScript y practicáis.
O Python, CoffeeScript, lo que queráis. Podéis cambiarlo con lo que queráis.
Aquà en Draft, creo que, mira, hace 3 meses se ve que empecé a intentar hacer algo.
Las soluciones, esto es de otra gente que podéis ver las soluciones que ha ido haciendo.
Esto está bien, sobre todo una vez que ya la has terminado, pues para ver cómo la gente lo ha hecho y todo esto.
Aunque veo que está cargando, no está encontrando mucha cosa.
Y el Ritme, el Ritme este no tiene mucha historia.
Esto es totalmente gratis, ¿eh? O sea, lo que vamos a hacer hoy es gratis.
Pero CodeSignal tiene una parte que sà que es de pago, que entiendo que más adelante pasaremos.
Pero sobre todo es de pago para las empresas que quieran hacer entrevistas.
Pero la parte que nosotros vamos a hacer es gratis, gratis.
Y entonces, ¿dónde está? Mira, aquà le puedes dar like o dislike.
Este no le ha gustado mucho a la gente porque total es una suma, ¿no?
Aquà nos está diciendo, vale, pues suma 1 y 2 y que devuelva esto.
Pero claro, ¿cómo te aseguras que esto funciona?
Ajá, me estarás preguntando.
Pues aquà tienes unos tests que tienen que pasar.
¿Ves? Si yo pongo param1 menos param2, pues esto no deberÃa pasar.
Le doy a runtest, pasan los tests, te dice 0 es 6.
Y esto es genial porque además te va diciendo, oye, el output que ha dado es menos 1 y yo esperaba 3.
Si es más complicado puedes ver un div y todo.
Esto lo iremos viendo, ¿eh? Porque ya os digo que lo vamos a necesitar.
Asà que nada, le das a más y entonces te ejecuta estos tests.
Pero, ojo, ojo, porque claro, es que este ejemplo es muy sencillo, pero ya veréis que se va complicando.
Esto lo que hace es pasar una suite de tests pequeñita, o sea, solo una parte.
Porque en realidad, ¿ves? Ahora te dice click submit to run de full test.
O sea, cuando le das a submit, bueno, que es este botón de aquÃ, entonces se ejecuta todos los tests en realidad, ¿vale?
Mira, fÃjate.
Ahora ha ejecutado el doble de tests que antes.
¿Esto por qué lo hacen? Porque tienes 6 tests que te va a dar pistillas en el caso de que, por lo que sea, no ha funcionado algo.
Pero puede ser a veces que te pasen estos 6 tests y no te pasen los que están ocultos.
Asà que, bueno, si os parece, pues vamos al primer ejercicio que yo no he hecho ni he hecho nada.
Asà que, bueno, no os riáis mucho de mà en el caso de que falle mucho, pero iremos aprendiendo.
Lo que quiero hacer, además, es intentar, no intentar hacer la solución y ya está, sino os voy a explicar un poco cómo pienso también.
A ver si esto os ayuda, sobre todo a aquellos que queráis empezar a hacer catas, ¿vale?
Lo primero que hago, como siempre, leer el enunciado. No hay nada más importante que leer el enunciado.
Dado un año, ¿hay que devolver en qué siglo está? Bueno, este parece sencillito.
Bueno, sencillito. Nunca, nunca, con los algoritmos uno nunca puede decir sencillito porque normalmente tienen trampa.
El primer siglo empieza desde el año 1, incluyendo el año 100.
Yo normalmente, una cosa que hago para los algoritmos, o hacÃa, porque ya os digo que hace mil años que no hago algoritmos,
pero lo que hacÃa es que conforme yo voy leyendo, pues voy diciendo, vale, pues el primer siglo es del 1 al 100.
Del 1 al 100, esto serÃa el siglo 1, ¿vale? Entonces, del 101 al 200 serÃa siglo 2.
Voy leyendo, ¿no? Y ya, pues voy sacando un poquito de información.
Y me dice, ejemplo, pues el ejemplo igual. Si veo el ejemplo, dice, para el año 1905, el output tendrÃa que ser el año igual a 20, ¿vale?
Esto deberÃa ser el siglo XX. 1905 es el siglo XX. Asà que 1905 es el siglo XX, ¿vale?
Voy a ponerlo con números porque total creo que queda un poquito más caro.
Y el 1700 es el siglo XVII. Muy bien. El lÃmite de ejecución son 4 segundos, espero que no lleguemos.
Y el input es un integer, que es del año 1 al 2005. Esto es interesante. ¿Esto por qué te lo dicen?
Porque hay veces que te puedes evitar los if, ¿no? Si no, yo tendrÃa que mirar si es un número negativo, si esto, lo otro.
Pero bueno, ya te dicen, no, no te preocupes que el year te viene del 1 al 2005. Perfecto.
Vale, pues bueno, yo creo que ya podemos empezar.
A ver, teniendo en cuenta esto, yo lo que veo aquà es que si tú divides entre 10, ¿no?
Tienes aquà el año, por ejemplo, el año 90. Vamos a poner ejemplos, ¿no?
Tienes el año 78. Por lo divido entre 10, esto me darÃa 7 con 8. 7 con 8. Vale.
Claro, es que con este año es un poco raro. Pero o sea, 7 con 8. 7 con 8 dividido entre 100 más 1, ¿no?
Y esto me deberÃa dar ya... No, claro, pero no puede ser... Hay que redondear. Eso está claro, ¿vale?
TendrÃamos que redondear, seguro. ¿Por qué? O sea, porque hay que dividir el año entre 100 y seguro que no...
Es que he puesto entre 10. DeberÃa ser entre 100, ¿vale?
Entre 100, ¿vale? SerÃa 0,78. Y habrÃa que redondearlo siempre hacia arriba, ¿no?
Porque esto es 78, serÃa tal. Pero esto lo que queremos es que nos dé 1.
Si yo pongo, por ejemplo, 1985 entre 100... Porque los siglos son de 100 años.
Es que he puesto 10, pero me habÃa equivocado. Entre 100. ¿Vale?
Esto entre 100 nos deberÃa dar 19,85. Lo tenemos que redondear a la 20.
Bueno, este creo que es bastante sencilla. Esto deberÃamos hacer... Eso.
Dividir el year entre 100. Y esto, para redondearlo, claro.
Si utilizamos el mod round, yo creo que esto nos va a dar problemas.
Porque el mod round, claro, redondea, pero dependiendo al entero más cercano.
Y esto no es lo que queremos. Porque si es el entero más cercano, igual va hacia abajo.
Y eso no es lo que queremos. Asà que vamos a utilizar el mod sale.
¿Vale? Tenemos el mod floor que siempre redondea hacia abajo y el mod sale que siempre redondea hacia arriba.
Yo creo que es esto. Yo creo que este es el correcto. ¿Vale?
Bueno, vamos a darle al rante, a ver qué hace.
¿Vale? Ha pasado los 9, bla, bla, bla. Bueno, como están todos bien perfectos, pues le puedo dar a submit y no hay ningún problema.
Básicamente, lo que hace el mod sale, por si alguien se lo está preguntando, mod sale.
Tú le pasas un número, por ejemplo, el 8.9, ¿vale?
Y esto te lo redondea siempre a 9. Pero fÃjate que tú haces más sale 8.1 y esto te lo redondea siempre a 9.
¿Vale? Mira, vamos a verlo en Rangies, que ahà queda más claro. Aquà queda más claro.
Ya verás. Vamos a quitar esto. Vamos a quitar esto.
Este es útil para eso, ¿no? Mira, ¿ves? Que me lo redondea siempre hacia arriba.
Da igual cómo de cerca esté. 8.0005. Da igual. ¿Vale?
Siempre lo redondea hacia arriba. O sea que para eso necesitamos el más sale.
Este es el que no lo tiene que hacer. ¿Vale? Más sale.
¿Vale? Pues nada, submit. A ver qué tal.
¿Ves? Ahora ha pasado los test ocultos.
¿Vale? Pues bueno, ya hemos desbloqueado algo. Ya no me siento tan mal.
Continuar. Va.
Eh, ta, ta, ta.
Yo ahora champ. Bueno, 65%, 67% completado, pero de la primera.
O sea que vamos. Nivel 2. Vamos.
Ya veréis que esto empieza... Empieza poco a poco, pero luego vamos a estar ahà un buen rato con algunas.
Estas son las fáciles. Estas son de calentamiento.
¡No! ¡Odio esta! La odio.
Odio la del palÃndromo. Bueno, va. Venga, vamos a ver.
Hay un montón de formas de hacer la del palÃndromo.
Esta, la chusquera, ¿vale?
Eh, bueno, os voy a comentar que es el palÃndromo, por si no lo sabéis.
Este es un ejercicio tÃpico, ¿vale? Es un ejercicio tÃpico de entrevistas.
Súper tÃpico.
Entonces, ¿un palÃndromo qué es?
Un palÃndromo básicamente es ver si un...
Bueno, le he dado al... Ah, mira, que te lo hice.
Eh, un string que no cambia cuando le das la vuelta.
O sea, lo puedes leer del derecho y del revés y deberÃa leerse igual.
Por ejemplo, I es un palÃndromo.
Nun es un palÃndromo.
Decaf faced y con este espacio en medio es un palÃndromo, ¿no?
Porque si lo lees al revés, pues se lee igual.
Ahora, taco cat no lo es porque al revés no se lee igual.
Básicamente es eso. Es que del derecho y del revés se lee igual.
Hay que tener en cuenta también que una sola letra es un palÃndromo.
Y tres veces la misma letra serÃa un palÃndromo.
Cosas asÃ.
Muy bien.
Aquà nos ponen ejemplos.
El aba, esto es un palÃndromo.
Y el output, pues deberÃa ser true.
Input string abac, esto no es un palÃndromo, false.
Y ves, una sola letra es un palÃndromo, pues debe ser true.
A ver, una forma muy chusquera y que suele...
SÃ, capicúa, muy bien.
Muy bien, Germán.
Capicúa es como se dice en catalán.
Aquà en Cataluña decimos capicúa.
Una forma...
Yo no dirÃa que chusquera.
No sé.
No chusquera tampoco.
Pero a ver, una forma fácil de hacer esto.
SerÃa, pues tener...
Darle la vuelta al input string.
El string que nos pasan, decimos, vale.
Pues reverse set.
Pues el input string tendrÃamos que separarlo.
Luego hacemos un reverse.
No sé por qué.
Reverse.
Luego un join.
Y ahora os explicaré por qué esto es un poco...
A ver, no es que sea mala, pero funcionar deberÃa funcionar.
Entonces, haces...
Miras si el que le has dado la vuelta es igual al input string.
Realmente, esta es la solución que se entiende mejor, yo creo.
O sea, si tuvieras que entender la solución y escribirla, además es corta.
Es bastante corta.
Input string.
La convertimos en un array con el split.
¿Vale?
De hecho, lo podemos hacer en un momento para que vayamos viendo el tema.
Mira.
Tenemos este, ¿no?
Pues primero le hacemos el split.
¿Ves?
Entonces, esto me devuelve el array, le damos la vuelta y una vez que le damos la vuelta,
pues hacemos un join.
Ahora, lo único que tienes que hacer de esto es mirar si este serÃa el reverse set, ¿no?
Y esto lo que tendrÃas que hacer es si reverse set es igual a A.
Y esto deberÃa ser true.
Esta es bastante...
Una cosa interesante de esta, que me gusta bastante, es que no tienes ningún loop y que además no estás...
O sea, porque mucha gente dirÃa, no, es que claro, aquà la optimización no está muy bien porque la big O notation y tal.
Pero en realidad esto es más del motor que está utilizando JavaScript.
Y seguramente esto vaya bastante más rápido que en un loop que puedas hacer.
Porque en el loop es como que tú estás haciendo la optimización.
¿Vale?
Bueno, vamos a ver primero si esto funciona porque yo estoy hablando mucho.
Pero ya me imagino que sÃ.
¿Cuál es el problema de esta solución?
El problema de esta solución es que si esto es un string muy grande...
A ver, ¿de cuánto dice que esto puede ser?
De 10 elevado a la 5.
O sea, de 10.000.
¿10.000 o 100.000?
Ah, no sé.
Bueno, 10.000 o 100.000.
Bueno, puede ser un poco grande.
Pero bueno, ya nos pone aquà que el lÃmite tiene que ser 4 segundos.
O sea, que tampoco estamos...
100.000, gracias Mario.
Nos dice que es 4 segundos y ya vemos que está pasando correctamente.
De hecho, me han pasado todos los tests, ¿vale?
Le damos a submit, a ver si pasan.
Dame los hidden.
Vale, han pasado todos.
Asà que, perfecto.
A ver, antes de continuar, voy a cerrar esta.
No, no, déjame ya.
Vale.
¿Qué otra forma se podrÃa hacer?
A ver, otra forma que esto se podrÃa hacer es con el for.
Lo puedo intentar, aunque hace mil años que no hago un for.
Vamos a probar.
Hace mil millones de años que no hago un for.
A ver si asà me acuerdo.
Bar i igual a cero, ¿vale?
Luego i menor a length, input, string, punto length.
Pero, claro, ¿cuál es la gracia de hacer el for?
Mira, voy a comentar esta.
Ay, no, no se puede comentar asÃ.
La gracia de hacer el for, claro, la gracia está en el input string, punto length, pues dividirlo entre dos, ¿vale?
¿Por qué?
Porque lo que puedes hacer es, por un lado, es como hacer un sandwich, ¿no?
Tú vas leyendo por la izquierda, pero por la derecha vas comparando.
Y entonces ya deberÃa ser exactamente lo mismo.
Esto está bastante, es bastante útil si te preocupa mucho por temas de rendimiento.
Pero, bueno, yo no sé si realmente el rendimiento va a ser muy diferente, ¿eh?
No sabrÃa deciros si realmente va a ser la diferencia.
Lo que tenemos que hacer aquà es, input string, la i, a ver, input string, esto, ta, ta, ta.
Claro, estoy pensando que esto, aunque nos dé, vamos a ver, input string i, esto serÃa el cero, y luego input string, input string, punto length.
De hecho, podrÃamos sacar el length aquÃ, input string, punto length, vamos a sacarlo aquÃ, punto.
Length, length, menos i.
Y asà irÃamos comparando cada uno de ellos, pam, pam, pam.
O sea, primero compararÃamos el último, ¿no?
Porque el length menos i, o sea, cuando es cero.
Ah, no, pero claro, esto deberÃa empezar menos i menos uno, porque si no, lo va a comparar mal, ¿vale?
Si es igual, si es diferente, podrÃamos hacer un return false, y si no, hacer un return true.
O sea, vamos comparando, ¿no?
Y decimos, el primero que es cero, y este serÃa aquÃ.
Este serÃa el length.
Ay, no, pero esto tiene que ser el length total, ¿eh?
Perdón, perdón, perdón, perdón.
Ah, sÃ, vale, está bien, está bien.
Length total, el i es cero, menos uno, ¿vale?
Esto serÃa el último.
Luego el siguiente, la siguiente iteración serÃa el segundo.
Bueno, vamos a probar si esto funciona.
Vale, parece que sà ha funcionado.
¿Cuál es?
Bueno, vamos a probar todos, porque normalmente, vale, con los hidden también.
¿Qué se supone que estamos logrando con esto?
Lo que estamos logrando con esto es hacer el mÃnimo de iteraciones necesarias, ¿no?
Estamos, ya para empezar, hemos dividido por la mitad.
Pero es que, además, en cuanto encontramos uno que ya no corresponde, ¿no?
Pues ya salimos del loop.
Hacemos un return false y decimos, no, no, esto no es igual y ya está.
Esto, cualquier loop, esto lo podrÃais hacer con un while, lo podrÃais hacer con lo que queráis, ¿eh?
Pero, bueno, creo que con el for queda bien por el tema del length, pero si no, lo podéis hacer con un while, lo podéis hacer con lo que queráis.
Creo que la primera solución, esta de aquà que hemos hecho, es un poquito más bonita.
Esta, cuando empiezan ya los loops, es un poquito...
Pero, bueno, length, guardamos aquà el length y luego miramos esto y ya.
Bueno, de hecho...
Bueno, no, esto ya solo para hacer el return cuando haces esto, ya estarÃa.
Bueno, esta serÃa la otra forma, ¿eh?
Si no, con el while se gusta más y ya está.
Bueno, ya está.
Lo puedes hacer con un while y dos contadores, uno que va por la derecha y otro por la izquierda, y con eso validas.
SÃ, totalmente.
A ver, lo mismo.
Lo bueno de...
Una cosa que me gusta de esta, ¿no?
A ver, que con el while lo podrÃamos lograr igual.
Pero es que ya de primeras ya solo vas a...
Ya te aseguras que solo vas a hacer un loop sobre la mitad.
Con el while lo podrÃamos hacer, pero ya serÃa un poco más...
¿Sabes? Porque si haces un while y al final lo que haces es pasarte del medio para seguir revisando, es un poco fail, ¿vale?
Porque la gracia justamente es de evitar de que lo haga todo.
Pero bueno, esta serÃa una solución.
Si no, podéis hacer la que queráis, hay un montón.
A ver, esta solución que hemos hecho antes la podrÃamos iterar un poco
para justamente también que hiciese lo mismo.
O sea, mezclarlas.
Lo que pasa es que serÃa un poco raro, ¿eh?
Pero podrÃamos mirar si...
Bueno, se podrÃan mirar muchas cosas.
Bueno, total.
Summit.
Fuera.
Vamos a la siguiente.
A ver qué.
Mira, y se pueden desbloquear los tests que están ocultos.
Supongo que eso...
La gracia será...
Si hay alguno que te cuesta.
Bueno, ya hemos pasado la primera.
Vamos con la siguiente, va.
Vamos con la siguiente.
Vamos con Edge of the Ocean.