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

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\.


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


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
λ 

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

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.