성공적인 코드 골프 제출은 본질적으로 모든 곳에서 미친 상징으로 가득 차 있습니다. 제출을 이해하기 쉽도록 많은 코드 골퍼는 코드에 대한 설명을 포함하도록 선택합니다. 그들의 설명에서, 코드 라인은 수직 분해 다이어그램으로 바뀝니다.
예를 들어, 이것이 내 코드 인 경우 :
1_'[3:~2@+]`
내가 만들 수있는 많은 가능한 다이어그램 중 하나는 다음과 같습니다.
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
목표
이 과제에서는 코드 한 줄을 사용하고 설명 텍스트를 쉽게 추가 할 수있는 다이어그램을 만드는 설명 자동 서식 도구를 작성합니다.
이를보다 유용한 과제 로 만들기 위해 사용자는 형식화 문자열을 제공하여 각 행의 내용을 지정할 수 있습니다. 형식화 문자열은 문자 만 포함하는 두 번째 행 A-Za-z
으로, 프로그램과 길이가 같습니다. 문자는 설명에서 프로그램의 문자가 인쇄되는 순서를 나타냅니다.
다음은 괄호와 같은 형식이없는 I / O의 예입니다 .
123423
AabcBC
1
2
3
2
3
4
브라켓
프로그램에서 둘 이상의 문자가 동일한 우선 순위 레벨을 갖는 경우, 해당 문자 세트는 단일 코드 블록 (그룹을 구성하는 경우) 또는 대괄호 세트 (중간에 다른 문자를 포함하는 경우)로 작동합니다. 일반적인 규칙은 간단합니다.
우선 순위가 더 높은 다른 모든 문자가 이미 다이어그램에서 위의 행에 나타날 때까지 문자는 다이어그램의 행에 나타나지 않습니다.
우선 순위가 같은 문자는 항상 같은 줄에 인쇄됩니다. 특정 문자가 줄에 나타나면 우선 순위가 같은 다른 모든 문자가 줄에 나타납니다.
그와 같이 묶인 다른 모든 문자가 적어도 한 번 나타날 때까지 우선 순위가 동일한 문자 세트가 각 행에 계속 나타납니다. 이것은 "브래킷 같은"구조를 허용합니다. 경우
bceab
우선 순위이며, 다음b
문자는 (그들은 두 번째로 높은 우선 순위) 두 번째 줄에 표시되고 모든 때까지 계속 나타납니다cea
문자가 나타났다. 우선 순위 문자열이abcadeafga
인 경우 모든 문자열이 그bcdefg
안에 포함 된 것으로 간주되며, 4가 모두a
표시 될 때까지 계속 나타납니다g
.
더 많은 형식 요구 사항
모든 출력 라인은 같은 길이 (입력 라인의 길이) 여야하며 필요에 따라 공백으로 채워 져야합니다. 입력 프로그램 행에는 공백이 포함될 수 있지만 해당 공백에도 우선 순위 문자가 제공됩니다. 출력 / 입력의 후행 줄 바꿈은 선택 사항입니다.
채점
이것은 코드 골프이며, 가장 적은 바이트가 이깁니다.
예
다음은 더 복잡한 형식의 코드 조각에 대한 주석이 달린 예입니다.
1_'[3:~2@+]`
abbcddeffgch
1 #highest priority is denoted by the lowercase letter a
_' #priority b
[ ] #all characters with priority c
[3: ] #priority d, but priority c still printed because it encloses more
[ ~ ] #priority e
[ 2@ ] #priority f
[ +] #priority g, last line of c because all enclosed characters have appeared
` #priority h
Perl의 예 :
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
다음은 Martin Büttner가 제공 한 CJam의 몇 가지 예입니다.
l~2*{_2%{3*)}{2/}?_p_(}g;
aabbcdddefffeeggeehhiiccj
l~
2*
{ }g
{_2% }g
{ { }{ }? }g
{ {3*)}{ }? }g
{ { }{2/}? }g
{ _p }g
{ _(}g
;
q{_eu'[,66>"EIOU"-#)g{'o1$}*}/
abcccddddddeeeeeeefgghiijjhhbb
q
{ }/
{_eu }/
{ '[,66> }/
{ "EIOU"- }/
{ # }/
{ )g }/
{ { }*}/
{ {'o }*}/
{ { 1$}*}/
여기 당신을 엉망으로 만드는 미친 예가 있습니다.
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
다음은 대괄호가과 같이 겹칠 때 발생하는 상황에 대한보다 명확한 예입니다 abab
. (일반적으로 이것은 설명의 형식을 선택하는 방식이 아닙니다.)
aabbccddaaeebb
aabbccddaaeebb
aa aa
aabb aa bb
aabbcc aa bb
aabb ddaa bb
bb eebb #"aa" no longer appears because all of "bbccdd" have already appeared.
oNo
TIOn
에서 대체 할 수 있습니다 .