Le défi d'un rosetta stone est d'écrire des solutions dans autant de langues que possible. Montrez votre multilinguisme de programmation!
Dans ce défi, vous allez créer un programme qui générera des messages de spam, étant donné un texte de départ. Par exemple, étant donné l'entrée
[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.
Une sortie possible pourrait être
Thank you, this writing delivers excellent data. You may find similar content at spammysite.com.
(idée de https://security.stackexchange.com/q/37436/29804 )
Mais il y a un hic! Vous devrez également produire un programme dans une autre langue. Ce programme, une fois exécuté, produira également le texte de spam et un programme dans une langue différente, qui produira également le texte de spam et un programme dans une langue différente ...
Votre score sera character count / (number of languages ^ 2)
.
Par exemple, je pourrais avoir un programme Ruby. Il prendrait le texte de départ en entrée et produirait le texte de spam aléatoire et un programme Python.
En exécutant ce programme Python (sans entrée), il produirait un autre texte de spam aléatoire et un programme Perl.
En exécutant ce programme Perl (aucune entrée), il produirait un autre texte de spam aléatoire.
Dans cet exemple, mon score serait la longueur du programme Ruby original divisée par 9 (j'ai 3 langues et 3 ^ 2 est 9).
Autres choses diverses:
- Vous devez utiliser au moins 2 langages de programmation différents.
- Veuillez lister chaque programme qui est sorti. De cette façon, si quelqu'un n'a pas toutes les langues, il peut toujours voir ses sources. Vous pouvez utiliser ce court exemple de texte:,
[Please/Kindly] [visit/see] my [site/blog].
ou vous pouvez simplement utiliser un espace réservé (comme{insert text here}
). - Vous pouvez supposer qu'il n'y aura pas de caractères non alphanumériques
[]/.,
, sauf pour simplifier certaines choses. - Différentes versions de langues ne comptent pas comme des langues différentes (ex. Python 2 == Python 3).
- Il doit être entièrement aléatoire, c'est-à-dire non prévisible et produire une combinaison différente à chaque exécution. Il doit également être capable de générer toutes les combinaisons dans un nombre arbitraire d'exécutions.
- Puisqu'il s'agit de golf de code et de pierre de rosette , le score global le plus court (
charcount / (langs ^ 2)
) l'emportera.
la source
Réponses:
PHP 5.5 -> Ruby 2.0 -> Python 2.7 -> Lua -> C # -> Java -> PdfTeX -> GolfScript 855/8 ^ 2 = 13.359375
Les idées principales étaient:
Le code initial est donc:
Où
BINARY_DATA
est la version gzcompressed du générateur de modèle (par exemple le résultat du code php, qui est la version ruby)Le code initial complet en base64 (devrait être de 855 octets après décodage):
Passons en revue toutes les langues avec la chaîne d'entrée de test
[Thank you/Wow/Great], this is [awesome/wonderful].
PHP
Rubis
Python
Lua
C #
Java
PdfTeX
(le code sera dans un fichier .pdf au lieu de la sortie standard. J'espère que cela est toujours correct)
Résultat:
Dans le texte:
Golfscript
Remarques
Il semble que PHP soit assez indulgent avec les données binaires dans les littéraux de chaîne, à l'exception des codes hexadécimaux AF et 96. Ne demandez pas pourquoi.
J'aurais probablement pu ajouter aussi facilement du code perl et C ++ 11 (car ils prennent tous les deux en charge les littéraux de chaîne bruts), mais 8 est un nombre plus rond que 10 :)
La distribution des valeurs n'est pas uniforme, car le premier élément vient plus souvent que les suivants. Selon les commentaires, cela devrait être correct.
Le code initial a été généré en utilisant le code PHP 5.5 suivant.
orig.rb
est en fait le même que le code Ruby sans le pied de page (__END__
et les données ajoutées par la suite)generator.php
:(vous pouvez potentiellement utiliser ce code pour zLib inclure des solutions PHP pour d'autres défis)
la source
print()
appel parasite en plaçant simplement une autre nouvelle ligne après[==[
Ruby 1.9 -> Perl 5 -> Python 2, 227/9 = 25.22222 ...
Sortie pour
[Please/Kindly] [visit/see] my [site/blog].
:Le programme Perl (mon tout premier! :-P) génère:
Le programme Python génère:
la source