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.