在Python脚本中添加注释,并使其成为双语的Python / C ++“程序”


12

给定以下Python 3脚本:

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

greet()

前面加上一些行该文本文件,以便它可以同时作为一个Python程序执行以及编译和运行一个C ++程序产生相同的输出你好,世界!(包括末尾的换行符):

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

该解决方案将通过整个程序的非空白字符计数来评分,包括Python脚本:

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

5
在标题中,您说添加注释,但是在正文中,您只需要在前面加上几行即可。哪有
Ad Hoc Garf Hunter,2016年

@WheatWizard标题是一个提示。如果您可以通过在前面加上任意行(非注释)来解决此问题,我将感到困惑。
莱昂

这是一个非常好的问题。我唯一要说的是,将来只保留字节数以进行评分。检查不同系统上的内容更简单。
莱纳斯(Linus)2016年

@Linus我承认以非标准方式选择分数是错误的。以后不再重复。
莱昂

2
只需注意:提供的sed命令计算换行符,即换行符
edc65 '16

Answers:


10

得分116

前置:

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

预处理程序反斜杠\将讨厌:的行拖入未使用的宏。在这里尝试。

感谢edc65对C ++ 4中隐式int的注释。
感谢PieCot的建议<cstdio>over <stdio.h>
感谢Leon的建议,我删除X了原件中的#define X\


我还没有唱歌,如果有人可以验证我的成绩,我将不胜感激。
莱纳斯(Linus)2016年

删除所有空格,我的手数是110(但我错了……是111)
edc65

2
@Linus为什么需要在#define X \中使用X?
莱昂

@Leon好抓!
莱纳斯(Linus)2016年

2
对于任何想知道C ++ 4是什么的人:在这种情况下,它是“ gcc 4.3.2接受的C ++”的缩写。
nwp

11

得分119

(Thx @Linus表示字节数)

(保存1个字节@Conor O'Brien)(保存1个字节@PieCot)

我再次手动计算字节数,发现是113。也许这次是对的。不,这不对

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

注意:stdio和puts在C ++中仍然有效。丢失的整型是C ++ 4.有效测试


必须根据完整程序(包括python代码)计算分数。
莱昂

由于三元条件的第二部分可以为空,因此可以删除第02行上的尾随。测试。
科纳·奥布莱恩

好的,我不明白为什么,因为每个答案的python代码都是相同的,但是您是老板。我是手工计算的,没有sed,我希望是对的
edc65

@ ConorO'Brien真的可以!我不知道!Thx
edc65 '16

您可以使用<cstdio>而不是<stdio.h>
PieCot

7

分数131 130 134

要添加的行是:

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

以及产生的代码:

#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
λ 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
λ 

C ++版本的输出与python版本不同-缺少换行符。在该问题上增加了澄清。
莱昂

@Leon现在已解决。
科纳·奥布莱恩

#import无效的C ++
Leon

1
巧妙处理:
edc65 '16

2
@Leon我们的网站规则说,如果它在一个环境中有效,那么它是有效提交。
科纳·奥布莱恩


5

得分136

仅作记录:

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

另一种(效率较低)处理结肠的方法。


1
但是cstdio要注意。
edc65 '16

我认为最终的得分是136。您无需计算空格。
莱纳斯(Linus)2016年

@Linus:谢谢!我想你是对的。如果我使用此命令:tr -d '[:space:] ' < bilingual.py.cpp | wc -c 我得到128,而 这个命令: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c 提供136
PieCot
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.