Назад и вперед, полиглот квин!


9

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

Например, если ваш исходный код есть abcxyz, он должен выводиться abcxyzна одном языке и zyxcbaна другом. Если ваш код abcxyzyxbca, он недействителен, потому что это палиндром.

Удачи!


3
Нормальные правила существуют по причине. Разрешение встроенных функций quine, вероятно, сделает эту задачу слишком широкой, а разрешение исходных кодов палиндрома позволяет получить ответы, которые являются прямыми запросами для обоих языков.
Эрик Outgolfer

@EriktheOutgolfer палиндромы теперь не разрешены.
programmer5000

1
@EriktheOutgolfer А, так что, исходный код не может быть палиндромом?
Луис Мендо

2
Я думаю, вы должны предложить вознаграждение первому человеку, который выполнит эту задачу, не нарушая ни одного из нормальных правил Куайна. (может быть 50 повторений?)
clismique

1
Я прочитал «на одном языке» как явно запрещающий случай, когда оба языка читают исходный код, но текущий ответ с наибольшим количеством голосов делает именно это. Можете ли вы отредактировать, чтобы было ясно, разрешено ли это?
17

Ответы:



6

Python 2 / Python 3, 71 байт

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

Не использует встроенные функции quine.

Спасибо овам за то, что они вообще меня разбудили.


lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]для 71 байт
OVS

@ovs О, конечно, как я не думал об этом.
Эрик Outgolfer

6

Пакет / 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 .
Эрик Outgolfer

@EriktheOutgolfer $'\n'- это Bashism, неправильно корректирует rev $0|tacпереводы строки, и действительно ли имеет значение, что tacвходит в пакет?
Нил

$'\n'не существует в предложенной мной замене и rev $0|tacработает на меня. И я думаю, что лучше указывать пакеты, а не отдельные утилиты, потому что иногда может возникнуть путаница (например, какой пакет tac?).
Эрик Outgolfer

@EriktheOutgolfer Попробуйте онлайн! неправильно. Так что попробуйте онлайн! (но более тонко).
Нил

Не могли бы вы дать объяснение?
programmer5000

3

PHP & Retina, 2 байта

1

Так же, как ответ Джилла на PHP и GolfScript.

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 преобразуются в их код. Вероятно, можно играть в гольф больше.


1

Если вы разрешаете читать исходный код, это на самом деле не квин.

PHP & sh + util-linux, 6 байт

rev $0

Я уверен, что обычные языки игры в гольф могут сделать это в 2 байта.


Они могут заразить.
ATaco
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.