Циклічний поліглот Challenge (Cops)


11

Циклічний виклик поліглоту

Це нитка копів. Ви можете знайти нитку розбійників тут .

Циклічний поліглот

Циклічний поліглот з N-елементами - це повна програма, яку можна запустити на N різних мовах. У кожній мові, коли програма запускається без введення даних (можливо, з урахуванням цього винятку ), вона повинна надрукувати назву мови в STDOUT. Зокрема, якщо програма запущена на K-мові, вона повинна надрукувати назву (K + 1) -ї мови. Якщо програма запускається на N-й мові (тобто кінцевій мові в циклі N-елементів), вона повинна надрукувати назву першої мови.

Приклад може бути корисним.

a = [[ v = 7, puts('Befunge') ]]
__END__
= print("Ruby")
-->*+:292*++,,@
--3    9
--7    *
--^,:-5<

Запуск цієї програми з Lua друкує рядок "Ruby". Запуск цієї програми в Ruby друкує рядок "Befunge". Запуск цієї програми в Befunge друкує рядок "Lua", завершуючи цикл. Ця програма складається з 3-х циклу, що складається з Lua, Ruby та Befunge.

Одна і та ж мова не може з’являтися двічі в циклі, і різні версії однієї мови (наприклад, Python 2 і Python 3) не можуть відображатися в одному циклі один з одним.

Копи

Ваше завдання полягає в тому, щоб написати N-циклічний поліглот, де N принаймні 2. Тоді ви повинні додати, замінити та видалити деяку кількість символів до програми, щоб створити M-циклічний поліглот, де M суворо перевищує N Потім слід розмістити коротший N-циклічний поліглот (та мови, якими він працює), а також кількість символів, які ви змінили, щоб отримати довший поліглот. Ваш бал - N, кількість мов у вашому коротшому циклі.

Грабіжники спробують визначити ваш довший цикл. Якщо через сім днів ніхто не успішно зламав ваше рішення, ви повинні відредагувати свою відповідь, заявивши, що це безпечно. У цей час ви також повинні розмістити свій довший M-циклічний поліглот.

Розбійники

З огляду на N-циклічний поліглот поліцейського та кількість символів, які вони додали для створення більшого циклу поліглотів, ваша мета - створити цей більший цикл. Якщо ви можете створити більш тривалий цикл, додавши, видаливши або замінивши стільки символів, скільки зробив поліцейський або менше символів , ви зламали поліглот поліцейського. Ваш бал - це тривалість нового створеного вами циклу. Ваш новий поліглот не повинен бути таким же або навіть подібним до таємного поліглоту поліцейського; він повинен бути лише більшим за існуючий.

Ваше рішення також може зламатися. Якщо інший грабіжник приходить і виробляє цикл строго довше, ніж ваш, починаючи з поліглоту того ж поліцейського, вони вкрали ваші очки.

Дійсні мови програмування

Оскільки цей виклик опосередковано передбачає відгадування мов програмування, які використовуються іншими учасниками, визначення мови програмування для цілей цієї задачі буде трохи більш суворим, ніж звичайне визначення. Мова програмування, що використовується в цьому виклику, повинен відповідати всім наступним умовам.

Заключні ноти

  • Код, який ви пишете, повинен бути окремою програмою на будь-якій мові, на якій він призначений для запуску. Функції або фрагменти коду заборонені.
  • Вашій програмі не буде надано жодного вводу через STDIN. Так само ваша програма нічого не повинна друкувати на STDERR.
  • Оцінка поліцейського - це кількість мов у циклі поліглоту, який вони опублікували. Поліцейський повинен розміщувати мови, в яких правильно розміщений розміщений поліглот, а також кількість символів, які вони додали для отримання більш тривалого поліглота. Вони не несуть відповідальності за розміщення мов довше, ніж працює прихований поліглот, поки їх відповідь не буде безпечною.
  • Оцінка грабіжника - це кількість мов, на яких працює модифікований поліглот. Як і у поліцейського, грабіжник повинен розмістити список мов, на яких поліглот працює правильно.
  • Кількість змінених символів слід обчислити на відстані Левенштейна.

3
"Мова повинна мати доступний перекладач або компілятор. Вибачте, шанувальники Mathematica, але грабіжникам потрібно мати можливість перевірити ваше рішення." Що не так з Відкритою хмарою Wolfram? sandbox.open.wolframcloud.com
Скотт Мілнер

Я не знав про таке, оскільки в мене на комп’ютері є локальна копія Mathematica. Коментар видалено
Сільвіо Майоло

Чи нормально N = 2 і M = 3?
mdahmoune

Так, це добре. Тоді ваша оцінка буде просто 2, але це цілком прийнятно.
Сільвіо Майоло

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.