1 00:00:00,880 --> 00:00:04,240 vale, pues es un problema 2 00:00:04,240 --> 00:00:05,960 de que se queda sin procesar 3 00:00:05,960 --> 00:00:08,160 esto último de aquí exclusivamente 4 00:00:08,160 --> 00:00:09,900 bueno, pues vamos a 5 00:00:09,900 --> 00:00:12,000 uno mira a ver, uy, a ver que me ha pasado aquí 6 00:00:12,000 --> 00:00:12,779 que me falta 7 00:00:12,779 --> 00:00:23,170 vale, pues 8 00:00:23,170 --> 00:00:25,269 ¿por qué puede ser 9 00:00:25,269 --> 00:00:26,449 que no se esté haciendo eso? 10 00:00:28,460 --> 00:00:30,539 pues vamos a revisar el algoritmo 11 00:00:30,539 --> 00:00:32,700 pues si arreglamos eso es lo único que nos falta 12 00:00:32,700 --> 00:00:34,700 vale, pues esta es 13 00:00:34,700 --> 00:00:39,649 mi, por ejemplo 14 00:00:39,649 --> 00:00:40,950 tengo esta cadena 15 00:00:40,950 --> 00:00:44,189 Vale, entonces 16 00:00:44,189 --> 00:00:44,969 El bucle for 17 00:00:44,969 --> 00:00:47,789 Me paro aquí, ¿eres igual que el siguiente? 18 00:00:47,990 --> 00:00:49,469 Sí, incremento contador, muy bien 19 00:00:49,469 --> 00:00:50,969 Me paro aquí, ¿eres igual que el siguiente? 20 00:00:51,229 --> 00:00:53,070 Sí, incremento contador, ya voy por 3 21 00:00:53,070 --> 00:00:55,710 Me paro aquí, ¿eres igual que el siguiente? 22 00:00:56,729 --> 00:00:58,630 No, no eres igual que el siguiente 23 00:00:58,630 --> 00:01:00,409 Luego ya concateno 24 00:01:00,409 --> 00:01:01,429 A 3 25 00:01:01,429 --> 00:01:03,729 Y contador vuelve a ser 1 26 00:01:03,729 --> 00:01:05,890 Muy bien, contador a 1 otra vez 27 00:01:05,890 --> 00:01:08,189 Ahora, me paro aquí con contador 1 28 00:01:08,189 --> 00:01:09,569 ¿Eres igual que el siguiente? Sí 29 00:01:09,569 --> 00:01:11,530 Contador 2, me paro aquí 30 00:01:11,530 --> 00:01:12,909 ¿Eres igual que el siguiente? No. 31 00:01:13,549 --> 00:01:17,370 Pues entonces concateno B2 y reinicio contador a 1. 32 00:01:17,870 --> 00:01:18,409 Muy bien. 33 00:01:18,670 --> 00:01:21,489 Ahora, ¿me paro aquí? ¿Eres igual que el siguiente? Sí. 34 00:01:22,010 --> 00:01:23,129 Contador 2, tú. 35 00:01:23,790 --> 00:01:25,909 Aquí ya me he parado, ¿vale? 36 00:01:25,950 --> 00:01:27,290 Porque me paro en el penúltimo. 37 00:01:28,090 --> 00:01:28,650 Aquí me paro. 38 00:01:28,769 --> 00:01:30,430 ¿Tú eres igual que el siguiente? Sí. 39 00:01:30,909 --> 00:01:31,969 Eres igual que el siguiente. 40 00:01:32,150 --> 00:01:34,010 Contador 3, la cuenta está bien hecha. 41 00:01:34,870 --> 00:01:36,090 Pero aquí me he parado. 42 00:01:36,090 --> 00:01:38,469 luego el for termina 43 00:01:38,469 --> 00:01:40,549 y no llega a contabilizar 44 00:01:40,549 --> 00:01:42,709 el final, esta parte 45 00:01:42,709 --> 00:01:44,170 no llega a contabilizarla 46 00:01:44,170 --> 00:01:46,450 con lo cual 47 00:01:46,450 --> 00:01:47,989 cuando yo termine el for 48 00:01:47,989 --> 00:01:49,349 aquí en este punto 49 00:01:49,349 --> 00:01:51,209 cuando yo he terminado 50 00:01:51,209 --> 00:01:53,430 lo que me falta es 51 00:01:53,430 --> 00:01:56,170 concatenar el último carácter 52 00:01:56,170 --> 00:01:58,150 el último carácter de la cadena 53 00:01:58,150 --> 00:02:00,430 con el valor con el que se haya quedado 54 00:02:00,430 --> 00:02:02,250 el contador, con el que sea 55 00:02:02,250 --> 00:02:03,230 con el que se haya quedado 56 00:02:03,230 --> 00:02:05,670 el problema es 57 00:02:05,670 --> 00:02:07,409 que como es en el else 58 00:02:07,409 --> 00:02:08,550 donde yo concateno 59 00:02:08,550 --> 00:02:11,310 aquí no ha habido else 60 00:02:11,310 --> 00:02:12,430 aquí no ha habido 61 00:02:12,430 --> 00:02:15,650 entonces me falta esta última concatenación 62 00:02:15,650 --> 00:02:16,550 al salir del for 63 00:02:16,550 --> 00:02:19,250 bueno pues tiene pinta de que eso es lo que me falta 64 00:02:19,250 --> 00:02:20,870 entonces 65 00:02:20,870 --> 00:02:26,979 vale pues termino del for 66 00:02:26,979 --> 00:02:29,520 y ahora a result 67 00:02:29,520 --> 00:02:31,099 más 68 00:02:31,099 --> 00:02:31,979 igual 69 00:02:31,979 --> 00:02:34,879 cadena punto 70 00:02:34,879 --> 00:02:36,919 char at la última 71 00:02:36,919 --> 00:02:38,740 posición que la última posición 72 00:02:38,740 --> 00:02:39,319 será 73 00:02:39,319 --> 00:02:42,780 cat.length menos 1 74 00:02:42,780 --> 00:02:44,639 esta es la última posición 75 00:02:44,639 --> 00:02:46,719 concatenado 76 00:02:46,719 --> 00:02:48,719 cuidado con el 77 00:02:48,719 --> 00:02:51,280 la concatenación 78 00:02:51,280 --> 00:02:52,979 de nuevo, concatenado con el 79 00:02:52,979 --> 00:02:55,300 valor con el que se haya quedado contador 80 00:02:55,300 --> 00:02:57,039 con el valor con el 81 00:02:57,039 --> 00:02:58,680 que se haya quedado contador 82 00:02:58,680 --> 00:03:03,900 vale, me falta la 83 00:03:03,900 --> 00:03:05,900 concatenación de la última porción 84 00:03:05,900 --> 00:03:10,530 vale 85 00:03:10,530 --> 00:03:12,889 vamos a hacer la prueba ahora 86 00:03:12,889 --> 00:03:24,300 vale, ahora ya parece que si 87 00:03:24,300 --> 00:03:29,120 Aún así sería interesante hacer una última prueba 88 00:03:29,120 --> 00:03:30,159 Porque con lo que yo he dicho es 89 00:03:30,159 --> 00:03:36,300 Uy, ¿y qué pasa cuando el último carácter va solo, el solito? 90 00:03:38,139 --> 00:03:39,840 Cuando el último carácter va solo 91 00:03:39,840 --> 00:03:41,680 Por ejemplo, en esta cadena 92 00:03:41,680 --> 00:03:51,819 Vale, en esta cadena en la cual el último carácter va él solo 93 00:03:51,819 --> 00:03:54,319 ¿Aquí cómo habrá funcionado el for? 94 00:04:01,819 --> 00:04:03,699 Aquí el for habrá funcionado 95 00:04:03,699 --> 00:04:07,060 Para la b va avanzando, va contando 96 00:04:07,060 --> 00:04:27,500 En la última B, ¿tú eres igual que el siguiente? No. Con lo cual se va al else, concatena la B con los demás. Y ya no vuelve a entrar en el bucle, porque está en el pelúltimo, ya no vuelve a entrar. Pero es que para este caso la concatenación final también encaja, porque la concatenación final va a concatenar el último carácter, justo el que yo quiero. 97 00:04:27,500 --> 00:04:29,360 ¿Y con qué va a concatenar? 98 00:04:29,740 --> 00:04:31,980 Con el contador que se había inicializado 99 00:04:31,980 --> 00:04:32,879 Y se había quedado a 1 100 00:04:32,879 --> 00:04:35,100 Se había inicializado y se había quedado a 1 101 00:04:35,100 --> 00:04:36,240 Porque veníamos de 102 00:04:36,240 --> 00:04:38,699 Terminar de contar eso 103 00:04:38,699 --> 00:04:41,240 Luego no tengo ni que cambiar nada 104 00:04:41,240 --> 00:04:43,220 Para este caso raro que se me puede ocurrir 105 00:04:43,220 --> 00:04:44,720 Que el último tenga solo una posición 106 00:04:44,720 --> 00:04:46,920 No tengo ni que cambiar nada, vamos a probarlo 107 00:04:46,920 --> 00:04:48,980 De hecho, con este 108 00:04:48,980 --> 00:04:50,360 Pues efectivamente 109 00:04:50,360 --> 00:04:53,560 Vale, pues ya lo tengo 110 00:04:53,560 --> 00:04:54,819 Ahora solamente me falta 111 00:04:54,819 --> 00:04:57,100 ¿Qué cadena muestro? 112 00:04:57,100 --> 00:04:58,879 Depende de cuál sea más corta, ¿verdad? 113 00:05:00,680 --> 00:05:02,480 Entonces aquí podríamos poner 114 00:05:02,480 --> 00:05:05,680 Result.length 115 00:05:05,680 --> 00:05:07,860 Es 116 00:05:07,860 --> 00:05:10,920 Menor 117 00:05:10,920 --> 00:05:13,879 Que cat.length 118 00:05:13,879 --> 00:05:17,100 Pues en ese caso 119 00:05:17,100 --> 00:05:18,980 Muestras 120 00:05:18,980 --> 00:05:20,879 La más pequeña 121 00:05:20,879 --> 00:05:21,620 Result 122 00:05:21,620 --> 00:05:24,139 Y si no muestras cat 123 00:05:24,139 --> 00:05:26,279 Tienes que mostrar la más pequeña de las dos siempre, ¿verdad? 124 00:05:27,100 --> 00:05:49,410 Vale, pues en función de cuál sea más cortita, muestras o result o muestras cat, que lo hacéis en un if, si result length es menor que cat length, pues da igual, vale, esto es acortar el if solamente, es hacerlo más corto el if. 125 00:05:49,410 --> 00:06:01,490 vale, entonces 126 00:06:01,490 --> 00:06:03,670 en esta por ejemplo 127 00:06:03,670 --> 00:06:06,290 me va a mostrar lógicamente la resultante 128 00:06:06,290 --> 00:06:08,029 pero 129 00:06:08,029 --> 00:06:09,430 si yo le pongo una 130 00:06:09,430 --> 00:06:11,589 en la que sea 131 00:06:11,589 --> 00:06:16,029 esta más corta, que puede ser 132 00:06:16,850 --> 00:06:24,680 ABC, va a ser esta más corta 133 00:06:24,680 --> 00:06:26,000 que A1, B1, C1 134 00:06:26,000 --> 00:06:27,600 pues me muestra ABC 135 00:06:27,600 --> 00:06:35,100 bueno, pues esta es la versión 136 00:06:35,100 --> 00:06:36,199 más cortita, yo creo 137 00:06:36,199 --> 00:06:39,439 cada carácter con su siguiente 138 00:06:39,439 --> 00:06:40,800 y contamos 139 00:06:40,800 --> 00:06:43,519 cuando ya hayamos encontrado un carácter 140 00:06:43,519 --> 00:06:44,860 que no es igual que su siguiente 141 00:06:44,860 --> 00:06:47,759 actualizamos 142 00:06:47,759 --> 00:06:49,899 el resultado concatenando lo que toque 143 00:06:49,899 --> 00:06:50,839 y reiniciamos cuenta 144 00:06:50,839 --> 00:06:52,019 y ya está 145 00:06:52,019 --> 00:07:11,050 bueno 146 00:07:11,050 --> 00:07:13,850 aquí la gran mayoría 147 00:07:13,850 --> 00:07:16,050 lo habéis convertido a char de caracteres 148 00:07:16,050 --> 00:07:17,649 para contar no sé qué con lo cual ahí 149 00:07:17,649 --> 00:07:19,629 uno se metía en un berenjenal un poco raro 150 00:07:19,629 --> 00:07:21,870 pero del que igual se podía sobrevivir 151 00:07:21,870 --> 00:07:24,250 Pues vamos a meternos en ese berenjenal, a ver si sobrevivimos 152 00:07:24,250 --> 00:07:26,189 Vamos a 153 00:07:26,189 --> 00:07:28,069 Hacerlo pues 154 00:07:28,069 --> 00:07:29,810 Pasándolo a Ray de Char 155 00:07:29,810 --> 00:07:31,970 Contando Char del Array 156 00:07:31,970 --> 00:07:34,569 Vamos a meternos ahí en ese jardín 157 00:07:34,569 --> 00:07:35,230 A ver qué pasa 158 00:07:35,230 --> 00:07:42,170 Ejer 2, versión 2 159 00:07:42,170 --> 00:07:47,129 Versión 2 160 00:07:47,129 --> 00:07:49,290 Larga y retorcida, pero bueno 161 00:07:49,290 --> 00:07:51,509 Introducir cadena 162 00:07:51,509 --> 00:07:54,970 Y cadena resultante 163 00:07:54,970 --> 00:07:56,670 Esto va a ser lo mismo 164 00:07:56,670 --> 00:08:04,240 Ay, se me ha olvidado el escáner 165 00:08:04,240 --> 00:08:16,810 Vale, pues muchos habéis hecho 166 00:08:16,810 --> 00:08:19,470 Habéis trasladado esta cadena a un array de char 167 00:08:19,470 --> 00:08:22,509 Para luego recorrer el array 168 00:08:22,509 --> 00:08:24,550 E ir contando o algo así, supongo 169 00:08:24,550 --> 00:08:26,310 Venga, pues vamos a trasladar 170 00:08:26,310 --> 00:08:27,930 Esta cadena a un array de char 171 00:08:27,930 --> 00:08:29,449 Que en realidad no hace falta 172 00:08:29,449 --> 00:08:31,310 Porque igual que recorres un array de char 173 00:08:31,310 --> 00:08:32,649 Puedes ir recorriendo la cadena 174 00:08:32,649 --> 00:08:33,669 Puedes ir, pero bueno 175 00:08:33,669 --> 00:08:35,850 Para, yo que sé 176 00:08:35,850 --> 00:08:38,850 Movernos con más tipos de variables 177 00:08:38,850 --> 00:08:39,549 Vamos a hacerlo 178 00:08:39,549 --> 00:08:48,009 Pues entonces, habéis hecho un array de char con los caracteres 179 00:08:48,009 --> 00:08:51,809 ¿Qué tamaño tendrá que tener este array de char? 180 00:08:51,909 --> 00:08:56,250 Pues este array de char tendrá que tener lo mismo que la longitud de la cadena 181 00:08:56,250 --> 00:09:05,570 Ah, la tenemos un array de char con tantas posiciones 182 00:09:05,570 --> 00:09:08,090 Como longitud tenga la cadena 183 00:09:08,090 --> 00:09:11,370 y ahora vamos a guardar 184 00:09:11,370 --> 00:09:13,009 cada carácter 185 00:09:13,009 --> 00:09:14,990 de cada posición de la cadena 186 00:09:14,990 --> 00:09:16,309 en una posición de la raíz 187 00:09:16,309 --> 00:09:28,710 pues aquí 188 00:09:28,710 --> 00:09:31,870 caracteres de i 189 00:09:31,870 --> 00:09:34,850 igual a 190 00:09:34,850 --> 00:09:37,789 cat.charat 191 00:09:37,789 --> 00:09:38,730 i 192 00:09:38,730 --> 00:09:43,029 bueno, pues ya tenemos una raíz de char 193 00:09:43,029 --> 00:09:45,370 con todos los caracteres 194 00:09:45,370 --> 00:09:47,110 ya para maniobrar con él 195 00:09:47,110 --> 00:09:48,409 hacer cuentas o lo que sea 196 00:09:48,409 --> 00:09:50,870 entonces aquí más o menos 197 00:09:50,870 --> 00:09:52,549 lo que entiendo que 198 00:09:52,549 --> 00:09:54,269 habéis venido a pensar es 199 00:09:54,269 --> 00:09:56,710 me voy a ir carácter por carácter 200 00:09:56,710 --> 00:09:58,470 del array contando 201 00:09:58,470 --> 00:09:59,509 cuántas veces aparece 202 00:09:59,509 --> 00:10:01,789 y con ese resultado 203 00:10:01,789 --> 00:10:04,470 voy concatenando aquí 204 00:10:04,470 --> 00:10:06,690 pues venga, vamos a hacer eso 205 00:10:06,690 --> 00:10:10,669 para cada, aquí ya como vamos 206 00:10:10,669 --> 00:10:12,190 a contar, vamos a, pero bueno 207 00:10:12,190 --> 00:10:14,269 podríamos hacerlo con otro tipo de for 208 00:10:14,269 --> 00:10:16,230 vamos a recorrer para cada 209 00:10:16,230 --> 00:10:19,960 carácter del array 210 00:10:19,960 --> 00:10:22,379 en posición 211 00:10:22,379 --> 00:10:28,250 y, vale 212 00:10:28,250 --> 00:10:29,549 pues que es lo primero que hacemos 213 00:10:29,549 --> 00:10:32,789 vamos a contar cuantas veces aparece 214 00:10:32,789 --> 00:10:39,289 aparece 215 00:10:39,289 --> 00:10:41,250 caracteres 216 00:10:42,070 --> 00:10:43,230 de y 217 00:10:43,230 --> 00:10:44,929 vamos a contar 218 00:10:44,929 --> 00:10:47,110 cuantas veces aparece caracteres de y 219 00:10:47,110 --> 00:10:49,009 y luego 220 00:10:49,009 --> 00:10:51,190 concatenamos caracteres de y al patrón 221 00:10:51,190 --> 00:10:52,950 pero claro, habrá que tener cuidado que 222 00:10:52,950 --> 00:10:55,009 cuando hay repetidos, pues a ver cómo hacemos 223 00:10:55,009 --> 00:10:56,909 venga, por lo pronto vamos a contar 224 00:10:56,909 --> 00:10:58,710 cuántas veces aparece caracteres de i 225 00:10:58,710 --> 00:11:01,269 pues una cuenta, pues no me queda 226 00:11:01,269 --> 00:11:02,450 más remedio que un contador 227 00:11:02,450 --> 00:11:05,009 y ahora 228 00:11:05,009 --> 00:11:07,230 para contar, pues tendré 229 00:11:07,230 --> 00:11:09,009 que recorrer el array otra vez 230 00:11:09,009 --> 00:11:13,100 una cuenta implica un bucle 231 00:11:13,100 --> 00:11:13,840 lógicamente 232 00:11:13,840 --> 00:11:16,000 entonces 233 00:11:16,000 --> 00:11:19,610 si 234 00:11:19,610 --> 00:11:22,850 caracteres 235 00:11:22,850 --> 00:11:24,850 de i, que es el que estoy 236 00:11:24,850 --> 00:11:26,730 contando cuántas veces aparece 237 00:11:26,730 --> 00:11:28,850 es igual 238 00:11:28,850 --> 00:11:31,190 que caracteres 239 00:11:31,190 --> 00:11:32,309 de j 240 00:11:32,309 --> 00:11:36,070 pues cont 241 00:11:36,070 --> 00:11:37,389 más más 242 00:11:37,389 --> 00:11:44,220 vale, luego este bucle 243 00:11:44,220 --> 00:11:45,960 de aquí, si no me 244 00:11:45,960 --> 00:11:48,320 he equivocado, me cuenta 245 00:11:48,320 --> 00:11:50,100 cuántas veces aparece 246 00:11:50,100 --> 00:11:52,220 el carácter caracteres de i 247 00:11:52,220 --> 00:11:54,279 en mi array 248 00:11:54,279 --> 00:11:55,080 de caracteres 249 00:11:55,080 --> 00:11:58,220 empieza con el contador 250 00:11:58,220 --> 00:11:59,639 a cero y ahora recorre 251 00:11:59,639 --> 00:12:07,580 Todo el array de caracteres y cada carácter que encuentra igual a aquel que estoy contando, igual a aquel que estoy contando lo cuenta. 252 00:12:08,860 --> 00:12:13,379 Vale, pues entonces aquí ya podríamos hacer una primera actualización del resultado. 253 00:12:14,320 --> 00:12:22,700 Result más igual caracteres de i que aparece, ¿cuántas veces aparece caracteres de i? 254 00:12:23,480 --> 00:12:29,190 Aparece con veces, ¿vale? 255 00:12:29,190 --> 00:12:35,559 lo que pasa es que bueno, aquí ya podemos intuir 256 00:12:35,559 --> 00:12:37,440 que vamos a tener un pequeño problemilla 257 00:12:37,440 --> 00:12:39,399 vamos a mostrar result 258 00:12:39,399 --> 00:12:41,419 a ver cuánto sale, pero bueno 259 00:12:41,419 --> 00:12:42,799 podría ser un primer esbozo 260 00:12:42,799 --> 00:12:45,580 cada carácter cuento cuántas veces aparece 261 00:12:45,580 --> 00:12:47,379 una vez que he terminado de contarlo 262 00:12:47,379 --> 00:12:49,639 lo concateno al resultado con su cuenta 263 00:12:49,639 --> 00:12:51,399 y así con todos 264 00:12:51,399 --> 00:12:53,720 ya podemos intuir que un pequeño problemilla 265 00:12:53,720 --> 00:12:55,480 va a haber porque el mismo carácter vamos a estar contando 266 00:12:55,480 --> 00:12:57,879 un montón de veces, pero bueno, vamos a comprobarlo 267 00:12:57,879 --> 00:12:58,519 ejecutando 268 00:12:58,519 --> 00:13:01,639 ejecutamos esto 269 00:13:01,639 --> 00:13:08,409 Venga, me voy a hacer 270 00:13:08,409 --> 00:13:15,090 Vale, en este caso de prueba 271 00:13:15,090 --> 00:13:16,929 Uh, me ha funcionado 272 00:13:16,929 --> 00:13:18,909 Claro, me ha funcionado porque hemos hecho 273 00:13:18,909 --> 00:13:20,169 Un caso de prueba 274 00:13:20,169 --> 00:13:23,529 A propósito, en el cual cada carácter 275 00:13:23,529 --> 00:13:24,950 Aparece solo una vez 276 00:13:24,950 --> 00:13:26,289 Solo una vez 277 00:13:26,289 --> 00:13:28,950 Vale, pero bueno 278 00:13:28,950 --> 00:13:30,730 Uno hace las pruebas teniendo más casos de prueba 279 00:13:30,730 --> 00:13:33,350 Vamos ahora a hacer este 280 00:13:33,350 --> 00:13:35,149 BBBNN 281 00:13:35,149 --> 00:13:37,250 Pues claro 282 00:13:37,250 --> 00:13:38,029 Veo el problema 283 00:13:38,029 --> 00:13:40,070 El carácter A 284 00:13:40,070 --> 00:13:42,149 me lo está contando 285 00:13:42,149 --> 00:13:43,549 5 veces 286 00:13:43,549 --> 00:13:46,110 A5, A5, A5, A5, A5 287 00:13:46,110 --> 00:13:47,549 B, claro 288 00:13:47,549 --> 00:13:49,649 todas estas me sobran 289 00:13:49,649 --> 00:13:51,169 ¿vale? 290 00:13:51,690 --> 00:13:56,860 y todas estas de aquí 291 00:13:56,860 --> 00:13:58,120 me sobran también 292 00:13:58,120 --> 00:14:01,000 entonces, aquí hay cosas que me está haciendo mal 293 00:14:01,000 --> 00:14:02,320 ¿vale? 5A5 294 00:14:02,320 --> 00:14:04,700 estos 2B3 me sobran 295 00:14:04,700 --> 00:14:06,399 y este N2 me sobra 296 00:14:06,399 --> 00:14:08,899 vale, era un poco de esperar 297 00:14:08,899 --> 00:14:09,700 ¿cuál es el problema? 298 00:14:10,200 --> 00:14:12,779 que cuando yo he terminado de contar un carácter 299 00:14:12,779 --> 00:14:15,139 ahora el for no me avanza al siguiente 300 00:14:15,139 --> 00:14:17,159 el for me tiene que avanzar 301 00:14:17,159 --> 00:14:18,779 al siguiente distinto 302 00:14:18,779 --> 00:14:20,080 ese es el único problema 303 00:14:20,080 --> 00:14:23,059 que una vez que ya he terminado, esta i la tengo 304 00:14:23,059 --> 00:14:24,980 que tocar, esta i la tengo 305 00:14:24,980 --> 00:14:27,059 que tocar para que en lugar de avanzar justo 306 00:14:27,059 --> 00:14:28,860 al siguiente, me avance 307 00:14:28,860 --> 00:14:30,220 al siguiente distinto 308 00:14:30,220 --> 00:14:32,960 ¿vale? entonces para 309 00:14:32,960 --> 00:14:34,840 eso podríamos usar el propio cont 310 00:14:34,840 --> 00:14:36,840 ¿verdad? porque cont 311 00:14:36,840 --> 00:14:38,799 sé que es las veces que me aparece el carácter 312 00:14:38,799 --> 00:14:40,360 entonces ¿cómo retocaríais aquí 313 00:14:40,360 --> 00:14:46,879 Y para que Y dé un salto, dé un salto al siguiente distinto. 314 00:14:47,200 --> 00:14:48,799 Es decir, yo he parado en Y igual a 0. 315 00:14:49,759 --> 00:14:56,379 Para Y igual a 0, el carácter A que está en Y igual a 0, me ha aparecido 5 veces. 316 00:14:57,539 --> 00:14:59,259 Luego mi contador va a ser 5. 317 00:14:59,799 --> 00:15:06,159 Luego la Y quiero que me salte ahora ya 0, 1, 2, 3, 4 a la posición 5. 318 00:15:06,159 --> 00:15:08,740 Partiendo de i igual a 0 319 00:15:08,740 --> 00:15:09,779 De una i original 320 00:15:09,779 --> 00:15:12,259 Cuando contador es 5 321 00:15:12,259 --> 00:15:13,799 Quiero que me salte a la 5 322 00:15:13,799 --> 00:15:15,799 ¿Qué regla más o menos? 323 00:15:26,210 --> 00:15:26,730 ¿Probamos? 324 00:15:34,600 --> 00:15:36,840 Ahí tengo 5 aes, 3 bes 325 00:15:36,840 --> 00:15:39,500 Y 2 ces 326 00:15:39,500 --> 00:15:42,259 A5, b3 327 00:15:42,259 --> 00:15:45,250 ¿Eh? 328 00:15:47,549 --> 00:15:51,720 Vale 329 00:15:51,720 --> 00:15:53,960 Algo tenemos que seguir arreglando 330 00:15:53,960 --> 00:15:54,139 ¿No? 331 00:16:03,600 --> 00:16:04,159 Sí 332 00:16:04,159 --> 00:16:07,100 Vale, entonces 333 00:16:07,100 --> 00:16:10,100 ¿Cuál es nuestro problema? 334 00:16:10,659 --> 00:16:12,759 Pues efectivamente, cuando estamos contando el primero 335 00:16:12,759 --> 00:16:14,159 A igual a 0, vale 336 00:16:14,159 --> 00:16:16,220 Pues se va a la 5, muy bien 337 00:16:16,220 --> 00:16:19,039 Y más igual a 0 338 00:16:19,039 --> 00:16:20,200 Me aparece con 339 00:16:20,200 --> 00:16:22,539 5 veces 340 00:16:22,539 --> 00:16:25,580 0 más 5 se va al 5 341 00:16:25,580 --> 00:16:30,590 0, 1, 2, 3, 4, 5 342 00:16:30,590 --> 00:16:32,850 Vale, entonces 343 00:16:32,850 --> 00:16:39,950 Venga, haced el cambio vosotros 344 00:16:39,950 --> 00:16:42,289 Ay, mierda, no había cambiado esto 345 00:16:42,289 --> 00:16:47,340 Me cago en la... ¿Vale? 346 00:16:48,779 --> 00:16:49,919 Pues cuatro puntos 347 00:16:49,919 --> 00:16:50,919 Vamos al siguiente 348 00:16:50,919 --> 00:16:53,299 Y nos vamos 349 00:16:53,299 --> 00:16:56,440 El siguiente 350 00:16:56,440 --> 00:17:00,139 Un array 351 00:17:00,139 --> 00:17:01,980 Con n números 352 00:17:01,980 --> 00:17:03,820 Y ahora vamos a ver si hay alguno 353 00:17:03,820 --> 00:17:05,500 Que aparezca más de n medios 354 00:17:05,500 --> 00:17:07,460 Y si lo hay, decirlo 355 00:17:07,460 --> 00:17:08,940 Con lo cual es un array contar 356 00:17:08,940 --> 00:17:11,079 Es lo mismo que hemos hecho antes 357 00:17:11,079 --> 00:17:12,799 un array y contar 358 00:17:12,799 --> 00:17:14,380 cada elemento 359 00:17:14,380 --> 00:17:17,640 si alguno aparece más de n medios 360 00:17:17,640 --> 00:17:19,680 pues es mayoritario y se acabó 361 00:17:19,680 --> 00:17:21,880 pues venga, vamos a hacer lo mismo 362 00:17:21,880 --> 00:17:23,180 es prácticamente lo mismo 363 00:17:23,180 --> 00:17:38,640 venga, array de enteros 364 00:17:38,640 --> 00:17:49,319 vale, decía que 365 00:17:49,319 --> 00:17:53,569 de n, pues venga 366 00:17:53,569 --> 00:17:56,029 tenemos que meter primero el número y luego rellenar el array 367 00:17:56,029 --> 00:17:59,069 pues le decimos antes que nada 368 00:17:59,069 --> 00:18:01,809 que nos meta el tamaño 369 00:18:01,809 --> 00:18:03,109 del array 370 00:18:03,109 --> 00:18:15,710 ahora ya 371 00:18:15,710 --> 00:18:17,369 declaramos el array 372 00:18:17,369 --> 00:18:20,170 de números 373 00:18:20,170 --> 00:18:21,910 igual a new int 374 00:18:21,910 --> 00:18:24,410 de n mayúscula 375 00:18:24,410 --> 00:18:27,849 y ahora ya si 376 00:18:27,849 --> 00:18:28,910 rellenamos el array 377 00:18:28,910 --> 00:18:43,319 si claro 378 00:18:43,319 --> 00:18:45,980 porque no puede haber dos que aparezcan más de la mitad 379 00:18:45,980 --> 00:18:47,299 de las veces, no cabrían 380 00:18:47,299 --> 00:18:49,779 claro, entonces en cuanto encuentras uno 381 00:18:49,779 --> 00:18:51,420 ya puedes dejar 382 00:18:51,420 --> 00:19:00,039 Vale, pues ahora rellenamos simplemente 383 00:19:00,039 --> 00:19:05,930 Número 384 00:19:05,930 --> 00:19:09,950 Y ahora en números de i 385 00:19:09,950 --> 00:19:15,410 Next int 386 00:19:15,410 --> 00:19:18,150 Vale, está relleno, ahora vamos por partes 387 00:19:18,150 --> 00:19:21,930 Pues ahora una idea parecida a la anterior 388 00:19:21,930 --> 00:19:25,829 Para cada número vamos a contar cuántas veces aparece 389 00:19:25,829 --> 00:19:30,349 Si ese número apareciera más de la mitad de las veces 390 00:19:30,349 --> 00:19:32,769 Ya tenemos el mayoritario, lo mostramos 391 00:19:32,769 --> 00:19:36,650 Y ya podemos avisar 392 00:19:36,650 --> 00:19:38,150 Con un boolean de que ya está encontrado 393 00:19:38,150 --> 00:19:39,490 Para que el forno siga y se pare 394 00:19:39,490 --> 00:19:40,630 Y ya está 395 00:19:40,630 --> 00:19:44,029 Vale, pues entonces vamos a hacer primero 396 00:19:44,029 --> 00:19:46,329 Esa primera idea, la de la cuenta 397 00:19:46,329 --> 00:19:48,650 Pues recorremos 398 00:19:48,650 --> 00:19:51,329 Nuestro array de números.length 399 00:19:51,329 --> 00:20:02,529 Vale, pues vamos a 400 00:20:02,529 --> 00:20:04,250 Contar lo que aparece 401 00:20:04,250 --> 00:20:05,150 Cada número 402 00:20:05,150 --> 00:20:06,869 Pues lo mismo 403 00:20:06,869 --> 00:20:09,150 Vamos a hacer una cuenta 404 00:20:09,150 --> 00:20:33,900 Pues si números de i resulta que es igual a números de j 405 00:20:33,900 --> 00:20:40,940 Ese número tiene una nueva aparición 406 00:20:40,940 --> 00:20:46,759 Cuando este bucle fuera terminado, cont es la cantidad de veces que aparecen números de i 407 00:20:46,759 --> 00:20:50,960 Vamos a ver si números de i fuera entonces el mayoritario 408 00:20:52,700 --> 00:20:55,480 Pues si cont, que es el número de veces que aparece 409 00:20:55,480 --> 00:20:59,160 resulta que es mayor que 410 00:20:59,160 --> 00:21:02,359 n entre 2 411 00:21:02,359 --> 00:21:11,079 pues entonces ya podríamos dar la información 412 00:21:11,079 --> 00:21:12,640 porque ya lo tenemos al número 413 00:21:12,640 --> 00:21:28,880 ya podríamos dar la información, existe mayoritario 414 00:21:28,880 --> 00:21:32,059 y ya de paso vamos a mostrarlo, que sería cual, números de i 415 00:21:32,059 --> 00:21:38,799 voy a poner el mensaje aquí abajo, existe mayoritario 416 00:21:38,799 --> 00:21:41,380 Y además ese mayoritario sería números de i 417 00:21:41,380 --> 00:21:44,359 Entonces una vez que ya lo he encontrado 418 00:21:44,359 --> 00:21:45,920 Ya no quiero seguir con el for 419 00:21:45,920 --> 00:21:47,640 Ya está, ya he encontrado uno 420 00:21:47,640 --> 00:21:50,480 Entonces pues bueno, lo ideal es que yo aquí incorpore 421 00:21:50,480 --> 00:21:51,839 Un boolean 422 00:21:51,839 --> 00:21:53,579 Para decir, ya lo he encontrado 423 00:21:53,579 --> 00:22:01,640 Ya lo he encontrado 424 00:22:01,640 --> 00:22:02,720 Con lo cual 425 00:22:02,720 --> 00:22:04,319 Mi boolean 426 00:22:04,319 --> 00:22:07,660 No lo declararía aquí, lógicamente 427 00:22:07,660 --> 00:22:11,079 Lo declararía aquí fuera 428 00:22:11,079 --> 00:22:12,440 Encontrado 429 00:22:12,440 --> 00:22:17,299 Igual a false 430 00:22:17,299 --> 00:22:19,279 Con lo cual 431 00:22:19,279 --> 00:22:21,259 Ya puedo incorporarlo aquí en el form 432 00:22:21,259 --> 00:22:23,579 Voy número por número 433 00:22:23,579 --> 00:22:24,759 Contando cuándo desaparece 434 00:22:24,759 --> 00:22:25,779 A ver si es mayoritario 435 00:22:25,779 --> 00:22:27,339 Mientras no haya llegado al final 436 00:22:27,339 --> 00:22:30,900 Y además de no haber llegado al final 437 00:22:30,900 --> 00:22:33,359 No haya encontrado el número 438 00:22:33,359 --> 00:22:34,640 Pues sigue 439 00:22:34,640 --> 00:22:35,599 Sigue buscando 440 00:22:35,599 --> 00:22:38,059 Mientras no hayas llegado al final 441 00:22:38,059 --> 00:22:40,460 Y no lo hayas encontrado 442 00:22:40,460 --> 00:22:42,339 Pues sigue, sigue y sigue 443 00:22:42,339 --> 00:22:47,049 Seguro 444 00:22:47,049 --> 00:22:49,569 Vamos, faltaría más 445 00:22:49,569 --> 00:22:50,630 Se va a preocupar por ver un bullying 446 00:22:50,630 --> 00:22:53,029 Vale 447 00:22:53,029 --> 00:22:58,630 Bueno, pues ahora 448 00:22:58,630 --> 00:23:00,349 Cuando el for termina 449 00:23:00,349 --> 00:23:02,990 Puede que hayamos salido por aquí 450 00:23:02,990 --> 00:23:05,509 Con lo cual ya habremos soltado la solución 451 00:23:05,509 --> 00:23:07,130 Puede que hayamos salido por ahí 452 00:23:07,130 --> 00:23:08,529 En ese caso encontrado sea true 453 00:23:08,529 --> 00:23:11,430 Pero puede que hayamos recorrido el for entero 454 00:23:11,430 --> 00:23:13,829 Y nunca jamás hayamos salido por ahí 455 00:23:13,829 --> 00:23:14,529 Nunca jamás 456 00:23:14,529 --> 00:23:16,789 Porque no hayamos encontrado al mayoritario 457 00:23:16,789 --> 00:23:19,069 En ese caso encontrado seguiría siendo falso 458 00:23:19,069 --> 00:23:21,589 Pues ese boolean nos es súper útil 459 00:23:21,589 --> 00:23:24,450 Para ahora decir no existe el mayoritario 460 00:23:24,450 --> 00:23:25,470 ¿Vale? 461 00:23:26,490 --> 00:23:27,410 Ahora digo yo 462 00:23:27,410 --> 00:23:28,650 Si no he encontrado 463 00:23:28,650 --> 00:23:35,609 Pues no ha existido 464 00:23:35,609 --> 00:23:45,440 Y ya está, ya habría terminado el programa 465 00:23:45,440 --> 00:23:56,599 ¿Vale? Pues de nuevo 466 00:23:56,599 --> 00:23:58,319 Voy número por número 467 00:23:58,319 --> 00:23:59,579 Me hago la cuenta 468 00:23:59,579 --> 00:24:02,859 Si cumple la condición 469 00:24:02,859 --> 00:24:04,619 Que yo estoy buscando 470 00:24:04,619 --> 00:24:05,660 Si la cumple 471 00:24:05,660 --> 00:24:07,519 Marco, ya está 472 00:24:07,519 --> 00:24:10,160 esa marca es fundamental 473 00:24:10,160 --> 00:24:12,299 para que el for termine 474 00:24:12,299 --> 00:24:14,119 para luego yo al salir del for 475 00:24:14,119 --> 00:24:16,700 saber si eso ha ocurrido 476 00:24:16,700 --> 00:24:18,579 o no ha ocurrido, esta marca es fundamental 477 00:24:18,579 --> 00:24:20,700 porque si no yo aquí no podría 478 00:24:20,700 --> 00:24:22,559 avisar de que no ha habido 479 00:24:22,559 --> 00:24:24,279 bueno, marco 480 00:24:24,279 --> 00:24:26,359 y ya no solo marco, sino que además ya puedo 481 00:24:26,359 --> 00:24:27,819 dar el resultado directamente 482 00:24:27,819 --> 00:24:32,680 bueno, pues 483 00:24:32,680 --> 00:24:33,539 otros tres puntos 484 00:24:33,539 --> 00:24:36,880 sí 485 00:24:36,880 --> 00:24:40,759 espera, vamos a probarlo 486 00:24:40,759 --> 00:24:42,619 porque antes para asegurar de que no 487 00:24:42,619 --> 00:24:44,059 hemos hecho alguna burrada 488 00:24:44,059 --> 00:24:49,940 tamaño de la raíz, venga 489 00:24:49,940 --> 00:24:52,039 6, si yo pongo 490 00:24:52,039 --> 00:24:53,539 por ejemplo esto 491 00:24:53,539 --> 00:24:58,119 ninguno, es mayoritario 492 00:24:58,119 --> 00:24:59,859 vale, voy a hacer ahora un caso 493 00:24:59,859 --> 00:25:01,220 de prueba en el que sí que haya 494 00:25:01,220 --> 00:25:03,920 tamaño de la raíz 5 495 00:25:03,920 --> 00:25:05,880 y voy a hacer 496 00:25:05,880 --> 00:25:08,200 3, 3, 3 497 00:25:08,200 --> 00:25:10,019 2 y 1 498 00:25:10,019 --> 00:25:11,740 existe y es el 3 499 00:25:11,740 --> 00:25:13,859 bueno, no es que sean muchas pruebas 500 00:25:13,859 --> 00:25:15,599 pero como es un programa corto 501 00:25:15,599 --> 00:25:18,259 Podemos incluir 502 00:25:18,259 --> 00:25:21,119 ¿Habéis visto ya pruebas caja blanca, caja negra y todas esas cosas? 503 00:25:22,119 --> 00:25:23,440 Sí, sí, lo hemos visto 504 00:25:23,440 --> 00:25:24,299 Sí, pero teoría 505 00:25:24,299 --> 00:25:26,440 Claro, teniendo en cuenta 506 00:25:26,440 --> 00:25:31,539 Bueno, pues el número de casos de prueba 507 00:25:31,539 --> 00:25:35,059 El número de casos de prueba 508 00:25:35,059 --> 00:25:38,160 En general está en relación 509 00:25:38,160 --> 00:25:40,359 Con la cantidad de bucles anidados que haya 510 00:25:40,359 --> 00:25:43,200 Cuanto más bucles anidados hay, más casos de prueba 511 00:25:43,200 --> 00:25:45,480 Van a cubrir todos los caminos, ¿verdad? 512 00:25:45,599 --> 00:25:47,880 Cada bucle anidado, cada decisión abre un camino. 513 00:25:48,440 --> 00:25:51,119 Tendría que haber tantos casos de prueba como caminos posibles 514 00:25:51,119 --> 00:25:53,059 para que las pruebas fueran mínimamente correctas. 515 00:25:53,900 --> 00:25:56,759 Entonces, hombre, teniendo en cuenta que aquí hay un bucle anidado con otro, 516 00:25:56,839 --> 00:25:59,980 dos casos de prueba se queda corto, porque hay más de dos caminos. 517 00:26:00,660 --> 00:26:03,079 Pero bueno, lo damos por... 518 00:26:03,079 --> 00:26:04,119 ¿Cómo haría las pruebas? 519 00:26:04,339 --> 00:26:09,839 ¿En plan, necesitarías un bucle de siete y luego otro bucle dentro? 520 00:26:10,440 --> 00:26:12,220 ¿Sería siempre multiplicado por...? 521 00:26:12,220 --> 00:26:15,299 A ver, yo aquí, si uno se va a lo fácil, 522 00:26:15,599 --> 00:26:22,480 No las hace de caja blanca, sino de caja negra, que es, voy a buscar todos los casos raros que se me ocurran. 523 00:26:22,660 --> 00:26:30,680 Las de caja blanca son pruebas en las que tú tienes acceso al código y por tanto te haces un algoritmo para ver cuántos casos necesitas. 524 00:26:30,779 --> 00:26:35,720 Aquí tenemos acceso al código, hay un bucle foranidado, vas abriendo ramas, eso es un rollo patatero. 525 00:26:36,279 --> 00:26:39,079 Lo ideal es que te hagas casos de prueba extraños. 526 00:26:39,599 --> 00:26:40,980 ¿Aquí cuáles serían los extraños? 527 00:26:40,980 --> 00:26:45,099 Pues un array con un número diferente en cada posición. 528 00:26:45,599 --> 00:26:47,779 Un array con todos los números iguales. 529 00:26:48,180 --> 00:26:50,140 Un array con justo la mitad 530 00:26:50,140 --> 00:26:52,299 de números de cada uno. 531 00:26:53,099 --> 00:26:53,980 Lo más fácil es 532 00:26:53,980 --> 00:26:55,859 buscar los casos extremos 533 00:26:55,859 --> 00:26:58,480 y de esos incorporar todos los que puedas. 534 00:26:58,920 --> 00:27:00,160 Más que mirar el código 535 00:27:00,160 --> 00:27:01,940 y abrir los caminos, porque ahí te vuelves loco. 536 00:27:02,359 --> 00:27:03,279 ¿Hay algo que te lo hago automático? 537 00:27:03,700 --> 00:27:05,079 Sí, hombre, claro. 538 00:27:06,200 --> 00:27:07,539 Es que no he visto algo para eso. 539 00:27:07,660 --> 00:27:08,279 Hombre, claro. 540 00:27:09,240 --> 00:27:10,140 Sí, sí, sí. 541 00:27:13,140 --> 00:27:15,420 Claro, hay un montón de procedimientos 542 00:27:15,420 --> 00:27:16,359 de programas 543 00:27:16,359 --> 00:27:16,779 de pasos 544 00:27:16,779 --> 00:27:17,599 de un montón de cosas 545 00:27:17,599 --> 00:27:17,900 claro 546 00:27:17,900 --> 00:27:20,000 y es una fase 547 00:27:20,000 --> 00:27:21,059 muy importante 548 00:27:21,059 --> 00:27:22,200 porque es la que define 549 00:27:22,200 --> 00:27:23,480 si vas a vender 550 00:27:23,480 --> 00:27:24,180 una mierda 551 00:27:24,180 --> 00:27:24,779 vas a vender 552 00:27:24,779 --> 00:27:25,940 algo que está bien 553 00:27:25,940 --> 00:27:27,500 bueno 554 00:27:27,500 --> 00:27:28,559 pues ya habríamos acabado 555 00:27:28,559 --> 00:27:33,740 el examen 556 00:27:33,740 --> 00:27:34,299 comentarios