Python 스크립트에 주석을 추가하고 이중 언어 Python / C ++ "프로그램"으로 만듭니다.


12

다음과 같은 Python 3 스크립트가 제공됩니다.

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

greet()

이 텍스트 파일에 몇 줄을 추가 하여 파이썬 프로그램으로 실행하거나 컴파일하고 동일한 출력을 생성하는 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
제목에는 설명을 추가한다고 말하지만 본문에는 몇 줄만 추가하면된다고 말합니다. 무엇 이니?
Ad Hoc Garf Hunter

@WheatWizard 제목은 힌트입니다. 임의의 줄을 앞에 추가 하여이 문제를 해결할 수 있다면 (코멘트가 아닌) 나는 의아해 할 것입니다.
레온

이것은 매우 좋은 질문입니다. 내 유일한 말은 앞으로 점수를 매길 바이트 수에 충실하는 것입니다. 다른 시스템에있는 것들을 확인하는 것이 더 간단합니다.
Linus

@Linus 저는 비표준적인 방식으로 점수를 선택하는 것이 실수라는 것을 인정합니다. 앞으로는 반복하지 않습니다.
레온

2
참고 : 제공된 sed 명령은 줄 바꿈 문자, 즉 공백 문자를 계산합니다.
edc65

답변:


10

116 점

접두사 :

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

전 처리기 백 슬래시 \는 불쾌한 :포함 행을 사용되지 않는 매크로로 가져옵니다 . 여기서 사용해보십시오 .

C ++ 4의 암시 적 int에 대한 메모에 대한 edc65의 답변 덕분 입니다. 이상 제안
주신 PieCot의 답변 에 감사드립니다 . Leon 에게 원본에서 제거를 제안 해 주셔서 감사합니다 .<cstdio><stdio.h>
X#define X\


나는 누군가가 내 점수를 확인할 수 있다면 sed하지 않았다, 나는 그것을 대단히 감사하겠습니다.
Linus

모든 공백을 제거하면 내 수는 (손으로) 110입니다 (그러나 잘못되었습니다 ... 111입니다)
edc65

2
@Linus`#define X \`에 X가 필요한 이유는 무엇입니까?
레온

@Leon good catch!
Linus

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

참고 : stdio 및 puts는 여전히 C ++에서 살아 있고 발차합니다. 누락 INT 타입 4. ++ C에서 유효 테스트


점수는 전체 프로그램 (파이썬 코드 포함)에 대해 계산되어야합니다.
레온

삼항 조건부에는 빈 두 번째 부분이있을 수 있으므로 2 0행 에서 후행 을 제거 할 수 있습니다 . 테스트.
코너 O'Brien

python 코드가 모든 답변에 대해 동일하기 때문에 왜 그런지 알지 못하지만 당신은 보스입니다. 나는 sed하지 않고 손으로 수를 세었다, 나는 그것이
옳기를

@ ConorO'Brien 정말 할 수 있습니다! 난 몰랐 거든! Thx
edc65 18.40에

<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 ++ 버전의 출력은 파이썬 버전과 동일하지 않으므로 줄 바꿈이 없습니다. 질문에 그 설명을 추가했습니다.
레온

@Leon 이제 수정되었습니다.
코너 O'Brien

#import유효하지 않습니다 C ++
Leon

1
영리한 처리:
edc65

2
@Leon 사이트 규칙에 따르면 하나의 환경에서 작동하면 유효한 제출물입니다.
코너 O'Brien


5

136 점

기록에 대해서만 :

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

콜론을 처리하는 또 다른 (덜 효율적인) 방법.


1
그러나 cstdio주목해야합니다.
edc65

나는 이것에 대한 점수가 136이라고 생각합니다. 당신은 공백을 세지 않습니다.
Linus

@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.