코드를 반대로 들여 쓰기하면 코드가 더 빨리 실행될 수 있으므로 컴파일러가 "분기"맨 위에서 트리 디자인 패턴처럼 코드를 처리 할 수 있다고 들었습니다. 중력은 코드를 컴파일하는 데 걸리는 시간이 빨라지고 데이터 구조 효율성이 향상되기 때문에 도움이됩니다. 다음은 Java 스크립팅의 예입니다.
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
그러나 어떤 이유로 메모장에는이 작업을 자동으로 수행 할 수있는 설정이 없으므로 나를 위해 프로그램이 필요합니다.
기술
제출물은 코드 스 니펫을 입력으로 사용하고 들여 쓰기를 되돌리고 결과 코드를 출력해야합니다.
이것은 다음 절차에 의해 수행됩니다.
코드를 줄로 나눕니다. 각 줄은 0 개 이상의 공백으로 시작합니다 (탭이 없음).
코드에서 고유 한 들여 쓰기 수준을 모두 찾으십시오. 예를 들어, 위 예제의 경우
0 4 8 12
이 들여 쓰기 수준 목록의 순서를 반대로 바꾸고 반전 된 목록을 원래 목록에 매핑하십시오. 이것은 말로 설명하기 어렵지만 예를 들면 다음과 같습니다.
0 — 12 4 — 8 8 — 4 12 — 0
이 매핑을 원래 코드에 적용하십시오. 예를 들어, 공백 들여 쓰기가 0 인 줄은 12 개의 공백으로 들여 쓰기되고, 4 개의 공백은 8 개의 공백이됩니다.
입출력
원하는대로 입력 및 출력을 제공 할 수 있습니다 (STDIN / STDOUT, 기능 매개 변수 / 반환 값 등). 언어가 여러 줄 입력을 지원하지 않는 경우 (또는 원하지 않는 경우) |
대신 문자를 사용하여 줄을 구분할 수 있습니다 .
입력은 인쇄 가능한 ASCII + 줄 바꿈만으로 구성되며 빈 줄은 포함하지 않습니다.
테스트 사례
입력:
function fib(n) {
var a = 1, b = 1;
while (--n > 0) {
var tmp = a;
a = b;
b += tmp;
if (a === Infinity) {
return "Error!";
}
}
return a;
}
출력 : 위의 예제 코드.
입력:
a
b
c
d
e
f
g
h
산출:
a
b
c
d
e
f
g
h
입력:
1
2
3
2
1
산출:
1
2
3
2
1
입력:
foo
산출:
foo