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.