const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function printBidimensionalArray(N) {
const array = new Array(N);
for (let i = 0; i < N; i++) {
array[i] = new Array(N);
}
for (let i = 0; i < N; i++) {
for (let j = 0; j < N; j++) {
if (i === j) {
array[i][j] = 1;
} else {
array[i][j] = 3;
}
}
}
for (let i = 0; i < N; i++) {
for (let j = 0; j < N; j++) {
process.stdout.write(array[i][j].toString());
}
console.log();
}
}
rl.on('line', (input) => {
const N = parseInt(input);
if (!isNaN(N)) {
printBidimensionalArray(N);
}
});
O que estou fazendo de errado?
Julio @JulioNão entendi muito bem partes do seu código, tipo, porque exatamente esta importando a lib 'readline' ?
De qualquer maneira, a dica que posso te passar sobre essa atividade é que todo array inicialmente começa com com o numero 1, é preenchido no meio com números 3 e termina com 2.
Ex:---- / ----
Quando a entrada é o numero 4:
1332Quando a entrada é o numero 7
1333332---- / ----
E ao passar as iterações o numero 1 da um passo para a direita do array, e o numero 2 da um passo para a esqueda do array.
Ou seja, o seu index atual é sempre o index anterior + 1 , no caso do numero 1;
E no caso do numero 2, index atual é sempre o index anterior - 1;Há um caso especial quando a entrada é um numero impar, em que, na iteração (n/2) + 1, o número 1 não está no array, e tu tem que tratar essa ocasião.
Vou deixar aqui a minha solução, caso queira usar como base:
.
.
.
.
.let N = parseInt(lines.shift()) while(!isNaN(N)){ // Enquanto o N for um número válido let newArr = [] for(let i = 1 ; i < N-1 ; i++){ // Preenchendo o array com numeros 3, da posição 1 até a N-1 newArr.push(3) } newArr.unshift(1) // Atribuindo 1 na primeira posição newArr.push(2) // Atribuindo 2 na ultima posição console.log(newArr.join('')) // Realizando o primeiro print na saida, exigido pelo beecrowd for(let i = 1 ; i < N ; i++){ let index1 = newArr.indexOf(1) // Pegando o index anterior do 1 let index2 = newArr.indexOf(2) // Pegando o index anterior do 2 if(index1 === -1){ // Tratando caso especial quando o numero 1 nao esta no array ---> N é numero impar index1 = index2 } newArr[index1] = 3 // Colocando o 3 na posição anterior do 1 newArr[index2] = 3 // Colocando o 3 na posição anterior do 2 newArr[index1 + 1] = 1 // Movendo o 1 para a direita newArr[index2 - 1] = 2 // Movendo o 2 para a esquerda console.log(newArr.join('')) // Imprimindo na tela o array atual } N = parseInt(lines.shift()) }- WWanderson Barbosa Duarte @wandersonduarte
Estava com dúvidas nesta questão também. Obrigado pela explicação do código, ajudou muito.
- Em resposta aJulio⬆:
Hilton Rodrigo Mota @hrodrigomotaValeu pela explicação, Julio. Havia entendido a lógica de movimentação dos números, porém estava me atrapalhando no código.
Ajudou bastante. Obrigado!
Em resposta adeniseschirmer⬆:Miti @MitisuakiOi, então, essa questão é chatinha até você encontrar a lógica sobre ela.
Basicamente a ideia é que você terá 2 linhas diagonais, uma com 1 e outra com 2 apenas. Quanto aos outros valores todos serão 3.A minha ideia foi basicamente verificar se a linha for igual a coluna ele será = a 1, ja se o tamanho da matriz -1 (pois irei considerar o indice) for igual a coluna ele será 2, mas esse segundo valor terá de ser subtraido para cada linha, assim começando com tamanho da coluna -1, e subtraindo -1 toda linha.
Com isso meu código ficou asim:var input = require('fs').readFileSync('/dev/stdin', 'utf8'); var lines = input.trim().split('\n'); let matrizSize = +lines.shift(); while (!isNaN(matrizSize)) { for (let i = 0, x = matrizSize - 1; i < matrizSize; i++, x--) { let row = ""; for (let j = 0; j < matrizSize; j++) { let n = 3; if (i === j) n = 1; if (j === x) n = 2; row += n; } console.log(row); } matrizSize = +lines.shift(); }
