탭 대 우주 전쟁
따라서 코드를 들여 쓰기 / 포맷하기 위해 탭을 사용할지 공백을 사용할 지에 대한 많은 논쟁이있었습니다. 엄청나게 미친 독특한 형식 지정 방법으로
이동하여 대학이 분쟁을 해결하도록 도울 수 있습니까?
당신의 임무는 모든 탭을 네 개의 공간으로 확장하는 전체 프로그램이나 기능을 작성하는 것입니다. 그런 다음 n 개의 선행 공백을 "/ (n-two stars) /"로 바꿉니다. 합리적인 형식으로 여러 줄에 걸쳐 입력을받습니다 (각 줄마다 줄을 배열하는 문자열, 열 배열 등).
부끄럽게 도난당한 샘플 입력 . SE에서는 탭이 자동으로 4 개의 공백으로 확장되므로 탭을 "^"문자로 나타내지 만 탭 (코드 포인트 0x09)도 처리해야합니다. 모든 "^"문자는 표를 나타냅니다.
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
Not zero so multiply by 256 again to get 65536
[>++++<-]>[<++++++++>-]<[>++++++++<-]
+>[>
# Print "32"
++++++++++[>+++++<-]>+.-.[-]<
<[-]<->] <[>>
# Print "16"
+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
# Print "8"
++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
^this is preceded by a tab
^^two tabs
^^^three tabs etcetera!
샘플 출력
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
/**/Not zero so multiply by 256 again to get 65536
/**/[>++++<-]>[<++++++++>-]<[>++++++++<-]
/**/+>[>
/******/# Print "32"
/******/++++++++++[>+++++<-]>+.-.[-]<
/**/<[-]<->] <[>>
/******/# Print "16"
/******/+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
/**/# Print "8"
/**/++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
/**/this is preceded by a tab
/******/two tabs
/**********/three tabs etcetera!
대학에 Vim과 Emacs를 모두 다운로드 할 공간이 필요하기 때문에 코드 저장 공간이 거의 없습니다. 따라서 이것은 코드 골프 이며 가장 짧은 코드가 승리합니다. 입력이 올바르게 구성되어 있고 탭을 교체 한 후 공백이 4 개 미만인 줄은 동작이 정의되지 않을 수 있습니다.
기권
이 "우수한"형식화 전략은 Geobits에 의해 제공되었으며 그의 허가에 따라 재생산됩니다. 이 도전 과제를 제작하는 동안 프로그래머는 해를 입지 않았습니다.
/*
, 아니면 "잘 구성된 입력"이 아닌 것으로 간주 될 수 있습니까? C ++ 소스 파일은 여러 /* */
줄 주석 이 선행 및 마지막 공백을로 대체 /
하고 다음으로 공백을 채우는 일부 답변을 깨뜨릴 수 있기 때문에 더 나은 테스트 였습니다 *
.
/* */
C ++ 코드를 상상해보십시오. 이번에는 줄의 시작 부분에 있습니다. 귀하의 사양에 따라 그대로 유지해야합니다. 여기서 함정은 이미 잘못된 답변을 발견했습니다. 정말과 같은 정규 표현식 /\** /
이 별표로 //를 채우는 데 사용 된 것과 같은 정규 표현식 은 줄을로 바꿉니다 /***/
. 이 전환도 보았습니다 /*//*/
. 나는 둘 다 틀렸다고 가정한다.