logo

midulive


Transcribed podcasts: 11
Time transcribed: 4h 7m 4s

This graph shows how many times the word ______ has been mentioned throughout the history of the program.

Vale, entonces, siguiente cosa es ordena un array de forma aleatoria, que está bastante chulo esto.
Básicamente, ordenar un array de forma aleatoria.
Esto hay que decir, porque tú tienes un array, vamos a seguir con el mismo, ¿no?
Vamos a seguir con el mismo array y luego tendríamos numbers.sort.
Y ahora os explico justamente cómo funciona el sort, que es un poco de magia negra.
Es un poco de magia negra.
Ahí, 0.5, esto cierra aquí, vale, y ya lo tendríamos.
Esto lo que va a hacer es que cada vez que se ejecute esto, cada vez que ejecutemos este código, de hecho lo vais a ver,
ordenar aleatorio, bueno, ordenar de forma aleatoria.
En realidad sería ordenarlo, pero bueno, si quieres pensar en desordenarlo, sería un poco lo mismo, ¿no?
¿Por qué el 0.5?
A ver, el 0.5 básicamente es porque si tú le pones esto, ves que esto, bueno, pensemos mejor en qué es lo que nos devuelve el math random.
El math random nos devuelve algo entre el 0 y el 1, ¿vale?
Entonces, lo que pasa es que la función de comparación del sort, a ver si lo explico bien, ¿eh?
Lo que haces aquí es comparar, aquí te viene a y b, que básicamente serían dos elementos que se comparan del array.
Entonces, entre a y b lo que pasa es que si haces que el, o sea, si la función, si esta función, esta función entre la diferencia entre a y b,
haces que sea menor a 0, ¿vale?
O sea, vamos a ponerlo aquí.
Si haces que sea menor a 0, esto significa que a está en un índice menor que b, ¿vale?
O sea, esto, el resultado es menor a 0, no sé si ponerlo así, menor a 0, no sé, así, así, bueno, así, ¿vale?
Está en un índice a, que es esta a, ¿vale?
El elemento a está en un índice menor que b, ya que pensar en los índices de 0, 1, 2, 3, 4, 5, 6, ¿vale?
Si luego tendríamos aquí 0, pues a y b podrían estar en el mismo índice, ¿no?
O sea, están repetidos, o sea, tienen el mismo valor, están igual, vamos a poner, están igual.
Y si es mayor a 0, entonces a está en un índice mayor que b, básicamente.
Entonces, la pregunta es, ¿no?
La pregunta sería, ¿por qué estás aquí restándole 0,5?
Porque, claro, el más random siempre da un valor entre 0, ¿no?
0 igual valor, sería así, entre el 0 y el 1.
Por lo tanto, nunca sería menor a 0.
Y la función, el callback de, justamente, el sort, debería, a veces, dar un valor menor a 0.
Tiene que ser menor a 0, 0 o mayor a 0, ¿ok?
Eso serían los tres valores que debería devolver el callback del sort, este callback de aquí.
Por lo tanto, lo que estamos haciendo aquí, en el más random, es restarle menos 0,5.
Porque de esta forma, lo que estamos diciendo es, si el más random, si el más random es mayor que 0,5,
lo que vamos a hacer es colocarlo en un sitio.
Pero si es menor de 0,5, lo vamos a colocar en otro sitio.
Porque si no, si le dejásemos aquí justo exactamente lo mismo, veríamos que siempre se ordenan igual.
Siempre se estaría ordenando igual, ¿vale?
Mira, vamos a ponerlo aquí.
Le ponemos numbers y aquí podemos ver que siempre se estaría ordenando igual.
Porque siempre, siempre estaríamos diciendo, como a es mayor a 0, que a está en un índice mayor que b.
Y esto, además, mantendría exactamente igual el mismo orden.
Si le diésemos la vuelta, hicieramos más random al revés, ¿ves?
Menos más random, lo que le estaríamos haciendo es darle la vuelta.
Porque estaríamos siempre diciéndole que a está en un índice menor que b.
O sea, le estaríamos diciendo que justamente este, al compararlo con 4, pues el 2, o sea, están al revés.
O sea, están el menor.
Bueno, ya me entiendes.
El tema es que tenemos que restarle justamente el 0,5 porque de esta forma vamos a aprovechar el más random.
Como ves, entre el 0 y el 1, lo que vamos a conseguir con esto es decirle, bueno, en el caso de que el más random haya dado,
¿ves? En este caso 0,7, bueno, pues tal.
Pero lo que podemos hacer, numbers, ¿vale?
Ves que ahora se desordena.
A veces el más random está por encima de 0,5 y a veces está por debajo.
Y esto lo que hace justamente es que te los desordena o te los ordena de forma aleatoria.
Lo que quieras.
Cualquiera de las dos formas está...
Pero lo habéis entendido más o menos.
Porque más o menos, al final, es un poco complejo, pero ahí está la gracia.
El hecho está en que el callback tiene que dar siempre un resultado.
O menor de 0, o 0, o mayor a 0.
Y ese resultado es la comparación entre dos elementos de la rey.
Sí.
Suena muy bien en plan una midú pregunta, una midú respuesta, una midú duda, un midú problema.
No entendí nada, pero a moverte.
Vale, gracias, Gartiel.
Me sirve, pero bueno, yo esperaría que algo hayas entendido.
Ese random, me preguntan, ¿ese random está atado al sistema?
A ver, en realidad el math random no da números aleatorios de seguridad criptográfica.
Esto quiere decir que al final tienes como una campana de Gauss donde se va viendo que el math random
tiende a devolver siempre valores que están cerca del 0,5.
Es un poco así, ¿vale?
Pero sí puede ser que tenga que ver con el sistema operativo, pero yo diría que tiene más que ver con el timestamp seguramente.
O sea, normalmente lo que hace es recuperar el tiempo y a partir del tiempo hace algún tipo de historia y tal.
Me imagino que dependiendo del sistema operativo, pues cambiará y tal.
¿El midú es más rápido la función short o el midú todo quick short?
A ver, depende, porque hay veces que depende de la longitud del array.
Obviamente el quick short está pensado para ser muy rápido.
Para arrays pequeños va a ser, a lo mejor incluso puede ser que sea más rápido el short,
porque a lo mejor ya tiene algún tipo de optimización para ese tipo de operaciones.
Pero en arrays realmente largos seguramente va a ser el quick short, ¿vale?
Y cualquier otro método que te sepas, porque seguramente este método no está pensado para la velocidad, ¿vale?
Porque al final hace a lo mejor comprobaciones innecesarias y cosas así.
Hola Gastón y hola Mephisto, que dice Mephisto.
Salúdame, salúdame, Mephisto, ya te saludo, Mephisto.
Te has saludado.
Vale, pero si hacéis un array de 10 posiciones, no hagáis un quick short, ¿vale?
Que no tiene sentido que os conozco.
Luego os ponéis ahí, oh Dios mío, voy a hacer un algoritmo, el algoritmo más rápido.
Y luego son 10 elementos.
Entonces, tienen que ser cientos de elementos, por no decir miles incluso.
Recuperar... Ah, vale.
De la misma forma que teníamos el de ordenar el array de forma aleatoria,
también tendríamos recuperar aleatoriamente un array, un item del array, ¿vale?
Esto básicamente es bastante útil cuando tú tienes un array, ¿no?
Como este.
Y aquí, pues, recuperamos un index, mathflor.
Y aquí tendríamos el mathrandom por el número de elementos.
Y lo único que tenemos que hacer, numbersrandomindex.
Y esto nos debería devolver, siempre que se ejecute, ¿vale?
Deberíamos ver uno diferente.
¿Veis?
Cuando voy cambiando aquí, voy a ir cambiando contenido.
Y veis que va cambiando el valor, ¿vale?
Bueno, a veces no cambia, pero ya veis que va cambiando, ¿no?
Entonces, esto lo tenéis que emitir.
Vamos, esta pequeña función os salva la vida en muchas pruebas técnicas, ¿vale?
En muchas pruebas técnicas.
¿Por qué?
Porque en muchas pruebas técnicas, justamente, a lo mejor no tenéis muchos algoritmos, ¿vale?
Pero suele ser bastante común que te pidan exactamente esto.
Recupera de forma aleatoria un elemento del array.
Por ejemplo, te dicen, recupera de una API 50 imágenes.
De la API de Giphy, ¿vale?
Recupera 50 imágenes.
Y luego te van a decir, es que esto lo he visto así.
Así de veces.
Así de veces.
Y luego te dicen, de los 50 resultados, muestra una de forma aleatoria.
Entonces, ¿qué pasa?
Que tienes un array y te están pidiendo un elemento aleatorio.
Entonces, no van a tener en cuenta si es realmente aleatorio.
O sea, no te van a tener en cuenta la entropía de la aleatoriedad que va a tener, ¿vale?
Pero sí que te va a decir, sí, sí, así.
Pero no, en serio.
Os lo digo en serio.
Es que yo casi...
Es que no.
Todas las pruebas técnicas que he hecho, que me han hecho, ¿vale?
Que me han hecho, en todas me lo han pedido.
Y no sé por qué.
En la que en Typhor me lo pidieron.
En Adivinta me lo pidieron.
En la Startup Noruega me lo pidieron.
En todas las empresas que he entrado, en todas me han pedido esto.
Así que ya os digo yo que es bastante importante.
Ya os digo yo que es bastante importante.
Así que, bueno, esta es una forma de hacerlo, ¿vale?
Math Floor, solo tenéis que pensar, ¿cómo recuperar un elemento aleatorio de un array?
Vale, pues tengo que multiplicar Math Random por el número de elementos.
Math Random te da el número del 0 al 1.
Y esto lo que significa es que como máximo te debería dar, pues, 1 por el número de elementos.
Debería ser lo que fuese, ¿no?
O sea que al final, lo que tienes que hacer con esto, luego es importante el Math Floor.
Porque si haces un Math Random la puedes liar parda.
Lo que tienes que hacer siempre es redondear hacia abajo, ¿vale?
Con el Math Floor redondeas hacia abajo.
Y de esta forma, pues, sería el primer elemento que te podría tocar sería el 0.
Y el máximo sería menor que el Numbers.length, ¿vale?
Así que ahí lo tendrías.
Midu, quiero ir al baño, pero no me quiero poder perder un segundo.
¿Qué hago?
¡Méate encima, gabolino!
¡Hazlo, vamos!
Creo que lo merece.
Lo amerita.
Eso también es truncar.
No, hombre, esto no es truncar.
Esto no es truncar.
Esto es recuperar un elemento del array, ya está.
Bueno, pues, este es un muy buen truco.
Y os lo recomiendo mucho que lo recuperéis y lo dominéis, ¿vale?
Vale, filtrar valores únicos en un array.
Este es bastante típico.
Este es bastante típico.
Que tienes un, por ejemplo, vamos a poner aquí que tenemos el 2, el 2, el 4, el 6, ¿no?
Para tener un array con los elementos únicos o los números únicos sin repetirlo, lo que puedes hacer es utilizar el set.
Entonces, harías un new set de Numbers.
Y con esto ya tendríamos el set sin los números repetidos, ¿vale?
¿Por qué?
Porque en el set, en un set, en esta estructura de datos, no puedes meter el mismo número dos veces.
Entonces, ya tendríamos que del array ya tenemos esto con los números sin repetir.
Y ahora lo único que tienes que hacer para convertirlo en un array sería...
Podrías utilizar esto, ¿vale?
Básicamente, hay que empezar con punto y coma, que si no, peta.
Y ya está, ya lo tendríamos.
Esto es tan fácil como esto.
Esto es tan fácil como esto.
Mira, conjuntos.
Pues sí, efectivamente, conjuntos.
Madre mía, eso me recuerda a mis tiempos en la universidad, ¿eh?
Me recuerda a mis tiempos en la universidad.
Si no os gusta esta forma, también podéis utilizar el array from, ¿vale?
Es decir, quiero convertir el set en un array.
Entonces, quiero crear un array desde esto.
Y sería exactamente lo mismo, ¿eh?
El que os guste más.
Uno es más verboso, el otro es más mágico, ¿no?
El otro es más mágico.
El más mágico te hace parecer más inteligente y el más verboso seguramente te lo agradecerá
a la persona que esté leyendo tu código, ¿no?
La cantidad de reduce if include que he hecho para hacer eso.
Bueno, ya esto...