Adicione comentários a um script Python e torne-o um “programa” bilíngue em Python / C ++

12

Dado o seguinte script Python 3:

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

greet()

Anexe algumas linhas a este arquivo de texto para que ele possa ser executado como um programa Python, bem como compilado e executado como um programa C ++ produzindo a mesma saída Olá, mundo! (incluindo a nova linha no final):

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

A solução será pontuada pela contagem de caracteres que não sejam espaços em branco de todo o programa, incluindo o script Python:

sed 's/\s//g' bilingual.py.cpp|wc -c
Leon
fonte
5
No título que você diz, adicione comentários, no entanto, no corpo, você diz que só precisa acrescentar algumas linhas. Qual é?
Post Rock Garf Hunter
@WheatWizard O título é uma dica. Se você puder resolver isso anexando linhas arbitrárias (sem comentários), ficarei confuso.
Leon
Esta é uma pergunta muito boa. Minha única observação seria apenas manter a contagem de bytes para pontuação no futuro. É mais simples verificar se há sistemas diferentes.
Linus
@Linus Admito que selecionar a pontuação de maneira não padrão foi um erro. Não o repetirá no futuro.
Leon
2
Apenas uma nota: o comando sed fornecido contar as novas linhas, que são caracteres em branco
edc65

Respostas:

10

Score 116

Anexar:

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

A barra invertida do pré-processador \puxa a :linha contendo desagradável para uma macro não utilizada. Experimente aqui .

Agradecemos a resposta de edc65 para a observação sobre int implícita em C ++ 4.
Obrigado à resposta do PieCot por sugerir <cstdio>mais <stdio.h>.
Agradeço a Leon por sugerir que eu remova Xo original #define X\.

Linus
fonte
Eu não tenho sed, se alguém pudesse verificar minha pontuação, eu apreciaria muito.
Linus
Removendo todos os espaços, minha contagem (à mão) é de 110 (mas eu estava errado ... é 111)
edc65
2
@Linus Por que você precisa do X em `#define X \`?
Leon
@Leon boa captura!
Linus
2
Para quem quer saber o que é C ++ 4: Nesse caso, é a abreviação de "O C ++ que o gcc 4.3.2 aceita" .
nwp 6/11/16
11

Pontuação 119

(Thx @Linus para a contagem de bytes)

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

Contando os bytes novamente à mão, encontrei 113. Talvez esteja certo desta vez. Não, não é

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

Notas: stdio e puts ainda estão vivos e estão em C ++. O tipo int ausente é válido no C ++ 4. Teste

edc65
fonte
A pontuação deve ser calculada com base no programa completo (incluindo o código python).
Leon
Como o condicional ternário pode ter uma segunda parte vazia, é possível remover o final 0da linha 2. Teste.
Conor O'Brien
OK, não vejo por que, já que o código python será o mesmo para todas as respostas, mas você é o chefe. Eu fiz a contagem à mão, não tendo sed, espero que seja certo
edc65
@ ConorO'Brien realmente pode! Eu não sabia! Thx
edc65 5/16
Você pode usar <cstdio> em vez de <stdio.h>
PieCot
7

Pontuação 131 130 134

As linhas a serem anexadas são:

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

E o 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()

Teste

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
λ 
Conor O'Brien
fonte
A saída da versão C ++ não é idêntica à versão python - ela perde uma nova linha. Adicionado esse esclarecimento à pergunta.
Leon
@ Leon Agora está corrigido.
Conor O'Brien
#importnão é válido C ++
Leon
1
Manipulação inteligente de:
edc65 5/16
2
@ Leon As regras do nosso site dizem que, se funcionar em um ambiente, é um envio válido.
Conor O'Brien
5

Pontuação 110 104

Melhorando a resposta de Linus :

#include <cstdio>
#define print main(){puts
#define greet() ;}//\
def greet():
    print("Hello, world!")

greet()

Teste como C ++

Teste como Python

Leon
fonte
Tenho obter 109 ...
Linus
1
@Linus Eu tenho uma nova linha na última linha #
Leon
5

Pontuação 136

Apenas para os registros:

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

Outra maneira (menos eficiente) de lidar com o cólon.

PieCot
fonte
1
Mas cstdiodeve-se notar.
Edc65
Eu acho que a pontuação para isso acaba sendo 136. Você não conta os espaços.
Linus
@Linus: Obrigado! Eu acho que você está certo. Se eu usar este comando: tr -d '[:space:] ' < bilingual.py.cpp | wc -c recebo 128, enquanto este: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c fornece 136
PieCot 5/16