Поліглот quine назад і вперед!


9

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

Наприклад, якщо ваш вихідний код abcxyz, він повинен виводитись abcxyzоднією мовою та zyxcbaіншою. Якщо ваш код abcxyzyxbca, він недійсний, тому що це паліндром.

Удачі!


3
Нормальні правила існують не просто так. Дозволення вбудованих Quine, ймовірно, зробить цей виклик занадто широким, а дозволення паліндром-вихідних кодів дозволяє відповіді, які є прямими лайками для обох мов.
Ерік Аутгольфер

@EriktheOutgolfer паліндром зараз не дозволений.
програміст5000

1
@EriktheOutgolfer Ага, вихідний код не може бути паліндром?
Луїс Мендо

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

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

Відповіді:



6

Python 2 / Python 3, 71 байт

lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]

Не використовує жодних вбудованих квінтів.

Дякую овам за загальне пробудження мене.


lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]за 71 байт
ов

@ovs О звичайно, як я про це не думав.
Ерік Аутгольфер

6

Batch / bash + tac, 39 байт

:;tac -r -s '.\|'$'\n' $0;exit
@type %0

Вихідні форварди в Партії. Пояснення: Пакет бачить перший рядок як мітку і ігнорує його, тоді як другий рядок просто копіює вихідний файл у STDOUT. (Зверніть увагу , що вам потрібно для виклику файлу , включаючи розширення, або зміна %0до %~f0.) bashБачить чотири команди:

  • :нічого не робить (те саме, що true)
  • tac -r -s '.\|'$'\n' $0
    • -rпереводиться tacв режим регулярного вираження
    • -s задає регулярний вираз
    • '.\|'$'\n' являє собою регулярний вираз, що складається з
      • . будь-який символ, окрім нового рядка
      • \| або
      • $'\n' новий рядок
    • Підсумок полягає в тому, що tacрозбиває файл на символи, а не на рядки.
  • exit зупиняє сценарій, ігноруючи четверту команду
  • @type %0 (ігнорується)

Я думаю, що ви можете замінити перший рядок на :;rev $0|tac;exit. Крім того, у заголовку замість цього слід сказати Batch / sh + util-linux + coreutils .
Erik the Outgolfer

@EriktheOutgolfer $'\n'- це башизм, rev $0|tacне обертає нові рядки правильно, і чи дійсно це важливо, що tacпоставляється в пакеті?
Ніл

$'\n'не існує в запропонованій rev $0|tacнами заміні, і працює для мене. І я думаю, що краще вказати пакунки замість окремих утиліт, бо іноді може виникнути плутанина (наприклад, який пакет tac?).
Ерік Аутгольфер

@EriktheOutgolfer Спробуйте в Інтернеті! неправильно. Так само спробуйте в Інтернеті! (але більш тонко).
Ніл

Скажіть, будь ласка, пояснення?
програміст5000

3

PHP і сітківка, 2 байти

1

Те саме, що відповідь PHIL & GolfScript від Gille.

PHP просто зчитує код і виводить його безпосередньо, Retina замінить відповідність порожнього рядка на вході і замінить його на 1, а виводить його на новий рядок.


2

JS (ES5), JS (ES6), 94 байти

function f(){try{eval("x=(f+'f()').split``.reverse().join``")}catch(e){x=f+"f()"};return x}f()

Не використовує жодних вбудованих quine. Просто використовує той факт, що функції JS поширюються на свій код. Напевно, можна більше пограти в гольф.


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