Fügen Sie einem Python-Skript Kommentare hinzu und machen Sie es zu einem zweisprachigen Python / C ++ - "Programm".

12

Mit dem folgenden Python 3-Skript:

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

greet()

Stellen Sie dieser Textdatei einige Zeilen voran , damit sie sowohl als Python-Programm ausgeführt als auch als C ++ - Programm kompiliert und ausgeführt werden kann, das die gleiche Ausgabe erzeugt Hello, world! (einschließlich der neuen Zeile am Ende):

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

Die Lösung wird anhand der Anzahl der Nicht-Leerzeichen des gesamten Programms bewertet, einschließlich des Python-Skripts:

sed 's/\s//g' bilingual.py.cpp|wc -c
Leon
quelle
5
In dem Titel, den Sie sagen, fügen Sie Kommentare hinzu, in dem Text, den Sie sagen, müssen Sie jedoch nur einige Zeilen voranstellen. Welches ist es?
Post Rock Garf Hunter
@ WheatWizard Der Titel ist ein Hinweis. Wenn Sie dies lösen können, indem Sie beliebige Zeilen voranstellen (keine Kommentare), bin ich verwirrt.
Leon
Das ist eine sehr schöne Frage. Meine einzige Bemerkung wäre, mich in Zukunft nur noch an die Byteanzahl zu halten, um Punkte zu erzielen. Es ist einfacher, diese auf verschiedenen Systemen zu überprüfen.
Linus
@Linus Ich gebe zu, dass die Auswahl der Partitur auf eine nicht standardmäßige Weise ein Fehler war. Ich werde es in Zukunft nicht wiederholen.
Leon
2
Nur eine Anmerkung: Der bereitgestellte sed-Befehl zählt die Zeilenumbrüche, die Leerzeichen sind
edc65

Antworten:

10

Ergebnis 116

Voranstellen:

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

Der Backslash \des Präprozessors zieht die böse :enthaltende Zeile in ein nicht verwendetes Makro. Probieren Sie es hier aus .

Dank der Antwort von edc65 für den Hinweis zu implizitem int in C ++ 4.
Dank PieCot Antwort für die Annahme , <cstdio>über <stdio.h>.
Danke an Leon für den Vorschlag, das Xim Original zu entfernen #define X\.

Linus
quelle
Ich habe nicht gesessen, wenn jemand meine Punktzahl überprüfen könnte, würde ich es sehr schätzen.
Linus
Wenn ich alle Leerzeichen entferne, zähle ich (von Hand) 110 (aber ich habe mich geirrt ... es ist 111)
edc65
2
@Linus Warum brauchst du das X in `#define X \`?
Leon
@Leon guten Fang!
Linus
2
Für alle, die sich fragen, was C ++ 4 ist: In diesem Fall steht es für "The C ++, das gcc 4.3.2 akzeptiert" .
NWP
11

Ergebnis 119

(Danke @Linus für die Byteanzahl)

(1 Byte gespeichert dank @Conor O'Brien) (1 Byte gespeichert dank @PieCot)

Ich zählte die Bytes noch einmal von Hand und fand 113. Vielleicht ist es diesmal richtig. Nein, ist es nicht

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

Anmerkungen: stdio und puts sind in C ++ noch am Leben und funktionieren einwandfrei. Der fehlende Int-Typ ist in C ++ 4 gültig. Test

edc65
quelle
Die Punktzahl muss mit dem gesamten Programm (einschließlich des Python-Codes) verglichen werden.
Leon
Da die ternäre Bedingung einen leeren zweiten Teil haben kann, können Sie das Trailing 0in Zeile 2 entfernen . Test.
Conor O'Brien
OK, ich verstehe nicht warum, da der Python-Code für jede Antwort gleich ist, aber Sie sind der Boss. Ich habe die Zählung von Hand gemacht, ohne sed, ich hoffe es ist richtig
edc65
@ ConorO'Brien das kann es wirklich! Ich wusste nicht! Thx
edc65
Sie können <cstdio> anstelle von <stdio.h> verwenden
PieCot
7

Ergebnis 131 130 134

Die Zeilen, die vorangestellt werden müssen, sind:

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

Und der resultierende Code:

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

greet()

Testen

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
λ 
Conor O'Brien
quelle
Die Ausgabe der C ++ - Version ist nicht identisch mit der Python-Version - es fehlt ein Zeilenumbruch. Diese Klarstellung wurde der Frage hinzugefügt.
Leon
@Leon Dies ist jetzt behoben.
Conor O'Brien
#importist nicht gültig C ++
Leon
1
:
Cleverer
2
@Leon Unsere Site-Regeln besagen, dass es eine gültige Übermittlung ist, wenn es in einer Umgebung funktioniert.
Conor O'Brien
5

Ergebnis 110 104

Die Antwort von Linus verbessern :

#include <cstdio>
#define print main(){puts
#define greet() ;}//\
def greet():
    print("Hello, world!")

greet()

Test als C ++

Testen Sie als Python

Leon
quelle
Ich habe 109 ...
Linus
1
@Linus Ich habe eine neue Zeile in der letzten Zeile
Leon
5

Ergebnis 136

Nur für die Aufzeichnungen:

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

Eine andere (weniger effiziente) Möglichkeit, mit dem Dickdarm umzugehen.

PieCot
quelle
1
Sollte cstdioaber beachtet werden.
Edc65
Ich denke, die Punktzahl dafür ist 136. Sie zählen die Leerzeichen nicht.
Linus
@Linus: Danke! Ich glaube, Du hast recht. Wenn ich diesen Befehl verwende: tr -d '[:space:] ' < bilingual.py.cpp | wc -c Ich erhalte 128, während dieser Befehl: tr -d '[:blank:] ' < bilingual.py.cpp | wc -c 136
PieCot