Dodaj komentarze do skryptu Python i uczyń z niego dwujęzyczny „program” Python / C ++


12

Biorąc pod uwagę następujący skrypt Python 3:

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

greet()

Dodaj kilka wierszy do tego pliku tekstowego, aby można go było zarówno uruchomić jako program w języku Python, jak i skompilować i uruchomić jako program w języku C ++, generujący to samo wyjście Witaj, świecie! (w tym nowy wiersz na końcu):

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

Rozwiązanie zostanie ocenione na podstawie liczby znaków spacji w całym programie, w tym skryptu Python:

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

5
W tytule mówisz o dodawaniu komentarzy, jednak w treści mówisz, że musisz tylko wstawić kilka wierszy. Który to jest?
— Ad Hoc Garf Hunter

@WheatWizard Tytuł jest wskazówką. Jeśli możesz to rozwiązać przygotowując dowolne wiersze (bez komentarzy), będę zdziwiony.
— Leon

To bardzo miłe pytanie. Moją jedyną uwagą byłoby po prostu trzymanie się liczby bajtów w celu zdobywania punktów w przyszłości. Łatwiej jest sprawdzić te w różnych systemach.
— Linus

@Linus Przyznaję, że wybranie wyniku w niestandardowy sposób było błędem. Nie powtórzy tego w przyszłości.
— Leon

2
Tylko uwaga: podana komenda sed zlicza nowe linie, które są znakami spacji
— edc65

Odpowiedzi:


10

Ocena 116

Przygotuj:

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

Wsteczny ukośnik preprocesora \ciągnie nieprzyjemną :linię zawierającą w nieużywane makro. Wypróbuj tutaj .

Dzięki odpowiedzi edc65 na notatkę o domniemanej int w C ++ 4.
Dzięki odpowiedź PieCot jest dla sugerując <cstdio>się <stdio.h>.
Dziękujemy Leonowi za sugestię, że usunę Xoryginał #define X\.


Nie mam sed, jeśli ktoś mógłby zweryfikować mój wynik, byłbym bardzo wdzięczny.
— Linus,

Usuwając wszystkie białe znaki, moja liczba (ręcznie) wynosi 110 (ale się myliłem ... to 111)
— edc65

2
@Linus Dlaczego potrzebujesz X w `#define X \`?
— Leon

@Leon dobry połów!
— Linus,

2
Dla każdego, kto zastanawia się, czym jest C ++ 4: w tym przypadku jest to skrót od „C ++, które akceptuje gcc 4.3.2” .
— nwp

11

Ocena 119

(Thx @Linus dla liczby bajtów)

(1 bajt zapisany thx @ Conor O'Brien) (1 bajt zapisany thx @PieCot)

Licząc bajty ponownie ręcznie, znalazłem 113. Może tym razem jest słuszne. Nie, nie jest

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

Notatki: stdio i put są wciąż żywe i działają w C ++. Brakujący typ int jest poprawny w C ++ 4. Test


Wynik musi być obliczony na podstawie pełnego programu (w tym kodu python).
— Leon

Ponieważ trójkowy warunek może mieć pustą drugą część, możesz usunąć końcowy 0wiersz 2. Test.
— Conor O'Brien

OK, nie rozumiem dlaczego, ponieważ kod python będzie taki sam dla każdej odpowiedzi, ale ty jesteś szefem.
— Zliczyłem

@ ConorO'Brien to naprawdę może! Nie wiedziałem! Thx
— edc65,

Możesz użyć <cstdio> zamiast <stdio.h>
— PieCot

7

Ocena 131 130 134

Wiersze do dodania to:

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

I wynikowy kod:

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

greet()

Testowanie

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
λ 

Dane wyjściowe wersji C ++ nie są identyczne z wersją Pythona - brakuje nowej linii. Dodano to wyjaśnienie do pytania.
— Leon

@Leon To jest teraz naprawione.
— Conor O'Brien

#importnie jest poprawny C ++
— Leon

1
:
— Sprytna

2
@Leon Nasze zasady dotyczące witryny mówią, że jeśli działa w jednym środowisku, jest to prawidłowe przesłanie.
— Conor O'Brien


5

Ocena 136

Tylko dla akt:

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

Kolejny (mniej wydajny) sposób radzenia sobie z okrężnicą.


1
Ale cstdionależy zauważyć.
— edc65,

Myślę, że wynik to 136. Nie liczysz spacji.
— Linus

@Linus: Dzięki! Myślę, że masz rację. Jeśli tr -d '[:space:] ' < bilingual.py.cpp | wc -ctr -d '[:blank:] ' < bilingual.py.cpp | wc -c
— użyję
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.