Я не почему это не roatating? - PullRequest
0 голосов
/ 01 мая 2020

Я не знаю, что я делаю неправильно.

Напишите функцию с именем rotateArt, которая принимает два (2) параметра: imageArray и вращение. (a) imageArray - это двумерный массив любого измерения, содержащий художественное «изображение» ASCII. (б) поворот - это значение, которое является одним из следующих значений: 0, 90, 180, 270, 360, -90, -180, -270. Положительное значение указывает на вращение в направлении по часовой стрелке. Отрицательное значение указывает на вращение в направлении против часовой стрелки. Значение 0 или 360 означает, что вращение не должно происходить, но изображение должно быть зеркально отражено или перевернуто вокруг вертикальной оси

function rotateChar(char,rotation){
let rowLookup = ['^','v','>','<','|','-','|','\\','/','`','~','[','=','_'];
let colLookup = [-270,-180,-90,0,90,180,270];
let rotations = [
    ['>','v','<','^','>','v','<'],
    ['<','^','>','v','<','^','>'],
    ['v','<','^','>','v','<','^'],
    ['^','>','v','<','^','>','v'],
    ['-','|','-','|','-','|','-'],
    ['|','-','|','-','|','-','|'],
    ['_','|','_','|','_','|','_'],
    ['/','\\','/','\\','/','\\','/'],
    ['\\','/','\\','/','\\','/','\\'],
    ['~','`','~','`','~','`','~'],
    ['`','~','`','~','`','~','`'],
    ['=','[','=','[','=','[','='],
    ['[','=','[','=','[','=','['],
];
   if (rowLookup.indexOf(char)=== -1 || colLookup.indexOf(rotation)=== -1) {
       return char;
   } else {
       return rotations[rowLookup.indexOf(char)][colLookup.indexOf(rotation)];
   } 
   }

 function rotateArt(imageArray,rotation){
 rotation = parseInt(rotation);
 let newArray = [];
 let width = 0, height = 0;
 let cols =  [-270,-180,-90,0,90,180,270];
 let rowLookup = ['^','v','>','<','|','-','|','\\','/','`','~','[','=','_'];

switch (rotation){
 case 90:
    width = cols;
    height = rowLookup;
    for (let i =0; i < width; i++){
        let newRow = [];
        for (let j =0; j < height; j++){
        newRow.push('x');
     }
     newArray.push(newRow);
}

for (let i = 0; i < rowLookup; i++){
    for (let j =0; j < cols; j++){
        newArray[j][rowLookup - 1 - i] = rotateChar(imageArray[i][j],rotation);
    }
   }
    break;
default:
    break;
       } 
return newArray;
       }

1 Ответ

1 голос
/ 01 мая 2020

(Форматирование кода, например, на таком веб-сайте, как https://beautifier.io/, облегчает чтение для других и, следовательно, помогает вам.)

Первое, что я заметил, было неправильно было то, что вы пытаетесь перебрать массивы, как показано ниже:

width = cols;
height = rowLookup;
for (let i = 0; i < width; i++) {
    let newRow = [];
    for (let j = 0; j < height; j++) {
        newRow.push('x');
    }
    newArray.push(newRow);
}

, где cols и rowLookup, (и, следовательно, width и height) - оба массива. К сожалению Javascript так не работает.

Вы почти наверняка захотите использовать свойство длины массива. Вы можете изменить первые две строки приведенного выше примера, чтобы применить это исправление:

width = cols.length;
height = rowLookup.length;

Вот альтернативный способ, который также будет работать

for (let i = 0; i < cols.length; i++) {
    let newRow = [];
    for (let j = 0; j < rowLookup.length; j++) {
        newRow.push('x');
    }
    newArray.push(newRow);
}

Я никогда не пытался сделать меньше, чем на массивах раньше, и я нашел результаты, которые стоит упомянуть. Вот некоторые выражения, которые я попробовал, а затем их результаты:

0 < []
false
0 < [1]
true
0 < [1, 2]
false
0 < [0]
false
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...