Aggiungi commenti a uno script Python e trasformalo in un "programma" bilingue Python / C ++


12

Dato il seguente script Python 3:

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

greet()

Prepara alcune righe a questo file di testo in modo che possa essere eseguito sia come programma Python sia compilato ed eseguito come programma C ++ producendo lo stesso output Ciao, mondo! (compresa la nuova riga alla fine):

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

La soluzione verrà valutata in base al conteggio dei caratteri non bianchi dell'intero programma, incluso lo script Python:

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

5
Nel titolo dici di aggiungere commenti, tuttavia nel corpo dici che devi solo anteporre alcune righe. Cos'è questo?
— Ad Hoc Garf Hunter

@WheatWizard Il titolo è un suggerimento. Se riesci a risolverlo anteponendo righe arbitrarie (non commenti) rimarrò perplesso.
— Leon,

Questa è una bella domanda La mia unica osservazione sarebbe quella di attenermi al conteggio dei byte per il punteggio in futuro. È più semplice verificare quelli su sistemi diversi.
— Linus,

@Linus Ammetto che selezionare il punteggio in modo non standard sia stato un errore. Non lo ripeterò in futuro.
— Leon,

2
Solo una nota: il comando sed fornito conta le nuove righe, ovvero gli spazi bianchi
— edc65

Risposte:


10

Punteggio 116

anteporre:

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

La barra rovesciata del preprocessore \trascina la cattiva :linea di contenimento in una macro non utilizzata. Provalo qui .

Grazie alla risposta di edc65 per la nota sull'int implicito in C ++ 4.
Grazie alla risposta di PieCot per aver suggerito <cstdio>oltre <stdio.h>.
Grazie a Leon per avermi suggerito di rimuovere Xl'originale #define X\.


Non ho sed, se qualcuno potesse verificare il mio punteggio lo apprezzerei molto.
— Linus,

Rimuovendo tutti gli spazi bianchi, il mio conteggio (a mano) è 110 (ma ho sbagliato ... è 111)
— edc65

2
@Linus Perché hai bisogno della X in `#define X \`?
— Leon,

@Leon buona cattura!
— Linus,

2
Per chiunque si chieda cosa sia C ++ 4: In questo caso è l'abbreviazione di "Il C ++ che gcc 4.3.2 accetta" .
— nwp,

11

Punteggio 119

(Thx @Linus per il conteggio dei byte)

(1 byte salvato thx @Conor O'Brien) (1 byte salvato thx @PieCot)

Contando di nuovo i byte a mano, ho trovato 113. Forse questa volta è giusto. No non lo è

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

Note: stdio e put sono ancora vivi e attivi in ​​C ++. Il tipo int mancante è valido in C ++ 4. Test


Il punteggio deve essere calcolato rispetto al programma completo (incluso il codice Python).
— Leon,

Poiché il condizionale ternario può avere una seconda porzione vuota, è possibile rimuovere il trascinamento 0sulla riga 2. Test.
— Conor O'Brien,

OK, non vedo perché, poiché il codice Python sarà lo stesso per ogni risposta, ma tu sei il capo. Ho fatto il conteggio a mano, non avendo sed, spero sia giusto
— edc65

@ ConorO'Brien può davvero! Non sapevo! Thx
— edc65

Puoi usare <cstdio> anziché <stdio.h>
— PieCot il

7

Punteggio 131 130 134

Le linee da anteporre sono:

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

E il codice risultante:

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

greet()

analisi

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
λ 

L'output della versione C ++ non è identico alla versione Python: manca una nuova riga. Aggiunto questo chiarimento alla domanda.
— Leon,

@Leon Questo è stato risolto.
— Conor O'Brien,

#importnon è valido C ++
— Leon il

1
Gestione intelligente di:
— edc65,

2
@Leon Le nostre regole del sito dicono che se funziona in un ambiente, è un invio valido.
— Conor O'Brien,


5

Punteggio 136

Solo per i record:

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

Un altro modo (meno efficiente) per gestire i due punti.


1
Ma cstdiova notato.
— edc65,

Penso che il punteggio per questo finisca per essere 136. Non conti gli spazi.
— Linus,

@Linus: grazie! Penso che tu abbia ragione. Se uso questo comando: tr -d '[:space:] ' < bilingual.py.cpp | wc -c ottengo 128, mentre questo: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c fornisce 136
— PieCot il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.