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.