Задача « розеттского камня» - написать решение на максимально возможном количестве языков. Покажите свое программирование многоязычия!
В этом задании вы создадите программу, которая будет генерировать спам-сообщения с заданным начальным текстом. Например, учитывая вход
[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.
Возможный результат может быть
Thank you, this writing delivers excellent data. You may find similar content at spammysite.com.
(идея с https://security.stackexchange.com/q/37436/29804 )
Но тут есть одна загвоздка! Вам также нужно будет вывести программу на другом языке. При запуске эта программа также выводит текст спама и программу на другом языке, а также текст спама и программу на другом языке ...
Ваша оценка будет character count / (number of languages ^ 2)
.
Например, у меня может быть программа на Ruby. Он будет принимать входной начальный текст в качестве входного и выводить случайный текст со спамом и программу на Python.
Запустив эту программу на Python (без ввода), он выведет другой случайный текст со спамом и программу на Perl.
Запустив эту Perl-программу (без ввода), она выдаст еще один случайный текст спама.
В этом примере моя оценка будет равна длине исходной программы Ruby, деленной на 9 (у меня 3 языка, а 3 ^ 2 - 9).
Другие разные вещи:
- Вы должны использовать как минимум 2 разных языка программирования.
- Пожалуйста, перечислите каждую программу, которая выводится. Таким образом, если у кого-то нет всех языков, он все равно может видеть свои источники. Вы можете использовать этот короткий пример текста:
[Please/Kindly] [visit/see] my [site/blog].
или вы можете просто использовать заполнитель (например{insert text here}
). - Вы можете предположить, что не будет никаких буквенно-цифровых символов, кроме как
[]/.,
для упрощения некоторых вещей. - Разные версии языков не считаются разными языками (например, Python 2 == Python 3).
- Он должен быть полностью случайным, то есть не предсказуемым и выводить разные комбинации при каждом запуске. Он также должен иметь возможность выводить каждую комбинацию в произвольном количестве прогонов.
- Поскольку это и код-гольф, и розеттский камень ,
charcount / (langs ^ 2)
победит самый короткий общий балл ( ).
источник
Ответы:
PHP 5.5 -> Ruby 2.0 -> Python 2.7 -> Lua -> C # -> Java -> PdfTeX -> GolfScript 855/8 ^ 2 = 13.359375
Основными идеями были:
Итак, исходный код:
Где
BINARY_DATA
находится gz-сжатая версия генератора шаблонов (например, результат кода php, который является версией ruby)Полный исходный код в base64 (должен быть 855 байт после декодирования):
Давайте пройдемся по всем языкам с тестовой строкой ввода
[Thank you/Wow/Great], this is [awesome/wonderful].
PHP
Рубин
питон
Lua
C #
Ява
PdfTeX
(код будет внутри .pdf вместо стандартного вывода. Я надеюсь, что все в порядке)
Результат:
В тексте:
Golfscript
Ноты
Похоже, PHP довольно прост с двоичными данными в строковых литералах, за исключением шестнадцатеричных кодов AF и 96. Не спрашивайте почему.
Я мог бы, вероятно, также легко добавить код на Perl и C ++ 11 (так как они оба поддерживают необработанные строковые литералы), но число 8 является более круглым, чем число 10 :)
Распределение значений не является равномерным, так как первый элемент встречается чаще, чем более поздние. Согласно комментариям это должно быть хорошо.
Исходный код был сгенерирован с использованием следующего кода PHP 5.5.
orig.rb
на самом деле такой же, как код Ruby без нижнего колонтитула (__END__
и добавленные данные впоследствии)generator.php
:(вы можете использовать этот код для zLib для сжатия PHP-решений для других задач)
источник
print()
вызов, просто поместив еще один[==[
Ruby 1.9 -> Perl 5 -> Python 2, 227/9 = 25.22222 ...
Выход для
[Please/Kindly] [visit/see] my [site/blog].
:Программа Perl (моя первая в истории! :-P) выводит:
Программа Python выводит:
источник