Ajoutez des commentaires à un script Python et faites-en un «programme» bilingue Python / C ++


12

Étant donné le script Python 3 suivant:

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

greet()

Ajoutez des lignes à ce fichier texte afin qu'il puisse être à la fois exécuté en tant que programme Python ainsi que compilé et exécuté en tant que programme C ++ produisant la même sortie. Bonjour tout le monde! (y compris la nouvelle ligne à la fin):

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

La solution sera notée par le nombre de caractères non blancs de l'ensemble du programme, y compris le script Python:

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

5
Dans le titre, vous dites ajouter des commentaires, mais dans le corps, vous dites que vous n'avez qu'à ajouter quelques lignes. Lequel est-ce?
Ad Hoc Garf Hunter

@WheatWizard Le titre est un indice. Si vous pouvez résoudre ce problème en ajoutant des lignes arbitraires (non-commentaires), je serai perplexe.
Leon

Ceci est une très belle question. Ma seule remarque serait de s'en tenir au nombre d'octets pour la notation à l'avenir. Il est plus simple de vérifier ceux sur différents systèmes.
Linus

@Linus J'avoue que la sélection du score d'une manière non standard était une erreur. Ne le répétera pas à l'avenir.
Leon

2
Juste une note: la commande sed fournie compte les sauts de ligne, qui sont des caractères d'espaces
edc65

Réponses:


10

Score 116

Prepend:

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

La barre oblique inverse du préprocesseur \tire la :ligne contenant le méchant dans une macro inutilisée. Essayez-le ici .

Merci à la réponse d' edc65 pour la note sur l'int implicite en C ++ 4.
Merci à la réponse de PieCot pour suggérer <cstdio>plus <stdio.h>.
Merci à Leon d' avoir suggéré de supprimer le Xdans l'original #define X\.


Je n'ai pas séduit, si quelqu'un pouvait vérifier mon score, je l'apprécierais beaucoup.
Linus

En supprimant tous les espaces, mon nombre (à la main) est de 110 (mais je me
trompais

2
@Linus Pourquoi avez-vous besoin du X dans `#define X \`?
Leon

@Leon bonne prise!
Linus

2
Pour tous ceux qui se demandent ce qu'est le C ++ 4: Dans ce cas, il est l'abréviation de "Le C ++ que gcc 4.3.2 accepte" .
nwp

11

Score 119

(Thx @Linus pour le nombre d'octets)

(1 octet enregistré thx @Conor O'Brien) (1 octet enregistré thx @PieCot)

En comptant à nouveau les octets à la main, j'en ai trouvé 113. Peut-être que c'est vrai cette fois. Non ce n'est pas

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

Remarques: stdio et put sont toujours actifs et en cours d'exécution en C ++. Le type int manquant est valide en C ++ 4. Test


Le score doit être calculé par rapport au programme complet (y compris le code python).
Leon

Étant donné que le conditionnel ternaire peut avoir une deuxième partie vide, vous pouvez supprimer la fin 0de la ligne 2. Testez.
Conor O'Brien

OK, je ne vois pas pourquoi, car le code python sera le même pour chaque réponse, mais vous êtes le patron. J'ai fait le décompte à la main, n'ayant pas sed, j'espère que c'est vrai
edc65

@ ConorO'Brien ça peut vraiment! Je ne savais pas! Thx
edc65

Vous pouvez utiliser <cstdio> plutôt que <stdio.h>
PieCot

7

Note 131 130 134

Les lignes à ajouter sont:

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

Et le code résultant:

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

greet()

Essai

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
λ 

La sortie de la version C ++ n'est pas identique à la version python - il manque une nouvelle ligne. Ajout de cette clarification à la question.
Leon

@Leon Ceci est maintenant corrigé.
Conor O'Brien

#importn'est pas valide C ++
Leon

1
Gestion intelligente de:
edc65

2
@Leon Les règles de notre site disent que si cela fonctionne dans un seul environnement, c'est une soumission valide.
Conor O'Brien


5

Score 136

Uniquement pour les enregistrements:

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

Une autre façon (moins efficace) de gérer le côlon.


1
Mais cstdioil faut le noter.
edc65

Je pense que le score pour cela finit par être 136. Vous ne comptez pas les espaces.
Linus

@Linus: Merci! Je pense que tu as raison. Si j'utilise cette commande: tr -d '[:space:] ' < bilingual.py.cpp | wc -c j'obtiens 128, tandis que celle-ci: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c fournit 136
PieCot
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.