2017-11-22 4 views
1

Practice.it에서 JavaScript 연습 문제를하고 있는데 2 개의 로켓을 나란히 인쇄하는 것이 좋습니다.자바 스크립트에서 두 다이어그램을 나란히 인쇄하려면 어떻게해야합니까?

나는 하나를 인쇄했지만 다른 로켓 우주선을 첫 번째 프린트 바로 옆에 인쇄하는 방법을 알아낼 수 없습니다.

또한 for 루프를 사용하여이 작업을 수행 할 수 있습니까?

function rocket(){ 
    triangle(); 
    line(); 
    sides(); 
    line(); 
    console.log("|Rocket |"); 
    console.log("| #1 |"); 
    line(); 
    sides(); 
    line(); 
    triangle(); 
} 

function triangle(){ 
    console.log(" /\\"); 
    console.log("/ \\"); 
    console.log("/ \\"); 
} 

function line(){ 
    console.log("+-------+"); 
} 

function sides(){ 
    console.log("|  |"); 
} 

rocket(); 

출력 :

/\ 
/ \ 
/ \ 
+-------+ 
|  | 
+-------+ 
|Rocket | 
| #2 | 
+-------+ 
|  | 
+-------+ 
/\ 
/ \ 
/ \ 
+0

내가 있으리라 믿고있어 당신은 브라우저 만이 아닌 콘솔에서 작업? – zipzit

+1

여기에 작성한 코드를 사용하여 두 가지를 나란히 인쇄 할 수 없습니다. 그건'console.log'가 작동하는 방식이 아닙니다. – Claies

+1

한 번에 로켓의 "층"하나만을 그릴 수 있도록 로켓을 만드는 방법은 어떻습니까? 하나의 레이어 = 텍스트 한 줄. – zipzit

답변

1

신속하고 더러운 방법은 각 문자열을 연결하는 것입니다. console.log("+--------+") 사용의 모든 인스턴스에 대한 그래서 :

console.log("+--------+".repeat(2)); 

그리고 단지 각 문자열에 대해이 작업을 수행합니다.

1

이 대신 당신의 기능에 올바른 방법을 기록, 당신은 배열에 다이어그램 문자열을 넣어해야합니다.

예 : 당신이 옆에 두 개의면을 인쇄하려면

function triangle(){ 
    return 
    [" /\\", 
    "/ \\", 
    "/ \\"] 
} 

그런 식으로, 당신은 단지 다이어그램을받는 기능, 수평으로 분리하는 데 사용 공간의 양을 확인합니다. 이 함수는 다이어그램을 한 줄씩 인쇄합니다 (배열의 색인을 기준으로 색인).

예 :

function printDiagrams(diagramList /* This is an array of arrays */, spacing) { 
    // Get the size of the biggest array in diagramList 
    var size= biggestDiagramSize(diagramList) 
    // Here, you iterate in the diagrams array line by line and print 
    for(i = 0, i < size, i++) { 
    // Iterate over diagramList and print its lines 
    // Careful not to exceed arrays bound. 
    // Ex: console.log(diagram1[i] + spacing + diagram2[i] + spacing + diagramN[i]) 
    } 

} 

는 또한 다이어그램을 구성하는 함수를 필요로하기 위하여려고하고있다. 그냥 배열을 받고 그것들의 연결을 반환합니다.

참고 : 다른 다이어그램을 나란히 인쇄해도 작동합니다.

0

rocket 함수에 대한 매개 변수를 정의 할 수 있으며 N 다이어그램을 나란히 그리는 기능에 대해 String.prototype.repeat()String.prototype.replace()을 함수 내에서 사용할 수 있습니다.

function rocket(n = 1) { 
 
    let props = ["|Rocket |", "| #N |"]; 
 
    let j = 0; 
 
    let s = props[1].match(/\s+(?=\|)/)[0].length; 
 
    triangle(n); 
 
    line(n); 
 
    sides(n); 
 
    line(n); 
 
    for (var i = 0; i < props.length; i++) { 
 
console.log(
 
    props[i] 
 
    .repeat(n) 
 
    .replace(/(N)(\s+(?=\|))/g 
 
    , (_, a, b) => ++j + (j >=10 ? " ".repeat(s-1) : b))); 
 
    } 
 
    line(n); 
 
    sides(n); 
 
    line(n); 
 
    triangle(n); 
 
} 
 

 
function triangle(n){ 
 
    var props = [" /\\ ", "/ \\ ", "/ \\ "]; 
 
    draw(props, n); 
 
} 
 

 
function line(n){ 
 
    var props = ["+-------+"]; 
 
    draw(props, n); 
 
} 
 

 
function sides(n){ 
 
    var props = ["|  |"]; 
 
    draw(props, n); 
 
} 
 

 
function draw(props, n) { 
 
    for (var prop of props) console.log(prop.repeat(n)); 
 
} 
 

 
rocket(15);

관련 문제