Agregue comentarios a un script de Python y conviértalo en un "programa" bilingüe de Python / C ++


12

Dado el siguiente script de Python 3:

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

greet()

Anteponga algunas líneas a este archivo de texto para que pueda ejecutarse como un programa Python, así como compilarse y ejecutarse como un programa C ++ que produce la misma salida. ¡Hola, mundo! (incluida la nueva línea al final):

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

La solución se puntuará por el recuento de caracteres que no sean espacios en blanco de todo el programa, incluido el script de Python:

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

55
En el título que dice agregue comentarios, sin embargo, en el cuerpo que dice que solo tiene que anteponer algunas líneas. Cual es
Ad Hoc Garf Hunter

@WheatWizard El título es una pista. Si puede resolver esto anteponiendo líneas arbitrarias (sin comentarios), quedaré perplejo.
Leon

Esta es una muy buena pregunta. Mi único comentario sería limitarme al conteo de bytes para anotar en el futuro. Es más sencillo verificar aquellos en diferentes sistemas.
Linus

@Linus Admito que seleccionar el puntaje de manera no estándar fue un error. No lo repetirá en el futuro.
Leon

2
Solo una nota: el comando sed proporcionado cuenta las nuevas líneas, que son caracteres de espacio en blanco
edc65

Respuestas:


10

Puntuación 116

Anteponer:

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

La barra diagonal inversa del preprocesador \tira de la desagradable :línea de contención en una macro no utilizada. Pruébalo aquí .

Gracias a la respuesta de edc65 para la nota sobre int implícito en C ++ 4.
Gracias a la respuesta de PieCot por sugerir <cstdio>más <stdio.h>.
Gracias a Leon por sugerir que elimine Xel original #define X\.


No tengo sed, si alguien pudiera verificar mi puntaje lo agradecería mucho.
Linus

Al eliminar todos los espacios en blanco, mi recuento (a mano) es 110 (pero me equivoqué ... es 111)
edc65

2
@Linus ¿Por qué necesitas la X en `#define X \`?
Leon

@Leon buena captura!
Linus

2
Para cualquiera que se pregunte qué es C ++ 4: en este caso es la abreviatura de "El C ++ que acepta gcc 4.3.2" .
nwp

11

Puntuación 119

(Thx @Linus para el recuento de bytes)

(1 byte guardado gracias a @Conor O'Brien) (1 byte guardado gracias a @PieCot)

Contando bytes nuevamente a mano, encontré 113. Quizás esta vez sea correcto. No, no es

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

Notas: stdio y put todavía están vivos y pateando en C ++. El tipo int faltante es válido en C ++ 4. Prueba


El puntaje debe calcularse contra el programa completo (incluido el código de Python).
Leon

Como el condicional ternario puede tener una segunda porción vacía, puede eliminar el final 0de la línea 2. Prueba.
Conor O'Brien el

OK, no veo por qué, ya que el código de Python será el mismo para cada respuesta, pero tú eres el jefe. Hice el recuento a mano, no habiendo sed, espero que sea correcto
edc65

@ ConorO'Brien realmente puede! ¡Yo no sabía! Thx
edc65

Puede usar <cstdio> en lugar de <stdio.h>
PieCot el

7

Puntuación 131 130 134

Las líneas a anteponer son:

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

Y el código resultante:

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

greet()

Pruebas

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
λ 

El resultado de la versión de C ++ no es idéntico a la versión de Python: pierde una nueva línea. Agregó esa aclaración a la pregunta.
Leon

@Leon Esto ya está solucionado.
Conor O'Brien el

#importno es válido C ++
Leon

1
Manejo inteligente de:
edc65

2
@Leon Las reglas de nuestro sitio dicen que si funciona en un entorno, es un envío válido.
Conor O'Brien el


5

Puntuación 136

Solo para los registros:

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

Otra forma (menos eficiente) de manejar el colon.


1
Pero cstdiodebe tenerse en cuenta.
edc65

Creo que el puntaje para esto termina siendo 136. No cuenta los espacios.
Linus

@Linus: ¡Gracias! Creo que tienes razón. Si uso este comando: tr -d '[:space:] ' < bilingual.py.cpp | wc -c obtengo 128, mientras que este: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c proporciona 136
PieCot
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.