Софтуерно Инженерство
Loading...
+ Нов въпрос
KristianZanev avatar KristianZanev 16 Точки

3. Кодиране -малък проблем със задачата

Здравейте, проблема със задачката е малък просто трябва да се долепят символите един до друг,  печатат се правилните символи , но в една колона. Не мога да се сетя как ставаше, пробвах варианти и не се получи. Линк към задачата 

function coding(input) {

    let n = Number(input.shift());;
    let num = n.toString();
    let lastNum = n;
    let string = '';

    for (let i = 0; i < num.length; i++) {
        let number = lastNum % 10;
        let lastDigit = (lastNum - number) / 10;
        lastNum = lastDigit;
        if (number == 0) {
            console.log("ZERO");
        }
        for (let j = 0; j < number; j++) {
            let ascii = number + 33;
            let symbol = String.fromCharCode(ascii);

            // string = string + symbol;

            console.log(symbol);

        }

        console.log();
    }
}

coding([
    9347439
])

 

Тагове:
willystyle avatar willystyle 912 Точки
Best Answer
function coding([number]) {    
    let currentNumber = number;    
    for (let i = 0; i < number.toString().length; i++) {
        let lastDigit = currentNumber % 10;
        currentNumber = Math.floor(currentNumber / 10);        
        if (lastDigit == 0) {
            console.log("ZERO");
            continue;
        }        
        let symbolRow = '';
        for (let j = 0; j < lastDigit; j++) {
            let ascii = lastDigit + 33;
            symbolRow += String.fromCharCode(ascii);
        }
        console.log(symbolRow);        
    }
}

Товa e чрез конкатенация, а ти може би искаш директно, това става чрез фунцията repeat() :

 

function coding([number]) {    
    let currentNumber = number;    
    for (let i = 0; i < number.toString().length; i++) {
        let lastDigit = currentNumber % 10;
        currentNumber = Math.floor(currentNumber / 10);        
        if (lastDigit == 0) {
            console.log("ZERO");            
        } else {
            console.log(String.fromCharCode(lastDigit + 33).repeat(lastDigit));     
        }           
    }
}

A като махнеш и излишните променливи става най-компактно:

function coding([number]) {    
    while (number > 0) {
        let lastDigit = number % 10;
        number = Math.floor(number / 10);        
        if (lastDigit == 0) console.log("ZERO");
        else console.log(String.fromCharCode(lastDigit + 33).repeat(lastDigit));                   
    }
}
0
23/02/2019 10:59:54
KristianZanev avatar KristianZanev 16 Точки

Благодаря много проработи

0
TeodorStefanovPld avatar TeodorStefanovPld 1225 Точки

има един много удобен метод в javascript splice вместо да въртиш тоя  цикъл да повтарящ символа.

let ascii = number + 33;

let symbol = String.fromCharCode(ascii);

let result=' ';

result.splice(0,number,symbol);

не съм сигурен за точния синтаксис идеята е че като го погледнеш в нета,така към празния резулт ще добавиш толкова пъти символа които ти трябва и накрая само го печаташ.

0
badsector avatar badsector 18 Точки

В javascript явно не може директно да се указва на изхода да се принтира на един ред. Там console.log() винаги е равно на Console.WriteLine() и това е. Сега мъча задачите и варианта, който е за нашето ниво, е да се направи една нова променлива тип стринг, в която да се добавят един по един изходните резултати. Т.е. някъде извън циклите слагаш една глобална променлива примерно let output = ""; за да се знае, че е стринг. След това, където правиш проверките, вместо да принтираш резултата, го вкарваш в тази променлива - output += result + " "; Така слагаш и интервал след разултата. Реално за всеки резултат стойността на тази глобална променлива тип стринг, ще е резултат1 + резултат2 + резултат3 и т.н. Накрая, пак извън всички цикли, принтираш тази променлива и си готов.

let output = "";

for (let n = 1; n <= currentDigit; n++) {

output += String.fromCharCode(currentDigit + 33);

}

console.log(output);

0