Bir Python betiğine yorum ekleyin ve iki dilli bir Python / C ++ “programı” yapın


12

Aşağıdaki Python 3 komut dosyası verildiğinde:

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

greet()

Hem Python programı olarak yürütülebilir hem de derlenmiş ve aynı çıktıyı üreten bir C ++ programı olarak çalıştırılabilir böylece bu metin dosyasına bazı satırlar ekleyin Merhaba, dünya! (sondaki yeni satır dahil):

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

Çözüm, Python betiği de dahil olmak üzere tüm programın boşluk olmayan karakter sayısı ile puanlanacaktır:

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

5
Başlıkta yorum ekleyin, ancak gövdede yalnızca bazı satırları eklemeniz gerektiğini söylersiniz. Hangisi?
Ad Hoc Garf Hunter

@WheatWizard Başlık bir ipucudur. Bunu rastgele satırlar (yorum olmayanlar) ekleyerek çözebilirseniz şaşkın olurum.
Leon

Bu çok güzel bir soru. Tek dikkatim, gelecekte puanlama için bayt sayısına bağlı kalmak olacaktır. Farklı sistemlerde olanları kontrol etmek daha kolaydır.
Linus

@Linus Skoru standart olmayan bir şekilde seçmenin bir hata olduğunu kabul ediyorum. Gelecekte tekrar etmeyecek.
Leon

2
Sadece bir not: sağlanan sed komutu, boşluk karakterleri olan yeni satırları sayar
edc65

Yanıtlar:


10

Puan 116

başına ekle:

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

Önişlemci ters eğik çizgi \, kötü :içeren çizgiyi kullanılmayan bir makroya çeker . Burada deneyin .

Edc65'in C ++ 4'teki örtük int ile ilgili notuna verdiği cevap sayesinde .
Sayesinde PieCot cevabı öneren <cstdio>üzerinde <stdio.h>.
Sayesinde Leon için ben kaldırmak önermek Xorijinal #define X\.


Sed yok, birisi puanımı doğrulayabilseydi çok memnun olurum.
Linus


2
@Linus Neden #define X \ `deki X'e ihtiyacınız var?
Leon

@ İyi şanslar!
Linus

2
C ++ 4'ün ne olduğunu merak eden herkes için: Bu durumda "gcc 4.3.2'nin kabul ettiği C ++" kısaltmasıdır .
nwp

11

Puan 119

(Bayt sayısı için Thx @Linus)

(1 bayt kaydedilen thx @Conor O'Brien) (1 bayt kaydedilen thx @PieCot)

Baytları tekrar elle sayarak 113 tane buldum. Belki bu sefer doğrudur. Hayır değil

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

Notlar: stdio ve puts hala hayatta ve C ++ 'da tekmeliyor. Eksik int türü C ++ 4'te geçerlidir. Test


Skor tam programa göre hesaplanmalıdır (python kodu dahil).
Leon

Üçlü koşullu ikinci bir boş bölüm içerebileceğinden, 02. satırdaki sondaki işareti kaldırabilirsiniz .
Conor O'Brien

Tamam Python kodu her cevap için aynı olacağından nedenini anlamıyorum, ama patron sensin. Sayımı elle yaptım, sed yapmıyorum, umarım doğru
edc65

@ ConorO'Brien gerçekten yapabilir! Bilmiyordum! Thx
edc65

<Stdio.h> yerine <cstdio> kullanabilirsiniz
PieCot

7

Skoru 131 130 134

Eklenecek satırlar:

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

Ve ortaya çıkan kod:

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

greet()

Test yapmak

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
λ 

C ++ sürümünün çıktısı python sürümüyle aynı değildir - bir satırsonu özlüyor. Bu açıklamayı soruya ekledi.
Leon

@Leon Bu sorun çözüldü.
Conor O'Brien

#importgeçerli değil C ++
Leon

1
Akıllı kullanım:
EDC65

2
@Leon Sitemiz kuralları, bir ortamda çalışırsa geçerli bir gönderim olduğunu söylüyor.
Conor O'Brien


5

Puan 136

Sadece kayıtlar için:

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

Kolonun üstesinden gelmenin başka bir (daha az verimli) yolu.


1
Ancak cstdionot edilmelidir.
edc65

Bence bu puan 136 olur. Boşlukları saymazsınız.
Linus

@ Linus: Teşekkürler! Bence haklısın. Bu komutu kullanırsam: tr -d '[:space:] ' < bilingual.py.cpp | wc -c 128 alırım, bu ise: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c 136
PieCot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.