Celem wyzwania z kamienia rozetowego jest pisanie rozwiązań w jak największej liczbie języków. Pochwal się swoją wielojęzycznością programistyczną!
W tym wyzwaniu utworzysz program, który będzie generował wiadomości spamowe, podając wejściowy tekst źródłowy. Na przykład biorąc pod uwagę dane wejściowe
[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.
Możliwym wyjściem może być
Thank you, this writing delivers excellent data. You may find similar content at spammysite.com.
(pomysł https://security.stackexchange.com/q/37436/29804 )
Ale jest pewien haczyk! Będziesz także musiał wydrukować program w innym języku. Po uruchomieniu ten program wyśle również tekst spamu i program w innym języku, który również wyśle tekst spamu i program w innym języku ...
Twój wynik będzie character count / (number of languages ^ 2)
.
Na przykład mógłbym mieć program Ruby. Przyjmie wejściowy tekst źródłowy jako dane wejściowe i wyśle losowy tekst spamu oraz program w języku Python.
Uruchamiając ten program Python (bez danych wejściowych), generowałby kolejny losowy tekst spamu i program Perla.
Uruchamiając ten program Perla (bez danych wejściowych), wyświetlałby kolejny losowy tekst spamu.
W tym przykładzie moją oceną będzie długość oryginalnego programu Ruby podzielona przez 9 (mam 3 języki, a 3 ^ 2 to 9).
Inne różne rzeczy:
- Musisz użyć co najmniej 2 różnych języków programowania.
- Proszę wymienić każdy program, który jest wyprowadzany. W ten sposób, jeśli ktoś nie ma wszystkich języków, nadal może zobaczyć swoje źródła. Możesz użyć tego krótkiego przykładowego tekstu:
[Please/Kindly] [visit/see] my [site/blog].
lub możesz po prostu użyć symbolu zastępczego (jak{insert text here}
). - Możesz założyć, że nie będzie żadnych znaków innych niż alfanumeryczne, z wyjątkiem
[]/.,
uproszczenia niektórych rzeczy. - Różne wersje języków nie są liczone jako różne języki (np. Python 2 == Python 3).
- Musi być w pełni losowy, tj. Nieprzewidywalny i generować inną kombinację przy każdym uruchomieniu. Musi także być w stanie wygenerować każdą kombinację w dowolnej liczbie przebiegów.
- Ponieważ jest to zarówno golf golfowy, jak i kamień z rozetą, wygra najkrótszy ogólny wynik (
charcount / (langs ^ 2)
).
źródło
Odpowiedzi:
PHP 5.5 -> Ruby 2.0 -> Python 2.7 -> Lua -> C # -> Java -> PdfTeX -> GolfScript 855/8 ^ 2 = 13.359375
Głównymi pomysłami były:
Więc kod początkowy to:
Gdzie
BINARY_DATA
jest skompresowana gz wersja generatora szablonów (np. Wynik kodu php, który jest wersją ruby)Pełny kod początkowy w base64 (powinien wynosić 855 bajtów po dekodowaniu):
Przejdźmy przez wszystkie języki z wejściowym ciągiem testowym
[Thank you/Wow/Great], this is [awesome/wonderful].
PHP
Rubin
Pyton
Lua
DO#
Jawa
PdfTeX
(kod będzie w a.pdf zamiast standardowego. Mam nadzieję, że nadal jest w porządku)
Wynik:
W tekście:
Golfscript
Notatki
Wydaje się, że PHP dość wybacza dane binarne w literałach łańcuchowych, z wyjątkiem kodów szesnastkowych AF i 96. Nie pytaj dlaczego.
Prawdopodobnie mógłbym również łatwo dodać kod perla i C ++ 11 (ponieważ oba obsługują dosłowne ciągi znaków), ale liczba 8 jest bardziej okrągła niż 10 :)
Rozkład wartości nie jest jednolity, ponieważ pierwszy element pojawia się częściej niż później. Według komentarzy powinno to być w porządku.
Kod początkowy został wygenerowany przy użyciu następującego kodu PHP 5.5.
orig.rb
jest w rzeczywistości taki sam jak kod Ruby bez stopki (__END__
i później dołączone dane)generator.php
:(możesz potencjalnie użyć tego kodu, aby zLib skompresował rozwiązania PHP na inne wyzwania)
źródło
print()
połączenie, po prostu umieszczając kolejną[==[
Ruby 1.9 -> Perl 5 -> Python 2, 227/9 = 25,22222 ...
Dane wyjściowe dla
[Please/Kindly] [visit/see] my [site/blog].
:Program Perl (mój pierwszy w historii! :-P) generuje:
Program Python generuje:
źródło