Tambahkan komentar ke skrip Python dan jadikan “program” bilingual Python / C ++

12

Diberikan skrip Python 3 berikut:

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

greet()

Tambahkan beberapa baris ke file teks ini sehingga dapat dijalankan sebagai program Python serta dikompilasi dan dijalankan sebagai program C ++ yang menghasilkan keluaran yang sama Halo, dunia! (termasuk baris baru di akhir):

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

Solusinya akan dinilai dengan jumlah karakter non-spasi putih dari seluruh program, termasuk skrip Python:

sed 's/\s//g' bilingual.py.cpp|wc -c
Leon
sumber
5
Dalam judul Anda mengatakan menambahkan komentar, namun di tubuh Anda mengatakan Anda hanya perlu menambahkan beberapa baris. Yang mana itu?
Ad Hoc Garf Hunter
@WheatWizard Judulnya adalah petunjuk. Jika Anda dapat menyelesaikan ini dengan menambahkan baris arbitrer (non-komentar) saya akan bingung.
Leon
Ini pertanyaan yang sangat bagus. Satu-satunya komentar saya adalah tetap berpegang pada jumlah byte untuk mencetak di masa depan. Lebih mudah untuk memeriksa mereka pada sistem yang berbeda.
Linus
@Linus Saya akui bahwa memilih skor dengan cara yang tidak standar adalah kesalahan. Tidak akan mengulanginya di masa mendatang.
Leon
2
Hanya sebuah catatan: perintah sed yang disediakan menghitung baris baru, yaitu karakter spasi putih
edc65

Jawaban:

10

Skor 116

Prepend:

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

Backslash preprocessor \menarik :garis berisi jahat ke makro yang tidak digunakan. Coba di sini .

Berkat jawaban edc65 untuk catatan tentang int implisit dalam C ++ 4.
Berkat jawaban PieCot ini untuk menyarankan <cstdio>lebih <stdio.h>.
Terima kasih kepada Leon karena menyarankan saya menghapus Xyang asli #define X\.

Linus
sumber
Saya tidak punya sed, jika seseorang dapat memverifikasi skor saya, saya akan sangat menghargainya.
Linus
Menghapus semua spasi putih, hitungan saya (dengan tangan) adalah 110 (tapi saya salah ... ini 111)
edc65
2
@Linus Mengapa Anda membutuhkan X di `#define X \`?
Leon
@Leon tangkapan yang bagus!
Linus
2
Bagi siapa pun yang bertanya-tanya apa itu C ++ 4: Dalam hal ini kependekan dari "The C ++ yang diterima gcc 4.3.2" .
nwp
11

Skor 119

(Thx @Linus untuk jumlah byte)

(1 byte disimpan thx @Conor O'Brien) (1 byte disimpan thx @PieCot)

Menghitung byte lagi dengan tangan, saya menemukan 113. Mungkin benar kali ini. Bukan itu

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

Catatan: stdio dan put masih hidup dan menendang C ++. Tipe int yang hilang valid dalam C ++ 4. Test

edc65
sumber
Skor harus dihitung terhadap program lengkap (termasuk kode python).
Leon
Karena kondisional ternary dapat memiliki bagian kedua yang kosong, Anda dapat menghapus trailing 0on line 2. Tes.
Conor O'Brien
OK saya tidak mengerti mengapa, karena kode python akan sama untuk setiap jawaban, tetapi Anda adalah bosnya. Saya menghitung dengan tangan, tanpa sed, saya harap itu benar
edc65
@ Conor'Brien itu benar-benar bisa! Saya tidak tahu! Thx
edc65
Anda dapat menggunakan <cstdio> daripada <stdio.h>
PieCot
7

Nilai 131 130 134

Baris-baris yang akan dituliskan adalah:

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

Dan kode yang dihasilkan:

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

greet()

Pengujian

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
λ 
Conor O'Brien
sumber
Output dari versi C ++ tidak identik dengan versi python - ia melewatkan baris baru. Menambahkan klarifikasi itu ke pertanyaan.
Leon
@Leon Ini sudah diperbaiki.
Conor O'Brien
#importtidak valid C ++
Leon
1
Penanganan :
cerdas
2
@Leon Aturan situs kami mengatakan bahwa jika berfungsi dalam satu lingkungan, itu adalah pengiriman yang valid.
Conor O'Brien
5

Nilai 110 104

Memperbaiki jawaban Linus :

#include <cstdio>
#define print main(){puts
#define greet() ;}//\
def greet():
    print("Hello, world!")

greet()

Tes sebagai C ++

Uji sebagai Python

Leon
sumber
Saya mendapat 109 ...
Linus
1
@Linus Saya punya baris baru di baris terakhir
Leon
5

Skor 136

Hanya untuk catatan:

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

Cara lain (kurang efisien) untuk menangani usus besar.

PieCot
sumber
1
Namun cstdioharus diperhatikan.
edc65
Saya pikir skor untuk ini menjadi 136. Anda tidak menghitung spasi.
Linus
@Linus: Terima kasih! Saya pikir kamu benar. Jika saya menggunakan perintah ini: tr -d '[:space:] ' < bilingual.py.cpp | wc -c Saya mendapatkan 128, sedangkan yang ini: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c menyediakan 136
PieCot