Tujuan dari tantangan batu rosetta adalah menulis solusi dalam bahasa sebanyak mungkin. Pamerkan multibahasa Anda dalam pemrograman!
Dalam tantangan ini, Anda akan membuat program yang akan menghasilkan pesan spam, diberi input-teks unggulan. Misalnya diberi input
[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.
Output yang mungkin bisa
Thank you, this writing delivers excellent data. You may find similar content at spammysite.com.
(ide dari https://security.stackexchange.com/q/37436/29804 )
Tapi ada tangkapan! Anda juga harus menampilkan program dalam bahasa yang berbeda . Program ini, ketika dijalankan, juga akan menampilkan teks spam dan program dalam bahasa yang berbeda, yang juga akan menampilkan teks spam dan program dalam bahasa yang berbeda ...
Skor Anda akan character count / (number of languages ^ 2)
.
Sebagai contoh, saya dapat memiliki program Ruby. Ini akan mengambil input seed-text sebagai input, dan menampilkan teks spam acak dan program Python.
Menjalankan program Python ini (tanpa input), itu akan menampilkan teks spam acak lain dan program Perl.
Menjalankan program Perl ini (tanpa input), itu akan menampilkan teks spam acak lainnya.
Dalam contoh ini, skor saya akan menjadi panjang dari program Ruby asli dibagi dengan 9 (Saya memiliki 3 bahasa, dan 3 ^ 2 adalah 9).
Hal lain-lain:
- Anda harus menggunakan setidaknya 2 bahasa pemrograman yang berbeda.
- Harap sebutkan setiap program yang dihasilkan. Dengan cara ini jika seseorang tidak memiliki semua bahasa, mereka masih dapat melihat sumbernya. Anda dapat menggunakan teks contoh singkat ini:,
[Please/Kindly] [visit/see] my [site/blog].
atau Anda dapat menggunakan placeholder (seperti{insert text here}
). - Anda dapat berasumsi bahwa tidak akan ada karakter non-alfanumerik kecuali
[]/.,
, untuk menyederhanakan beberapa hal. - Versi bahasa yang berbeda tidak dihitung sebagai bahasa yang berbeda (mis. Python 2 == Python 3).
- Itu harus sepenuhnya acak, yaitu tidak dapat diprediksi dan menghasilkan kombinasi yang berbeda setiap kali dijalankan. Itu juga harus dapat menampilkan setiap kombinasi dalam jumlah berjalan sewenang-wenang.
- Karena ini adalah kode-golf serta rosetta-stone , skor keseluruhan terpendek (
charcount / (langs ^ 2)
) akan menang.
sumber
Jawaban:
PHP 5.5 -> Ruby 2.0 -> Python 2.7 -> Lua -> C # -> Java -> PdfTeX -> GolfScript 855/8 ^ 2 = 13.359375
Gagasan utama adalah:
Jadi kode awal adalah:
Di mana
BINARY_DATA
versi gzcompressed dari generator template (mis. Hasil dari kode php, yang merupakan versi ruby)Kode awal lengkap dalam base64 (harus 855 byte setelah decoding):
Mari kita melihat semua bahasa dengan string input tes
[Thank you/Wow/Great], this is [awesome/wonderful].
PHP
Rubi
Python
Lua
C #
Jawa
PdfTeX
(kode akan berada di dalam a.pdf bukan stdout. Saya harap ini masih oke)
Hasil:
Dalam tulisan:
Naskah Golf
Catatan
Tampaknya PHP cukup memaafkan dengan data biner dalam string literal, kecuali untuk kode hex AF dan 96. Jangan bertanya mengapa.
Saya mungkin bisa menambahkan perl dan kode C ++ 11 juga dengan mudah (karena keduanya mendukung string string literal), tetapi 8 adalah angka yang lebih bulat dari 10 :)
Distribusi nilai tidak seragam, karena elemen pertama datang lebih sering daripada yang kemudian. Menurut komentar ini tidak apa-apa.
Kode awal sebenarnya dibuat menggunakan kode PHP 5.5 berikut.
orig.rb
sebenarnya sama dengan kode Ruby tanpa catatan kaki (__END__
dan data yang ditambahkan setelahnya)generator.php
:(Anda dapat berpotensi menggunakan kode ini untuk zLib encompress solusi PHP untuk tantangan lain)
sumber
print()
panggilan palsu dengan hanya menempatkan baris baru setelah[==[
Ruby 1.9 -> Perl 5 -> Python 2, 227/9 = 25.22222 ...
Output untuk
[Please/Kindly] [visit/see] my [site/blog].
:Program Perl (my first ever! :-P) menampilkan:
Output program Python:
sumber