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.