Đặt cảnh:
Đó là một buổi chiều trung bình, khi bạn thư giãn sau một ngày dài bằng cách tham gia vào trò tiêu khiển yêu thích của bạn: trả lời rất nhiều câu hỏi hấp dẫn trên PPCG. Đó không phải là một ngày tốt cho bạn; những lập trình viên Pyth chết tiệt đó tiếp tục nhận được câu trả lời tốt nhất và nó giết chết sự rung cảm của bạn. Đột nhiên, bạn nhận thấy một câu hỏi mới đã được đăng! Bạn làm cho tâm trí của bạn; không phải lần này là CJammers. Tức giận, bạn bắt đầu gõ, sinh ra một luồng các nhân vật; một bào thai của vòng lặp BrainFuck vinh quang mà sản phẩm cuối cùng của bạn sẽ có. Bạn gõ và gõ. Nhanh hơn! Vẫn còn nhanh hơn! Bạn quá tập trung, bạn thậm chí không nhận thấy đèn trên màn hình của bạn bắt đầu nhấp nháy và tắt. Đột nhiên, màn hình phát sáng màu xanh lá cây, một biểu tượng giống như người ngoài hành tinh được gắn trên máy tính để bàn. Sử dụng các kỹ năng hoàn hảo của bạn, bạncat ~/Desktop/aliensymbol
và được trình bày với một loạt các số, một tin nhắn! Là lập trình viên PPCG sắc sảo mà bạn đang có, bạn nhận thấy rằng nó trông giống như ASCII. Không có vấn đề cho bạn, bạn print(chr(i) for i in file)
và giải mã tin nhắn. Suy nghĩ đầu tiên của bạn: "Tôi cần chia sẻ điều này với cộng đồng!".
...
Ai sẽ nghĩ nó? Rằng những người đầu tiên liên lạc với người ngoài hành tinh sẽ là những lập trình viên khiêm tốn của PPCG. Tại sao là chúng tôi? Có lẽ đó là vì chúng ta là mẫu mực của trí thông minh của con người. Hoặc có thể vì BrainFuck gần với ngôn ngữ của người ngoài hành tinh. Tuy nhiên, người ngoài hành tinh - là dạng sống cực kỳ thông minh mà họ đang có - muốn kiểm tra xem họ có nên phân loại loài người là thông minh hay không. Để kiểm tra năng lực tinh thần của chúng tôi, người ngoài hành tinh đã yêu cầu chúng tôi gửi cho họ một vài chương trình máy tính để chứng minh rằng chúng tôi có văn hóa công nghệ. Vấn đề là, ngôn ngữ con người duy nhất họ hiểu là ASCII số!
Giúp loài người cho thấy những sinh vật alpha thực sự là trí tuệ. Chúng tôi cần gửi cho họ một tập lệnh sẽ chuyển đổi mã nguồn dựa trên văn bản của chúng tôi thành các phiên bản ASCII số của họ. Thật không may, do công nghệ kém phát triển của chúng tôi (cảm ơn Obama), chúng tôi phải gửi một chương trình dịch càng nhỏ càng tốt. Thật tốt khi họ chọn liên hệ với PPCG!
Các thách thức:
Tiền đề của thử thách này rất đơn giản: bạn phải viết một chương trình sẽ lấy bất kỳ mã nguồn nào của chương trình (hoặc bất kỳ tệp văn bản chung nào cho vấn đề đó) và xuất ra một phiên bản phân tách không gian của nó với bản dịch ASCII bên dưới mỗi dòng. Nghĩa là, với một đầu vào của một tệp văn bản, bạn cần xuất từng dòng của tệp đó theo sau là một dòng chứa biểu diễn ASCII của mỗi ký tự trong dòng phía trên nó (với mỗi số xếp hàng với ký tự mà nó đại diện).
Một ví dụ sẽ làm rõ điều này. Lấy mã nguồn của kẻ khét tiếng hello world
làm đầu vào:
#include <stdio.h>
int main() {
printf("hello, world\n");
return 0;
}
chương trình của bạn sẽ xuất ra:
# i n c l u d e < s t d i o . h >
35 105 110 99 108 117 100 101 32 60 115 116 100 105 111 46 104 62 10
10
i n t m a i n ( ) {
105 110 116 32 109 97 105 110 40 41 32 123 10
p r i n t f ( " h e l l o , w o r l d \ n " ) ;
32 32 32 32 112 114 105 110 116 102 40 34 104 101 108 108 111 44 32 119 111 114 108 100 92 110 34 41 59 10
r e t u r n 0 ;
32 32 32 32 114 101 116 117 114 110 32 48 59 10
}
125 10
Chi tiết thực hiện:
Bạn có thể chọn nhận đầu vào dưới bất kỳ hình thức nào bạn muốn (mở tệp, ống dòng lệnh, tham số chức năng, v.v.) và bạn nên xuất ra thiết bị xuất chuẩn hoặc trả lại đầu ra từ một chức năng.
Những điều cần lưu ý
- Mỗi ký tự trong đầu ra được phân tách bằng '\ t' để cho phép khoảng trống 3 chữ số trong dòng bên dưới xếp thành hàng (chúng tôi sẽ giả sử tab của bạn được đặt thành 4 khoảng trắng trở lên).
- Các dòng mới được hiển thị trên dòng mà phím quay lại được nhấn (chú ý 10 trong ví dụ)
- Các yêu cầu in '\ t' và '\ n' là lỏng lẻo. Nói chung, đầu ra của bạn phải trông vừa mắt (cần phải cho những người ngoài hành tinh chúng ta biết về mặt thẩm mỹ), và nếu bạn có thể uốn cong hai điểm trước đó trong khi duy trì tính toàn vẹn thị giác, bạn sẽ được tha thứ.
- Bạn có thể chọn giả định xem có dòng mới ở cuối dòng cuối cùng hay không.
Chấm điểm
Đây là môn đánh gôn nên chương trình ngắn nhất sẽ thắng. Lưu ý, ngay cả khi chương trình của bạn không phải là ngắn nhất, nhưng sử dụng các thủ thuật thực sự gọn gàng liên quan đến ngôn ngữ bạn đang sử dụng, nhiều +1 cho bạn!
Chúc may mắn. Bảng xếp hạng trí tuệ liên thiên hà của nhân loại nằm trên vai bạn.
Lưu ý: Xin vui lòng tha thứ cho các lỗ cốt truyện. Tôi không phải là nhà văn : D