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
Léon
la source
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\.

Linus
la source
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

edc65
la source
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
λ 
Conor O'Brien
la source
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 110 104

Améliorant la réponse de Linus :

#include <cstdio>
#define print main(){puts
#define greet() ;}//\
def greet():
    print("Hello, world!")

greet()

Tester en C ++

Tester en Python

Léon
la source
J'ai 109 ...
Linus
1
@Linus J'ai une nouvelle ligne à la dernière ligne
Leon
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.

PieCot
la source
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