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.