Đầu tuần này, chúng tôi đã tìm hiểu về cách định dạng các ngôn ngữ bí truyền để bình luận. Hôm nay, chúng ta sẽ làm điều ngược lại. Tôi cần bạn viết một chương trình hoặc hàm phân tích một số mã bí truyền được nhận xét tốt và phân tích các nhận xét, chỉ trả lại mã. Sử dụng một số ví dụ từ thử thách trước, đây là đoạn mã được nhận xét tốt trông như thế nào:
a #Explanation of what 'a' does
bc #Bc
d #d
e #Explanation of e
fgh #foobar
ij #hello world
k #etc.
l #so on
mn #and
op #so forth
Dưới đây là những gì bạn cần làm để trích xuất mã. Đầu tiên, xóa ký tự nhận xét ( #
), khoảng trắng trước nó và mọi thứ sau ký tự nhận xét.
a
bc
d
e
fgh
ij
k
l
mn
op
Sau đó, thu gọn mỗi dòng lên trên thành một dòng duy nhất. Ví dụ, vì b
ở cột thứ hai trên dòng hai, một khi chúng ta thu gọn nó, nó sẽ ở cột thứ hai trên dòng một . Tương tự, c
sẽ được đặt trong cột thứ ba của dòng một, và d
sẽ được đặt vào cột thứ tư. Lặp lại điều này cho mỗi nhân vật và bạn nhận được điều này:
abcdefghijklmnop
Lưu ý quan trọng: Có vẻ như giải pháp tầm thường là chỉ xóa các bình luận, xóa mọi chỗ trống và tham gia mọi dòng. Đây không phải là một cách tiếp cận hợp lệ! Bởi vì mã ban đầu có thể có khoảng trắng trong đó, chúng sẽ bị loại bỏ bằng cách tiếp cận này. Ví dụ, đây là một đầu vào hoàn toàn hợp lệ:
hello #Line one
#Line two
world! #Line three
Và đầu ra tương ứng phải là:
hello world!
Các thách thức:
Viết chương trình hoặc hàm lấy mã nhận xét làm đầu vào và xuất hoặc trả lại mã với tất cả các nhận xét được phân tích cú pháp. Bạn nên xuất mã mà không có bất kỳ dấu cách nào, mặc dù một dòng mới theo dõi được cho phép. Các nhân vật bình luận sẽ luôn luôn #
, và sẽ luôn có thêm một khoảng trống trước khi các bình luận bắt đầu. #
sẽ không xuất hiện trong phần bình luận của đầu vào. Để giữ cho thử thách đơn giản hơn, đây là một số đầu vào bạn không phải xử lý:
Bạn có thể giả sử rằng mã sẽ không có hai ký tự trong cùng một cột. Ví dụ: đây là một đầu vào vi phạm quy tắc này:
a #A character in column one bc #Characters in columns one and two
Bạn cũng có thể giả định rằng tất cả các ký tự nhận xét xuất hiện trong cùng một cột. Ví dụ: đầu vào này:
short #this is a short line long #This is a long line
vi phạm quy tắc này. Điều này cũng có nghĩa là
#
sẽ không nằm trong phần mã.Và cuối cùng, bạn không phải xử lý các phần mã với khoảng trắng ở đầu hoặc cuối. Ví dụ,
Hello, # World! #
Bạn cũng có thể cho rằng đầu vào chỉ chứa các ký tự ASCII có thể in được.
Ví dụ:
Input:
hello #Line one
#Line two
world! #Line three
Output:
hello world!
Input:
E #This comment intentionally left blank
ac #
h s #
ecti #
on is #
one c #
haracte #
r longer #
than the #
last! #
Output:
Each section is one character longer than the last!
Input:
4 #This number is 7
8 #
15 #That last comment is wrong.
16 #
23 #
42 #
Output:
4815162342
Input:
Hello #Comment 1
world #Comment 2
, #Comment 3
how #Comment 4
are #Comment 5
you? #Comment 6
Output:
Hello world, how are you?
Input:
Prepare #
for... #
extra spaces! #
Output:
Prepare for... extra spaces!
Bạn có thể lấy đầu vào ở bất kỳ định dạng hợp lý nào bạn thích, ví dụ: danh sách các chuỗi, một chuỗi có dòng mới, danh sách 2 ký tự, v.v ... Câu trả lời ngắn nhất bằng byte sẽ thắng!
hello world!
bạn đã hiển thị) không? Ngoài ra, bạn nêu: " #
sẽ không xuất hiện trong phần bình luận của đầu vào. ", Nhưng nó có thể xảy ra trong chính đoạn mã không?
do {stuff} while (condition);
với lời giải thích theo thứ tự do while (condition); #Explainything
sau đó {stuff} #Explainything
.