Pythonスクリプトにコメントを追加して、バイリンガルPython / C ++の「プログラム」にします


12

次のPython 3スクリプトを考えます:

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

greet()

このテキストファイルにいくつかの行を追加して、Pythonプログラムとして実行できるだけでなく、同じ出力を生成するC ++プログラムとしてコンパイルおよび実行できるようにします Hello、world!(最後の改行を含む):

$ 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
タイトルにコメントを追加すると言いますが、本文にはいくつかの行を追加するだけです。どっち?
ポストロックガーフハンター

@WheatWizardタイトルはヒントです。任意の行を追加することでこれを解決できる場合(コメントなし)、私は困惑します。
レオン

これはとてもいい質問です。私の唯一の発言は、将来の得点のためにバイト数に固執することです。異なるシステムでそれらをチェックする方が簡単です。
ライナス

@Linus非標準的な方法でスコアを選択するのは間違いだったと認めます。将来的にそれを繰り返さないでしょう。
レオン

2
注:提供されているsedコマンドは、空白文字である改行をカウントします
-edc65

回答:


10

スコア116

付加:

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

プリプロセッサのバックスラッシュ\は、厄介な:行を未使用のマクロに引き込みます。ここで試してみてください

C ++ 4の暗黙的なintに関するメモに対するedc65の回答に感謝します。を提案して
くれたPieCotの回答に感謝します。オリジナルのを削除するよう提案して くれたレオンに感謝します。<cstdio><stdio.h>
X#define X\


sedはしていませんが、誰かが私のスコアを確認できたら、とても感謝しています。
ライナス

すべての空白を削除すると、(手動で)カウントは110になります(ただし、間違っていました... 111です)
-edc65

2
@Linus `#define X \`にXが必要なのはなぜですか?
レオン

@レオン良いキャッチ!
ライナス

2
C ++ 4が何であるか疑問に思う人のために:この場合、それは"gcc 4.3.2が受け入れるC ++"の略です。
nwp

11

スコア119

(バイトカウントはThx @Linus)

(1バイト保存thx @Conor O'Brien)(1バイト保存thx @PieCot)

もう一度バイトを手で数えてみると、113が見つかりました。今度は正しいかもしれません。いいえ、ちがいます

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

注:C ++では、stdioとputsはまだ有効であり、動作しています。欠落しているint型はC ++ 4で有効です。テスト


スコアは、プログラム全体(Pythonコードを含む)に対して計算する必要があります。
レオン

三項条件は空の2番目の部分を持つことができるため、02行目の末尾を削除できます。テスト。
コナーオブライエン

OK理由はわかりませんが、Pythonコードはすべての回答で同じですが、あなたは上司です。私は手動でカウントしましたが、sedではなく、正しいことを願っています
-edc65

@ ConorO'Brienそれは本当にできる!知りませんでした!Thx
edc65

<stdio.h>ではなく<cstdio>を使用できます
-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 ++ではない
レオン

1
巧妙な処理:
edc65

2
@Leon当社のサイトルールでは、1つの環境で機能する場合、それは有効な提出であるとされています。
コナーオブライエン


5

スコア136

レコードのみ:

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

コロンを処理する別の(効率の低い)方法。


1
しかしcstdio、注意する必要があります。
edc65

このスコアは最終的に136になると思います。スペースはカウントしません。
ライナス

@Linus:ありがとう!あなたは正しいと思います。このコマンドを使用する場合: tr -d '[:space:] ' < bilingual.py.cpp | wc -c 128を取得しますが、これ tr -d '[:blank:] ' < bilingual.py.cpp | wc -c は136を提供します
PieCot
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.