diff --git "a/Analizador L\303\251xico 2.php" "b/Analizador L\303\251xico 2.php" new file mode 100644 index 0000000..47c4686 --- /dev/null +++ "b/Analizador L\303\251xico 2.php" @@ -0,0 +1,23 @@ + 250) //Valido que la cadena no sea mayor a 250 caracteres + throw new Exception('La cadena excede los 250 caracteres.'); + else { + $indexes = preg_split("/\(\d+,\d+\)/", $row_str, null, PREG_SPLIT_OFFSET_CAPTURE); //Divido la cadena con una expresión regular y se guardan los resultados en un array + $count = count($indexes); + for($i = 1; $i < $count; $i++) { //Empiezo en 1 porque $indexes[0] no contiene ningun valor. + $coord_start = $indexes[$i-1][1] + strlen($indexes[$i-1][0]); + $coord_end = $indexes[$i][1]; + echo substr($row_str, $coord_start, $coord_end - $coord_start).' '.$indexes[$i][0]."\n"; //Hago un substring de la cadena inicial dividiendo las coordenadas y el texto por un espacio + } + } + } catch(Exception $e) { + echo 'Error: '.$e->getMessage()."\n"; //Imprimo la excepción + } + } + } + +Analyzer::process("(79,34)Holaefwefgw(10afef)(98,902843)oeijfwoijef(34,56)bingopingolingo"); \ No newline at end of file diff --git "a/Analizador L\303\251xico.js" "b/Analizador L\303\251xico.js" new file mode 100644 index 0000000..5aed185 --- /dev/null +++ "b/Analizador L\303\251xico.js" @@ -0,0 +1,36 @@ +var Analyzer = { + mainString: "", + indexes: [], //Utilizando un array y ciclos puedo procesar una cantidad n de líneas en lugar de sólo 3 + getIndexes: function() { //Esta función divide la cadena y guarda los índices de las líneas para imprimirlas psoteriormente + let pattern = /\(\d+,\d+\)/g; //Con esta Expresión Regular logro diferenciar el formato de las coordenadas del resto de la cadena + let mainLength = Analyzer.mainString.length, i = 0; + try { + if(mainLength>250) //Lanza un error si la cadena excede 250 caracteres + throw Error(); + while((coord = pattern.exec(Analyzer.mainString)) !== null) { //Recorro todas las coincidencias de "coordenadas" dentro de la cadena + let coordStart = coord.index; + let coordEnd = (coord.index+coord[0].length); + Analyzer.indexes.push({ coordStart, coordEnd, lineEnd: mainLength }); //Guardo los índices de donde empiezan y acaban las coordenadas y el texto de cada línea + if(i > 0) Analyzer.indexes[i-1].lineEnd = coordStart; //Para ahorrar ciclos asigno el final de la línea anterior como el inicio de la coordenada nueva + i++; + } + } catch(error) { //Si no se procesa correctamente la cadena, se pide que ingrese otra + Analyzer.getString("Formato no válido, ingresa otra cadena."); + } + }, + printOutput: function() { //Esta función imprime la cadena procesada con base en los índices previamente obtenidos + console.log("Cadena: "+Analyzer.mainString); + Analyzer.indexes.forEach(element => { //Recorro todas las líneas obtenidas + let coord = Analyzer.mainString.substring(element.coordStart, element.coordEnd); //Obtengo y guardo las coordenadas + let line = Analyzer.mainString.substring(element.coordEnd, element.lineEnd); //Obtengo y guardo el texto + console.log(coord+" "+line+"\n"); //Imprimo todo con el formato especificado + }); + }, + getString: function(promptText) { + Analyzer.mainString = prompt(promptText); //Pido al usuario que ingrese la cadena + Analyzer.getIndexes(); //Proceso la cadena + Analyzer.printOutput(); //Imprimo el resultado + } +} + +Analyzer.getString("Ingrese una cadena con el formato '(x1,y1)texto1(x2,y2)texto2(x3,y3)texto3'"); \ No newline at end of file diff --git "a/Capic\303\272a 2.php" "b/Capic\303\272a 2.php" new file mode 100644 index 0000000..9bfa86e --- /dev/null +++ "b/Capic\303\272a 2.php" @@ -0,0 +1,37 @@ + 10000) //Valido que el número sea mayor a 1 dígito y menor que 10,000 + throw new Exception('La cadena excede los 250 caracteres.'); + else { + $iteration = 0; + while(++$iteration) { //Un bucle infinito + $num += (int)strrev((string)$num); //Sumo el número inicial con su inverso + if(Capicua::isCapicua($num)){ //Reviso si la suma es capicúa + echo "{$num} {$iteration}"; + break; //Salgo del bucle + } + } + } + } + catch(Exception $e) { + echo 'Error: '.$e->getMessage()."\n"; //Imprimo la excepción + } + } +} + +Capicua::get(12); \ No newline at end of file diff --git "a/Capic\303\272a.js" "b/Capic\303\272a.js" new file mode 100644 index 0000000..b6134e8 --- /dev/null +++ "b/Capic\303\272a.js" @@ -0,0 +1,41 @@ +var Capicua = { + capicuaNum: 0, + iterations: 0, + isCapicua: function(num) { //Con este método reviso si el número es una Capicúa o no + let numStr = num.toString(); + let numHalf = Math.floor(numStr.length/2);//Redondeando ignoro el número de en medio en caso de ser impar + let firstHalf = numStr.slice(0, numHalf); + let secondHalf = numStr.slice(-numHalf); + let newHalf = Capicua.flipNumber(secondHalf).toString(); + return firstHalf===newHalf; + }, + flipNumber: function(num) { //Este método me regresa el mismo número que ingrese pero invertido + let numStr = num.toString(); + let flipped = ""; + for(let digit of numStr) //Recorro los dígitos del número + flipped = digit + flipped; //Guardo los dígitos en orden inverso + return parseInt(flipped); + }, + calculate: function(num) { //Con un bucle repito las iteraciones hasta conseguir una Capicúa + let suma = parseInt(num); + let iteration = 0; + do { //Realizo la suma de los números e incremento el número de iteraciones hasta que el resultado sea una Capicúa + suma = suma + Capicua.flipNumber(suma); + iteration++; + } while(!Capicua.isCapicua(suma)) + Capicua.capicuaNum = suma; + Capicua.iterations = iteration; + }, + printOutput: function() { //Imprimo el resultado solicitado + console.log(Capicua.capicuaNum + " " +Capicua.iterations ); + }, + getNumber: function(promptText) { //Pide el número y revisa que sea válido + let num = parseInt(prompt(promptText)); + if(num<10||num>10000||!Number.isInteger(num)) + Capicua.getNumber("Número no válido, intenta con otro"); + Capicua.calculate(num); //Calculo el NC y las iteraciones + Capicua.printOutput(); //Imprimo el resultado + } +} + +Capicua.getNumber("Ingresa un número entero de dos dígitos menor a 10,000"); \ No newline at end of file