Das Ziel einer Rosetta-Stone- Herausforderung ist es, Lösungen in möglichst vielen Sprachen zu schreiben. Zeigen Sie Ihre Programmier-Mehrsprachigkeit!
In dieser Herausforderung erstellen Sie ein Programm, das Spam-Nachrichten mit einem eingegebenen Starttext generiert. Zum Beispiel angesichts der Eingabe
[Thank you/Wow/Great], this [blog/post/writing] [gives/provides/delivers] [great/excellent/wonderful/superior] [content/information/data]. You [may/could] [find/get/retrieve] [similar/related] [content/information/data] at spammysite.com.
Eine mögliche Ausgabe könnte sein
Thank you, this writing delivers excellent data. You may find similar content at spammysite.com.
(Idee von /security//q/37436/29804 )
Es gibt jedoch einen Haken! Sie müssen auch ein Programm in einer anderen Sprache ausgeben . Wenn dieses Programm ausgeführt wird, gibt es auch den Spam-Text und ein Programm in einer anderen Sprache aus, wodurch auch der Spam-Text und ein Programm in einer anderen Sprache ausgegeben werden ...
Ihre Punktzahl wird sein character count / (number of languages ^ 2)
.
Zum Beispiel könnte ich ein Ruby-Programm haben. Es würde den eingegebenen Starttext als Eingabe nehmen und den zufälligen Spam-Text und ein Python-Programm ausgeben.
Wenn Sie dieses Python-Programm ausführen (ohne Eingabe), werden ein weiterer zufälliger Spam-Text und ein Perl-Programm ausgegeben.
Wenn Sie dieses Perl-Programm ausführen (keine Eingabe), wird ein weiterer zufälliger Spam-Text ausgegeben.
In diesem Beispiel wäre meine Punktzahl die Länge des ursprünglichen Ruby-Programms geteilt durch 9 (ich habe 3 Sprachen und 3 ^ 2 ist 9).
Andere verschiedene Dinge:
- Sie müssen mindestens 2 verschiedene Programmiersprachen verwenden.
- Bitte listen Sie jedes ausgegebene Programm auf. Auf diese Weise kann jemand, der nicht alle Sprachen hat, trotzdem seine Quellen sehen. Sie können diesen kurzen Beispieltext verwenden:
[Please/Kindly] [visit/see] my [site/blog].
oder Sie können einfach einen Platzhalter (wie{insert text here}
) verwenden. - Sie können davon ausgehen, dass es keine nicht alphanumerischen Zeichen gibt, außer
[]/.,
um einige Dinge zu vereinfachen. - Unterschiedliche Sprachversionen zählen nicht als unterschiedliche Sprachen (z. B. Python 2 == Python 3).
- Es muss vollständig zufällig sein, dh nicht vorhersehbar und bei jedem Lauf eine andere Kombination ausgeben. Es muss auch in der Lage sein, jede Kombination in einer beliebigen Anzahl von Läufen auszugeben.
- Da dies sowohl Code-Golf als auch Rosetta-Stone ist , gewinnt die kürzeste Gesamtpunktzahl (
charcount / (langs ^ 2)
).
quelle
Antworten:
PHP 5.5 -> Ruby 2.0 -> Python 2.7 -> Lua -> C # -> Java -> PdfTeX -> GolfScript 855/8 ^ 2 = 13.359375
Die Hauptideen waren:
Der ursprüngliche Code lautet also:
Wo
BINARY_DATA
ist die gzcompressed-Version des Vorlagengenerators (z. B. das Ergebnis des PHP-Codes, bei dem es sich um die Ruby-Version handelt)?Der vollständige Anfangscode in base64 (sollte nach dem Decodieren 855 Byte betragen):
Lassen Sie uns alle Sprachen mit der Testeingabezeichenfolge durchgehen
[Thank you/Wow/Great], this is [awesome/wonderful].
PHP
Rubin
Python
Lua
C #
Java
PdfTeX
(Der Code befindet sich in a.pdf anstelle des stdout. Ich hoffe, das ist noch in Ordnung.)
Ergebnis:
Im Text:
Golfscript
Anmerkungen
Es scheint, dass PHP mit Binärdaten in String-Literalen ziemlich verzeiht, mit Ausnahme der Hex-Codes AF und 96. Fragen Sie nicht warum.
Ich hätte wahrscheinlich auch leicht Perl- und C ++ 11-Code hinzufügen können (da beide rohe String-Literale unterstützen), aber 8 ist eine rundere Zahl als 10 :)
Die Verteilung der Werte ist nicht einheitlich, da das erste Element häufiger vorkommt als spätere. Laut Kommentaren sollte dies in Ordnung sein.
Der ursprüngliche Code wurde tatsächlich mit dem folgenden PHP 5.5-Code generiert.
orig.rb
ist eigentlich das gleiche wie der Ruby-Code ohne Fußzeile (__END__
und die angehängten Daten danach)generator.php
::(Sie können diesen Code möglicherweise verwenden, um PHP-Lösungen für andere Herausforderungen in zLib zu komprimieren.)
quelle
print()
Anruf ersetzen , indem Sie einfach eine weitere Zeile nach[==[
Ruby 1.9 -> Perl 5 -> Python 2, 227/9 = 25.22222 ...
Ausgabe für
[Please/Kindly] [visit/see] my [site/blog].
:Das Perl-Programm (mein erstes !:-P) gibt aus:
Das Python-Programm gibt Folgendes aus:
quelle