El objetivo de un desafío rosetta-stone es escribir soluciones en tantos idiomas como sea posible. ¡Muestra tu programación multilingüismo!
En este desafío, creará un programa que generará mensajes de spam, dado un texto semilla de entrada. Por ejemplo, dada la entrada
[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.
Un posible resultado podría ser
Thank you, this writing delivers excellent data. You may find similar content at spammysite.com.
(idea de https://security.stackexchange.com/q/37436/29804 )
¡Sin embargo, hay una trampa! También tendrá que generar un programa en un idioma diferente . Este programa, cuando se ejecuta, también generará el texto de spam y un programa en un idioma diferente, que también generará el texto de spam y un programa en un idioma diferente ...
Tu puntaje será character count / (number of languages ^ 2)
.
Por ejemplo, podría tener un programa Ruby. Tomaría el texto semilla de entrada como entrada, y generaría el texto aleatorio de spam y un programa Python.
Al ejecutar este programa Python (sin entrada), generaría otro texto de spam aleatorio y un programa Perl.
Al ejecutar este programa Perl (sin entrada), generaría otro texto de spam aleatorio.
En este ejemplo, mi puntaje sería la duración del programa Ruby original dividido entre 9 (tengo 3 idiomas y 3 ^ 2 es 9).
Otras cosas diversas:
- Debe usar al menos 2 lenguajes de programación diferentes.
- Enumere cada programa que se emite. De esta manera, si alguien no tiene todos los idiomas, aún puede ver sus fuentes. Puede usar este breve texto de ejemplo:
[Please/Kindly] [visit/see] my [site/blog].
o puede usar un marcador de posición (como{insert text here}
). - Puede suponer que no habrá caracteres no alfanuméricos
[]/.,
, excepto para simplificar algunas cosas. - Las diferentes versiones de idiomas no cuentan como idiomas diferentes (por ejemplo, Python 2 == Python 3).
- Debe ser completamente aleatorio, es decir, no predecible y generar una combinación diferente en cada ejecución. También debe poder generar cada combinación en una cantidad arbitraria de ejecuciones.
- Como se trata de código de golf y rosetta-stone ,
charcount / (langs ^ 2)
ganará el puntaje general más corto ( ).
fuente
Respuestas:
PHP 5.5 -> Ruby 2.0 -> Python 2.7 -> Lua -> C # -> Java -> PdfTeX -> GolfScript 855/8 ^ 2 = 13.359375
Las ideas principales fueron:
Entonces el código inicial es:
¿Dónde
BINARY_DATA
está la versión gzcompressed del generador de plantillas (por ejemplo, el resultado del código php, que es la versión ruby)El código inicial completo en base64 (debe ser 855 bytes después de la decodificación):
Veamos todos los idiomas con la cadena de entrada de prueba
[Thank you/Wow/Great], this is [awesome/wonderful].
PHP
Rubí
Pitón
Lua
C#
Java
PdfTeX
(el código estará dentro de a.pdf en lugar de stdout. Espero que todavía esté bien)
Resultado:
En el texto:
Golfscript
Notas
Parece que PHP es bastante indulgente con datos binarios en literales de cadena, a excepción de los códigos hexadecimales AF y 96. No pregunte por qué.
Probablemente podría haber agregado el código perl y C ++ 11 también fácilmente (ya que ambos admiten literales de cadena sin formato), pero 8 es un número más redondo que 10 :)
La distribución de valores no es uniforme, ya que el primer elemento se presenta con mayor frecuencia que los posteriores. Según los comentarios, esto debería estar bien.
El código inicial se generó realmente usando el siguiente código PHP 5.5.
orig.rb
en realidad es lo mismo que el código Ruby sin el pie de página (__END__
y los datos adjuntos después)generator.php
:(potencialmente puede usar este código para zLib abarcar soluciones PHP para otros desafíos)
fuente
print()
llamada simplemente colocar otra nueva línea después[==[
Ruby 1.9 -> Perl 5 -> Python 2, 227/9 = 25.22222 ...
Salida para
[Please/Kindly] [visit/see] my [site/blog].
:El programa Perl (¡mi primero! :-P) genera:
Las salidas del programa Python:
fuente