Transfer to git
This commit is contained in:
273
archive/ver_1-until2feb2026/js/calc2.js
Normal file
273
archive/ver_1-until2feb2026/js/calc2.js
Normal file
@@ -0,0 +1,273 @@
|
||||
let queue = [];
|
||||
let final_queue = [];
|
||||
let resultado = 0;
|
||||
let cantidad_nums = 0;
|
||||
let operation_order = ['+','-','/','*','^'];
|
||||
let tally = 0;
|
||||
|
||||
function q_print(){
|
||||
for (k=0; k < queue.length; k++){
|
||||
setTimeout(console.log("Índice N°"+k+" es "+queue[k]),500);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
function a_print(array){
|
||||
for (k=0; k < array.length; k++){
|
||||
console.log("Índice N°"+k+" es "+array[k]);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
function q_display(q_array) {
|
||||
output.innerHTML = '';
|
||||
for (i=0; i < q_array.length; i++) {
|
||||
output.innerHTML += q_array[i];
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
function q_manage(type, item){
|
||||
if (type == 'add') {
|
||||
queue.push(item);
|
||||
q_display(queue);
|
||||
} else if (type == 'remove') {
|
||||
queue.splice(-1,1);
|
||||
q_display(queue);
|
||||
} else {
|
||||
output.innerHTML = 'Entrada inválida';
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
function a_concatnum(z_array) {
|
||||
let a_length = z_array.length;
|
||||
var a_concat = [];
|
||||
var cont = 0;
|
||||
var num = "";
|
||||
let j = 0;
|
||||
|
||||
z_array.push(true); // push something other than number or string to trigger last exectuion
|
||||
|
||||
for (i=0; i < a_length; i++){
|
||||
if (typeof(z_array[i]) == 'number'){
|
||||
cont++;
|
||||
} else {
|
||||
for (j=0; j < cont; j++){
|
||||
num = num + String(z_array[(j)]);
|
||||
}
|
||||
if (num != '') {
|
||||
a_concat.push(parseInt(num))
|
||||
}
|
||||
num = "";
|
||||
if (typeof(z_array[i] == 'string')) {
|
||||
a_concat.push(z_array[i]);
|
||||
}
|
||||
z_array.splice(0,cont+1);
|
||||
cont = 0;
|
||||
i=-1;
|
||||
a_length = z_array.length;
|
||||
}
|
||||
}
|
||||
z_array = a_concat;
|
||||
z_array.splice(-1,1); // remove that something i put in earlier
|
||||
return z_array;
|
||||
}
|
||||
|
||||
function a_split(l_array) {
|
||||
function a_search_char(s_array,char, direction_from,excluded_points){
|
||||
if (direction_from == 'right') {
|
||||
s_array.reverse();
|
||||
} else if (direction_from == 'left'){
|
||||
} else {
|
||||
output.innerHTML = 'Error en la dirección de búsqueda';
|
||||
}
|
||||
|
||||
outerLoop: for (i=0; i < s_array.length; i++){
|
||||
// Chequea si el punto encontrado está en la exclusión (para evitar repetidos)
|
||||
innerLoop: for (j=0; j <= excluded_points.length; j++){
|
||||
if (i == excluded_points[j]){
|
||||
continue outerLoop;
|
||||
}
|
||||
}
|
||||
if (s_array[i] == char) {
|
||||
if (direction_from == 'right'){
|
||||
return (s_array.length-i-1);
|
||||
}
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1; // No se ha encontrado
|
||||
}
|
||||
|
||||
function array_divider(a_array, d_points){
|
||||
let start = 0;
|
||||
let divided_array = [];
|
||||
for (i=0; i <= d_points.length; i++){
|
||||
|
||||
divided_array.push(a_array.slice(start,d_points[i]));
|
||||
start =+ d_points[i] +1;
|
||||
}
|
||||
return divided_array;
|
||||
}
|
||||
|
||||
/* Búsqueda de paréntesis
|
||||
No lo voy a implementar esto, es un montón, intenté pensar
|
||||
en un algoritmo pero no se me occurió, y busqué pero no quiero
|
||||
usar un algoritmo tipo Shuning Yard, la idea de este código es
|
||||
hacerlo sin ayudas, incluso si es ineficiente (este código tiene
|
||||
O^n execution time, más recursión tiene esta cosa. */
|
||||
|
||||
// Buscar puntos dónde se encuentran caracteres en un array
|
||||
function find_location_points(f_array,char) {
|
||||
let location_points = [];
|
||||
for (i=0; i < f_array.length; i++){
|
||||
let search_result = a_search_char(f_array,char,'left',location_points);
|
||||
// Break si ya no encuentra más
|
||||
if ( search_result == -1 ){
|
||||
break;
|
||||
} else {
|
||||
location_points.push(search_result);
|
||||
}
|
||||
}
|
||||
return location_points;
|
||||
}
|
||||
|
||||
function branch(b_array,char) {
|
||||
b_array = array_divider(
|
||||
b_array,
|
||||
find_location_points(b_array,char));
|
||||
return b_array;
|
||||
}
|
||||
|
||||
function branching(b2_array){
|
||||
// First
|
||||
b2_array = branch(b2_array,'+');
|
||||
|
||||
// Second
|
||||
for (l=0; l < b2_array.length; l++) {
|
||||
b2_array[l] = branch(b2_array[l],operation_order[1]);
|
||||
}
|
||||
|
||||
// Third
|
||||
for (k=0; k < b2_array.length; k++) {
|
||||
for (m=0; m < b2_array[k].length; m++){
|
||||
b2_array[k][m] = branch(b2_array[k][m],operation_order[2]);
|
||||
}
|
||||
}
|
||||
|
||||
// Fourth
|
||||
for (k=0; k < b2_array.length; k++) {
|
||||
for (m=0; m < b2_array[k].length; m++){
|
||||
for (n=0; n < b2_array[k][m].length; n++){
|
||||
b2_array[k][m][n] = branch(b2_array[k][m][n],operation_order[3]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fifth
|
||||
for (k=0; k < b2_array.length; k++) {
|
||||
for (m=0; m < b2_array[k].length; m++){
|
||||
for (n=0; n < b2_array[k][m].length; n++){
|
||||
for (o=0; o < b2_array[k][m][n].length; o++){
|
||||
b2_array[k][m][n][o] = branch(b2_array[k][m][n][o],operation_order[4]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return b2_array;
|
||||
|
||||
}
|
||||
l_array = branching(l_array);
|
||||
return l_array;
|
||||
}
|
||||
|
||||
function a_calculate(array) {
|
||||
// Exponenciation
|
||||
for (k=0; k < array.length; k++) {
|
||||
for (m=0; m < array[k].length; m++){
|
||||
for (n=0; n < array[k][m].length; n++){
|
||||
outerFor: for (o=0; o < array[k][m][n].length; o++){
|
||||
innerFor: for (z = 0; z < array[k][m][n][o].length; z++){
|
||||
// There is an extra [0] at the end of each exponenciation compensating extra nesting (?)
|
||||
if (array[k][m][n][o].length == 1){
|
||||
array[k][m][n][o] = array[k][m][n][o][0][0];
|
||||
continue outerFor;
|
||||
}
|
||||
array[k][m][n][o][0] = array[k][m][n][o][0][0] ** array[k][m][n][o][1][0];
|
||||
array[k][m][n][o].splice(1,1);
|
||||
}
|
||||
array[k][m][n][o] = array[k][m][n][o][0];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Multiplication
|
||||
for (k=0; k < array.length; k++) {
|
||||
for (m=0; m < array[k].length; m++){
|
||||
outerFor: for (n=0; n < array[k][m].length; n++){
|
||||
innerFor: for (z = 0; z < array[k][m][n].length; z++){
|
||||
if (array[k][m][n].length == 1){
|
||||
array[k][m][n]= array[k][m][n][0];
|
||||
continue outerFor;
|
||||
}
|
||||
array[k][m][n][0] = array[k][m][n][0] * array[k][m][n][1];
|
||||
array[k][m][n].splice(1,1);
|
||||
}
|
||||
array[k][m][n] = array[k][m][n][0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Division
|
||||
for (k=0; k < array.length; k++) {
|
||||
outerFor: for (m=0; m < array[k].length; m++){
|
||||
innerFor: for (z = 0; z < array[k][m].length; z++){
|
||||
if (array[k][m].length == 1){
|
||||
array[k][m]= array[k][m][0];
|
||||
continue outerFor;
|
||||
}
|
||||
array[k][m][0] = array[k][m][0] / array[k][m][1];
|
||||
array[k][m].splice(1,1);
|
||||
}
|
||||
array[k][m] = array[k][m][0];
|
||||
}
|
||||
}
|
||||
|
||||
// Subtraction
|
||||
outerFor: for (k=0; k < array.length; k++) {
|
||||
innerFor: for (z = 0; z < array[k].length; z++){
|
||||
if (array[k].length == 1){
|
||||
array[k]= array[k][0];
|
||||
continue outerFor;
|
||||
}
|
||||
array[k][0] = array[k][0] - array[k][1];
|
||||
array[k].splice(1,1);
|
||||
}
|
||||
array[k] = array[k][0];
|
||||
}
|
||||
|
||||
// Addition
|
||||
outerFor: for (k=0; k < array.length; k++) {
|
||||
innerFor: for (z = 0; z < array.length; z++){
|
||||
if (array.length == 1){
|
||||
continue outerFor;
|
||||
}
|
||||
array[0] = array[0] + array[1];
|
||||
array.splice(1,1);
|
||||
}
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
|
||||
function q_execute() {
|
||||
//q_concatnum();
|
||||
queue = a_concatnum(queue);
|
||||
queue = a_split(queue);
|
||||
queue = a_calculate(queue);
|
||||
q_display(queue);
|
||||
return;
|
||||
}
|
||||
Reference in New Issue
Block a user