Додайте коментарі до сценарію 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 Hunter Hunter

@WheatWizard Назва - підказка. Якщо ви зможете вирішити це, попередньо довівши рядки (без коментарів), я буду спантеличений.
Леон

Це дуже приємне запитання. Єдине моє зауваження було б просто дотримуватися підрахунку байтів для того, щоб забити в майбутньому. Простіше перевірити їх на різних системах.
Лінус

@Linus Я визнаю, що вибір оцінки нестандартним чином був помилкою. Не повториться це в майбутньому.
Леон

2
Лише зауваження: надана команда sed підраховує нові рядки, це символи пробілів
edc65

Відповіді:


10

Оцінка 116

Доплатити:

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

Попередня косою рисою препроцесора \витягує неприємний :рядок, що містить вміст, що не використовується. Спробуйте тут .

Завдяки відповіді edc65 за примітку про неявний int в C ++ 4.
Завдяки відповіді PieCot за те, що він запропонував <cstdio>закінчити <stdio.h>.
Завдяки Леону за пропозицію видалити Xоригінал #define X\.


У мене немає сіда, якщо хтось міг би підтвердити мій рахунок, я дуже вдячний.
Лінус

Видаляючи пробіли, кількість моїх (вручну) - 110 (але я помилявся ... це 111)
edc65

2
@Linus Навіщо потрібен X у "#define X \"?
Леон

@Leon гарний улов!
Лінус

2
Для всіх, хто цікавиться, що таке C ++ 4: У цьому випадку це коротке слово "C ++, яке приймає gcc 4.3.2" .
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 та номери все ще живі та брикаються в C ++. Відсутній тип int є дійсним у C ++ 4. Тест


Оцінка повинна бути обчислена по повній програмі (включаючи код python).
Леон

Оскільки у потрійного умовного може бути порожня друга частина, ви можете видалити пробіл 0у рядку 2. Тест.
Conor O'Brien

Гаразд, я не розумію, чому код пітона буде однаковий для кожної відповіді, але ви - начальник. Я зробив підрахунок вручну, не маючи sed, я сподіваюся, що це правильно
edc65

@ ConorO'Brien це справді може! Я не знав! Thx
edc65

Ви можете використовувати <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 Це тепер виправлено.
Conor O'Brien

#importне дійсний C ++
Леон

1
Розумне поводження:
edc65

2
@Leon Правила нашого сайту говорять про те, що якщо він працює в одному середовищі, це правильне подання.
Conor 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: Дякую! Я думаю, ти маєш рацію. Якщо я використовую цю команду: tr -d '[:space:] ' < bilingual.py.cpp | wc -c я отримую 128, а ця: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c надає 136
PieCot
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.