Thêm nhận xét vào tập lệnh Python và biến nó thành chương trình song ngữ Python / C ++


12

Cho kịch bản Python 3 sau:

def greet():
    print("Hello, world!")

greet()

Chuẩn bị một số dòng cho tệp văn bản này để nó có thể được thực thi như một chương trình Python cũng như được biên dịch và chạy như một chương trình C ++ tạo ra cùng một đầu ra Hello, world! (bao gồm cả dòng mới ở cuối):

$ python3 bilingual.py.cpp
Hello, world!
$ g++ bilingual.py.cpp && ./a.out
Hello, world!

Giải pháp sẽ được tính bằng số lượng ký tự không phải khoảng trắng của toàn bộ chương trình, bao gồm tập lệnh Python:

sed 's/\s//g' bilingual.py.cpp|wc -c

5
Trong tiêu đề bạn nói thêm bình luận, tuy nhiên trong phần thân bạn nói bạn chỉ phải thêm một số dòng. Đó là cái gì
Đăng Rock Garf Hunter

@WheatWizard Tiêu đề là một gợi ý. Nếu bạn có thể giải quyết điều này bằng cách thêm vào các dòng tùy ý (không bình luận) tôi sẽ bối rối.
Leon

Đây là một câu hỏi rất hay. Nhận xét duy nhất của tôi sẽ chỉ là bám vào số byte để ghi điểm trong tương lai. Thật đơn giản để kiểm tra những cái đó trên các hệ thống khác nhau.
Linus

@Linus Tôi thừa nhận rằng việc chọn điểm theo cách không chuẩn là một sai lầm. Sẽ không lặp lại nó trong tương lai.
Leon

2
Chỉ cần một lưu ý: lệnh sed được cung cấp sẽ đếm các dòng mới, đó là các ký tự khoảng trắng
edc65

Câu trả lời:


10

Điểm số 116

Chuẩn bị:

#include<cstdio>
#define print(A)main(){puts(A);}
#define greet()
#define \

Dấu gạch chéo ngược tiền xử lý \kéo :dòng chứa khó chịu vào một macro không sử dụng. Hãy thử nó ở đây .

Cảm ơn câu trả lời của edc65 cho ghi chú về int ẩn trong C ++ 4.
Nhờ câu trả lời PieCot của cho thấy <cstdio>hơn <stdio.h>.
Cảm ơn Leon đã đề nghị tôi loại bỏ Xbản gốc #define X\.


Tôi không có sed, nếu ai đó có thể xác minh điểm của tôi, tôi sẽ đánh giá rất cao.
Linus

Xóa tất cả khoảng trắng, số đếm của tôi (bằng tay) là 110 (nhưng tôi đã nhầm ... đó là 111)
edc65

2
@Linus Tại sao bạn cần X trong `#define X \`?
Leon

@Leon bắt tốt!
Linus

2
Đối với bất cứ ai tự hỏi C ++ 4 là gì: Trong trường hợp này là viết tắt của "C ++ mà gcc 4.3.2 chấp nhận" .
nwp

11

Điểm 119

(Thx @Linus cho số byte)

(Đã lưu 1 byte thx @Conor O'Brien) (1 byte đã lưu thx @PieCot)

Đếm lại byte bằng tay, tôi tìm thấy 113. Có lẽ đúng lúc này. Không, không phải vậy.

#include <cstdio>
#define def main(){0?
#define print(x) puts(x);}
#define greet()

Ghi chú: stdio và put vẫn còn sống và đá trong C ++. Kiểu int bị thiếu là hợp lệ trong C ++ 4. Kiểm tra


Điểm phải được tính theo toàn bộ chương trình (bao gồm cả mã python).
Leon

Vì điều kiện ternary có thể có phần thứ hai trống, bạn có thể xóa dấu vết 0trên dòng 2. Kiểm tra.
Conor O'Brien

OK tôi không hiểu tại sao, vì mã python sẽ giống nhau cho mọi câu trả lời, nhưng bạn là ông chủ. Tôi đã đếm bằng tay, không có sed, tôi hy vọng nó đúng
edc65

@ ConorO'Brien nó thực sự có thể! Tôi không biết! Thx
edc65

Bạn có thể sử dụng <cstdio> thay vì <stdio.h>
PieCot

7

Điểm số 130 130 134

Các dòng được chuẩn bị trước là:

#import <iostream>
#define def int main(){0?
#define greet()
#define print(A) 0;std::cout<<A"\n";}

Và mã kết quả:

#import <iostream>
#define def int main(){0?
#define greet()
#define print(A) 0;std::cout<<A"\n";}
def greet():
    print("Hello, world!")

greet()

Kiểm tra

C:\Users\Conor O'Brien\Documents\Programming\golf
λ type bilingual.py.cpp

#import <iostream>
#define def int main(){0?
#define greet()
#define print(A) 0;std::cout<<A"\n";}
def greet():
    print("Hello, world!")

greet()
C:\Users\Conor O'Brien\Documents\Programming\golf
λ sed 's/\s//g' bilingual.py.cpp|wc -c
134

C:\Users\Conor O'Brien\Documents\Programming\golf
λ g++ bilingual.py.cpp 2>nul && a
Hello, world!

C:\Users\Conor O'Brien\Documents\Programming\golf
λ python bilingual.py.cpp
Hello, world!

C:\Users\Conor O'Brien\Documents\Programming\golf
λ 

Đầu ra của phiên bản C ++ không giống với phiên bản python - nó bỏ lỡ một dòng mới. Đã thêm làm rõ cho câu hỏi.
Leon

@Leon Điều này hiện đã được sửa.
Conor O'Brien

#importkhông hợp lệ C ++
Leon

1
Xử lý thông minh của:
edc65

2
@Leon Quy tắc trang web của chúng tôi nói rằng nếu nó hoạt động trong một môi trường, đó là một đệ trình hợp lệ.
Conor O'Brien


5

Điểm 136

Chỉ dành cho hồ sơ:

#include <cstdio>
#define def class a{public
#define greet()
#define print(a) };int main(){puts(a);}

Một cách khác (ít hiệu quả hơn) để xử lý đại tràng.


1
Nhưng cstdiocần lưu ý.
edc65

Tôi nghĩ rằng điểm số này kết thúc là 136. Bạn không đếm khoảng trắng.
Linus

@Linus: Cảm ơn! Tôi nghĩ bạn đúng. Nếu tôi sử dụng lệnh này: tr -d '[:space:] ' < bilingual.py.cpp | wc -c Tôi nhận được 128, trong khi lệnh này: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c cung cấp 136
PieCot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.