Добавьте комментарии к скрипту 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
В заголовке вы говорите «добавить комментарии», однако в теле вы говорите, что вам нужно только добавить несколько строк. Что он?
Ad Hoc Garf Hunter
@WheatWizard Название является подсказкой. Если вы можете решить эту проблему, добавив произвольные строки (без комментариев), я буду озадачен.
Леон
Это очень хороший вопрос. Моим единственным замечанием было бы просто придерживаться количества байтов для оценки в будущем. Проще проверить это на разных системах.
Линус
@Linus Я признаю, что нестандартный выбор партитуры был ошибкой. Не буду повторять это в будущем.
Леон
2
Просто примечание: предоставленная команда sed подсчитывает символы новой строки, которые являются пробельными символами
edc65

Ответы:

10

Оценка 116

Prepend:

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

Обратная косая черта препроцессора \тянет неприятную :содержащую строку в неиспользуемый макрос. Попробуй это здесь .

Спасибо ответу edc65 за примечание о неявном int в C ++ 4.
Благодаря ответ PieCot в предложившего <cstdio>более <stdio.h>.
Спасибо Леону за предложение удалить Xв оригинале #define X\.

Линус
источник
У меня нет sed, если бы кто-то мог проверить мой счет, я был бы очень признателен.
Линус
Удаляя все пробелы, мой счет (вручную) равен 110 (но я ошибся ... это 111)
edc65
2
@Linus Зачем вам X в `#define X \`?
Леон
@ Леон хороший улов!
Линус
2
Для всех, кто интересуется, что такое C ++ 4: в данном случае это сокращение от «C ++, который принимает gcc 4.3.2» .
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 и put все еще живы и работают в C ++. Отсутствующий тип int действителен в C ++ 4. Test

edc65
источник
Оценка должна быть рассчитана по всей программе (включая код Python).
Леон
Поскольку троичное условное выражение может иметь пустую вторую часть, вы можете удалить в конце 0строку 2. Тест.
Конор О'Брайен
Хорошо, я не понимаю почему, так как код Python будет одинаковым для каждого ответа, но вы - босс. Я сделал подсчет вручную, не имея 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 - он пропускает символ новой строки. Добавил это уточнение к вопросу.
Леон
@ Леон Теперь это исправлено.
Конор О'Брайен
#importнедействителен C ++
Леон
1
Умная обработка:
edc65
2
@Leon Правила нашего сайта гласят, что если он работает в одной среде, то это правильное представление.
Конор О'Брайен
5

Оценка 136

Только для записей:

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

Еще один (менее эффективный) способ обработки толстой кишки.

PieCot
источник
1
Но cstdioстоит отметить.
edc65
Я думаю, что счет для этого будет 136. Вы не считаете пробелы.
Линус
@Linus: Спасибо! Я думаю, вы правы. Если я использую эту команду: tr -d '[:space:] ' < bilingual.py.cpp | wc -c я получаю 128, а эта: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c предоставляет 136
PieCot