Các bản đệ trình mã golf thành công, về bản chất, chứa đầy các biểu tượng điên rồ khắp nơi. Để làm cho trình của họ dễ hiểu hơn, nhiều người chơi golf chọn cách đưa ra lời giải thích về mã của họ. Theo giải thích của họ, dòng mã được biến thành sơ đồ nổ theo chiều dọc.
Ví dụ: nếu đây là mã của tôi:
1_'[3:~2@+]`
Một trong nhiều sơ đồ có thể tôi có thể tạo sẽ trông như thế này:
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
Mục đích
Trong thử thách này, bạn sẽ viết một công cụ định dạng tự động giải thích, lấy một dòng mã và tạo một sơ đồ để có thể dễ dàng thêm văn bản giải thích.
Để làm cho điều này trở thành một thách thức hữu ích hơn , người dùng sẽ có thể chỉ định nội dung của từng dòng, bằng cách cung cấp một chuỗi định dạng. Chuỗi định dạng sẽ là một dòng thứ hai, chỉ chứa các chữ cái A-Za-z
, có cùng độ dài với chương trình. Các chữ cái hiển thị thứ tự mà các ký tự của chương trình sẽ được in trong phần giải thích.
Dưới đây là một ví dụ về I / O mà không có bất kỳ định dạng giống như ngoặc :
123423
AabcBC
1
2
3
2
3
4
Chân đế
Nếu có nhiều hơn một ký tự trong chương trình có cùng mức ưu tiên, thì bộ ký tự đó đóng vai trò là một khối mã duy nhất (nếu chúng tạo thành một nhóm) hoặc một bộ dấu ngoặc (nếu chúng chứa các ký tự khác ở giữa). Các quy tắc chung rất đơn giản:
Các ký tự không xuất hiện trong một dòng của sơ đồ cho đến khi tất cả các ký tự có mức độ ưu tiên cao hơn đã xuất hiện trên các dòng trên nó trong sơ đồ.
Các ký tự có mức độ ưu tiên như nhau luôn được in trên cùng một dòng. Nếu một ký tự nhất định xuất hiện trên một dòng, tất cả các ký tự khác có mức độ ưu tiên như nhau sẽ xuất hiện trên dòng đó.
Một tập hợp các ký tự có mức độ ưu tiên như nhau tiếp tục xuất hiện trên mỗi dòng cho đến khi tất cả các ký tự khác được bao quanh bởi nó đã xuất hiện ít nhất một lần. Điều này cho phép các công trình "giống như khung". Nếu
bceab
là các ưu tiên, thì cácb
ký tự sẽ xuất hiện trên dòng thứ hai (chúng là ưu tiên cao thứ hai) và sẽ tiếp tục xuất hiện cho đến khi tất cả cáccea
ký tự xuất hiện. Nếu chuỗi ưu tiên làabcadeafga
, thì tất cảbcdefg
được coi là chứa trong chuỗi đó, tất cả 4a
giây sẽ tiếp tục xuất hiện cho đến khig
xuất hiện.
Yêu cầu định dạng khác
Tất cả các dòng đầu ra phải có cùng độ dài (chiều dài của các dòng đầu vào), được đệm bằng các khoảng trắng khi cần thiết. Dòng chương trình đầu vào có thể chứa khoảng trắng, mặc dù các khoảng trắng đó cũng sẽ được đặt một chữ cái ưu tiên. Trailing newlines trên đầu ra / đầu vào là tùy chọn.
Chấm điểm
Đây là mã golf, ít byte thắng nhất.
Ví dụ
Dưới đây là một ví dụ nhận xét về một đoạn mã với định dạng phức tạp hơn.
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
Một ví dụ trong Perl:
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
Dưới đây là một vài ví dụ ở CJam, với sự giúp đỡ của Martin Büttner:
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$}*}/
Đây là một ví dụ điên rồ chỉ để gây rối với bạn:
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
Dưới đây là một ví dụ rõ ràng hơn về những gì xảy ra khi dấu ngoặc trùng nhau abab
. (Thông thường, đây không phải là cách bạn sẽ chọn để định dạng lời giải thích của mình.)
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
có thể được thay thế bằngn
trong TIO .