Tôi đã xem qua câu hỏi này trên SO và nghĩ rằng nó sẽ tạo ra một thử thách golf tuyệt vời. Vì vậy, đây là:
Thử thách:
Viết chương trình đọc một chuỗi các chuỗi ký tự, mỗi chuỗi trên một dòng và xuất ra một danh sách tất cả các vị trí trong đó mỗi chuỗi có cùng một ký tự.
Đầu vào và đầu ra:
Đầu vào bao gồm một hoặc nhiều dòng ký tự ASCII không khoảng trắng có thể in được, mỗi dòng được theo sau bởi một dòng mới. Bạn có thể cho rằng tất cả các dòng đầu vào có cùng độ dài. Dòng mới không được coi là một phần của đầu vào (nghĩa là bạn không nên xuất nó dưới dạng ký tự trùng khớp).
Ví dụ đầu vào (bị đánh cắp một cách đáng xấu hổ từ câu hỏi SO):
abcdefg
avcddeg
acbdeeg
Sau khi đọc đầu vào, chương trình của bạn sẽ in vị trí của từng cột khớp và các ký tự mà chúng chứa. (Chương trình của bạn có thể, nhưng không cần, dừng đọc thêm đầu vào nếu nó có thể xác định sớm rằng không có cột phù hợp.) Bất kỳ định dạng đầu ra hợp lý nào đều được cho phép; cụ thể, bạn có thể sử dụng lập chỉ mục dựa trên 0 hoặc dựa trên 1 cho các vị trí.
Ví dụ đầu ra cho đầu vào trên (sử dụng lập chỉ mục dựa trên 0):
0: a
3: d
6: g
Ghi điểm:
Đây là mã golf, vì vậy câu trả lời ngắn nhất sẽ thắng. Trong trường hợp hòa, các ký tự ngắt kết nối phân đoạn có thể được trao cho các tính năng bổ sung:
- Ký tự để xử lý chính xác các dòng đầu vào có độ dài không bằng nhau. (Đầu ra không được chứa các vị trí ở cuối dòng đầu vào ngắn nhất.)
- Ký tự để xử lý chính xác đầu vào bao gồm các ký tự Unicode được mã hóa UTF-8 tùy ý.
Để có cảm hứng, bạn có thể tìm thấy một số giải pháp vô căn cứ tại câu hỏi SO (xem ở trên).
Làm rõ:
Đơn giản chỉ cần ghép các vị trí và ký tự, như trong
0a3d6g, không được tính là "đầu ra hợp lý". Bạn nên cung cấp một số loại dấu phân cách (chẳng hạn như khoảng trắng) giữa mỗi phần tử của đầu ra để có thể phân tích cú pháp rõ ràng.Đầu vào sẽ được cung cấp trên luồng đầu vào tiêu chuẩn (
stdin) hoặc sử dụng bất kỳ cơ chế nhập tệp văn bản nào là tự nhiên nhất đối với ngôn ngữ bạn chọn. (Nếu ngôn ngữ bạn chọn không có cơ chế tự nhiên để nhập tệp, hãy làm bất cứ điều gì có vẻ gần nhất về mặt tinh thần.)Đầu vào kết thúc khi không còn dữ liệu nào để đọc (tức là khi xảy ra tình trạng cuối tập tin). Nếu bạn muốn, bạn có thể yêu cầu đầu vào bị chấm dứt bởi một dòng trống (rõ ràng sau đó bạn không nên tính là một phần của đầu vào). Nếu bạn làm như vậy, xin vui lòng đề cập đến nó trong câu trả lời của bạn để người khác có thể cung cấp đầu vào chính xác để thử nghiệm.
Mỗi dòng đầu vào, bao gồm cả dòng cuối cùng, kết thúc bằng một ký tự dòng mới. Câu trả lời của bạn không được báo cáo dòng mới này dưới dạng cột phù hợp. (Sẽ ổn nếu giải pháp của bạn cũng có thể xử lý đầu vào trong đó dòng cuối cùng không kết thúc ở dòng mới, nhưng điều đó là không bắt buộc.)