Алгоритм итеративного заполнения правой части визуальной гистограммы - PullRequest
0 голосов
/ 12 ноября 2018

В настоящее время у меня есть это, итеративно выводит гистограмму на левой стороне.

const arr = [6,10,4,5,1];
let c = 10;
let r;		
for (let i = 0; i < 11; i++) {
    r = "";
    r += "| ";
    for (let k = 0; k < arr.length; k++) {
        if (arr[k] == c) r += " __";
        else if (arr[k] < c) r += "   ";
        else r += "|  ";
    }
    console.log(r);
    c--;
}

Я хотел бы изменить это так, чтобы он также выводил правую руку гистограммы следующим образом:

|     __         
|    |  |         
|    |  |         
|    |  |         
|  __|  |         
| |  |  |   __   
| |  |  |__|  |   
| |  |  |  |  |   
| |  |  |  |  |   
| |  |  |  |  |__
| |  |  |  |  |  |

Итак, я попытался добавить это в первом операторе if () else if (k < arr.length - 1 && arr[k + 1] < c && arr[k] > c) r += "| |";. Это добавляет право | в правильных местах, однако оно сдвигает все остальные символы после него.

Следовательно, мой вопрос: как я могу обойти это? Есть ли алгоритм, который нужно соблюдать, чтобы он не сдвигался?

1 Ответ

0 голосов
/ 12 ноября 2018

const arr = [6,10,4,5,1, -1];
let c = 10;
let r;		
for (let i = 0; i < 11; i++) {
    r = "";
    r += "| ";
    for (let k = 0; k < arr.length; k++) {       
        if(k > 0 && arr[k-1] > arr[k] && arr[k] == c) r += "|__";
        else if (arr[k] == c) r += " __";
        else if(k > 0 && arr[k-1] > arr[k] && arr[k-1] > c) r += "|  ";
        else if (arr[k] < c) r += "   ";
        else r += "|  ";
    }
    console.log(r);
    c--;
}

А как насчет этого?Это просто закодировано в условиях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...