Дзеркальна квітка (або болить голова)


32

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

Усі правила та бали від виклику зворотного квитка застосовуються, тому всі відповіді на це запитання відповідатимуть на це (але не набирати балів).

Редагувати:

За запитом, тут усі правила копіюються.

Правила:

  • написати програму p, яка при виконанні видає вихід p 'де p' p назад, а p 'при виконанні виробляє p.
  • Не використовується інших файлів (наприклад reverse.txt)
  • Мінімальна довжина коду - два символи.
  • Ваша програма не може бути паліндром.

Оцінка:

  • +50, якщо ви використовуєте дані з Інтернету.
  • +25, якщо ви читаєте власний вихідний код.
  • +1 бал за персонаж.
  • Виграє найнижчий рахунок.

eval(eval(eval(eval(eval(eval(eval(eval(eval(p)))))))))
Ендрю Ларссон

Я просто кажу, що ви зможете виконати результат виконання результату виконання виводу [...] виконання виводу p (те саме, що і будь-яка квітина, за винятком зворотної лайки).
Ендрю Ларссон

@AndrewLarsson Дійсно, хоча доказ концепції Я будую p буде написано в c і p 'в perl.
hildred

О, це було б круто!
Ендрю Ларссон

1
Так, побачили це занадто пізно. Не дублікат.
Йоганнес Кун

Відповіді:


22

GolfScript, 46 символів

0{`".~#"+.-1%+\.!@@}.~##~.}@@!.\+%1-.+"#~."`{1

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

Гаразд, спробую пояснити, як я його сконструював. По-перше, я почав з лайки {".~"}.~і змінив її, як у цій відповіді, щоб змінити себе. Щоб зробити висновок виконуваним quine сам по собі, я зробив копію коду, перш ніж його скасувати, і включив a #в кінці коду, так що перевернута версія в кінці стала просто коментарем. Таким чином, ми отримуємо паліндромну квінку:

{`".~#"+.-1%}.~##~.}%1-.+"#~."`{

Однак за правилами паліндроми заборонені, тому мені потрібно було якось порушити симетрію. Я думав , що найпростіший спосіб буде включати в себе 0(що само по собі є Куайн в GolfScript) в коді і перевертати його 1з !після створення перевернуте копію. Більшість складнощів, що залишилися, - це просто некрасива маніпуляція зі стеком, щоб все було в потрібному порядку.


Чи це також гольфскрипт, коли його перевернено або це інша мова?
hildred

Так, це GolfScript в обох випадках. Дійсно, за винятком 0і 1на початку, і в кінці, решта коду - паліндром.
Ільмарі Каронен

9
Ого. Гаразд, я більше не відчуваю себе розумним для цього SE :(
Cruncher

21

Perl і C 6478 1955

#!/usr/bin/perl -i//
$_=<<'rahc';eval $_; #//
print scalar reverse "#!/usr/bin/perl -i//\n\$_=<<'rahc';eval \$_; #//\n${_}rahc\n" #//
__END__
__END__ enifed#
};)"{ = ][cn\rahcn\n\"(p
};)'n\'( rahctup) 1 == 21%b ( fi
;)d(p;)]1-b[c,",d%",)d(foezis,d( ftnirpns{)b--;b;)c(foezis=b( rof
;)c(p;]9[d rahc;b tni{)(niam diov
}};)]1-b[c(rahctup )]1-b[c(fi{)b--;b;)c(nelrts=b(rof;b tni{)c*rahc(p diov
>h.gnirts< edulcni#
>h.oidts< edulcni#
;}
,0
,53,33,74,711,511,411,74,89,501,011,74,211
,101,411,801,23,54,501,74,74,01,63,59,16
,06,06,93,411,79,401,99,93,95,101,811,79
,801,23,63,59,95,23,53,74,74,01,211,411
,501,011,611,23,511,99,79,801,79,411,23,411
,101,811,101,411,511,101,23,43,53,33,74,711
,511,411,74,89,501,011,74,211,101,411,801,23
,54,501,74,74,29,011,29,63,59,16,06,06
,93,411,79,401,99,93,95,101,811,79,801,23
,29,63,59,95,23,53,74,74,29,011,63,321
,59,521,411,79,401,99,29,011,43,23,53,74
,74,01,59,59,96,87,86,59,59,01,59,59
,96,87,86,59,59,23,101,011,501,201,101,001
,53,01,521,95,14,43,321,23,16,23,39,19
,99,011,29,411,79,401,99,011,29,011,29,43
,04,211,01,521,95,14,93,011,29,93,04,23
,411,79,401,99,611,711,211,14,23,94,23,16
,16,23,05,94,73,89,23,04,23,201,501,01
,95,14,001,04,211,95,14,39,94,54,89,19
,99,44,43,44,001,73,43,44,14,001,04,201
,111,101,221,501,511,44,001,04,23,201,611,011
,501,411,211,011,511,321,14,89,54,54,95,89
,95,14,99,04,201,111,101,221,501,511,16,89
,04,23,411,111,201,01,95,14,99,04,211,95
,39,75,19,001,23,411,79,401,99,95,89,23
,611,011,501,321,14,04,011,501,79,901,23,001
,501,111,811,01,521,521,95,14,39,94,54,89
,19,99,04,411,79,401,99,611,711,211,23,14
,39,94,54,89,19,99,04,201,501,321,14,89
,54,54,95,89,95,14,99,04,011,101,801,411
,611,511,16,89,04,411,111,201,95,89,23,611
,011,501,321,14,99,24,411,79,401,99,04,211
,23,001,501,111,811,01,26,401,64,301,011,501
,411,611,511,06,23,101,001,711,801,99,011,501
,53,01,26,401,64,111,501,001,611,511,06,23
,101,001,711,801,99,011,501,53,01,95,521,01
{ = ][c
rahc

Редагувати:

Коротке пояснення: з перла два цікавих рядки - другий та третій. Другий рядок має два твердження, перший з яких зчитує решту документа в рядок. Друга зрівняється з рядком. Третій рядок друкує все назад. кожна річ ігнорується. з боку c у вас є масив, який містить програму у вигляді рядка, який друкується як масив і рядок, а решта - коментар.


1
ват. : O У мене вибухнула голова. Але я нараховую 6536 символів у цьому ...
Дверна ручка

Що ... як ... 0_0
Хлопець з капелюхом

@DoorknobofSnow Я порахував неправильну версію. Але ось коротша версія.
hildred

Це неймовірно! Я думаю, що Haskell / C може бути ще однією можливою комбінацією.
theonlygusti

@theonlygusti, якщо ви опублікуєте його, і я зможу його скласти, я його схвалюю.
hildred

8

Рубін 145

DATA.read.tap {| a | ставить a.reverse, a.tr ("\ x79 \ x59", "\ x59 \ x79")}
: у
__END__
__DNE__
Y:
}) "97x \ 95x \", "95x \ 97x \" (rt.a, esrever.a stup | a | {pat.daer.ATAD

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

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

Тестовий: їх можна виконати

$ ruby rq2.rb > rq2t.rb
$ ruby rq2t.rb > rq2tt.rb

Тест два: результат двох запусків поверне початкове джерело

$ diff rq2.rb rq2tt.rb
$

Тест три: код не паліндром (середній пробіг інший)

$ diff rq2.rb rq2t.rb
3c3
< :y
---
> :Y
6c6
< Y:
---
> y:

4

> <>, 21 19 байт

'rd3*70.r l?!;o90.<

Спробуйте тут!

Для зручності використовуйте інтерпретатор *> <>, але це дійсний> <> код.


Якщо помилка дозволена, то це можна зробити в 16 байтах:

'd3*}70.!r  !|o|

Спробуйте тут!


@JoKing дякую! Це було 7 ранку, і я просто занадто втомився, щоб укласти це разом. Я відредагую його через пару годин.
Discordian

4

Gol> <> , 11 байт

":5-}H}+5:'

Цілий байт рубав! це майже паліндром, але технічно це не через "+" і "-", ха-ха!

Спробуйте в Інтернеті!

Два нижче не працюють, або, принаймні, вони не відповідають специфікаціям завдання, але наведений вище код.

трохи молодша версія, 12 байт

"r2ssrH}+5:'

Гольф від байта, просто використовуючи подвійну цитату і збільшуючи її на 5! І ця нова версія менш схожа на паліндром.

Спробуйте в Інтернеті!

старша версія, 13 байт

"r2ssrHrss7r'

З попереднім виникла проблема, на яку вказував JoKing, дякую за це, зараз це працює, але з ціною в 4 зайвих байти ...

Спробуйте в Інтернеті!


1

Допоможіть, WarDoq! (27 байт)

25 байт додано через читання вихідного коду.

<space>q

Як це працює:
<space>- коментар, який закінчується символом, який не знаходиться в пробілі,
q- вихідний код друку повернений (q "пробіл")

Відмінено:

q<space>

Як це працює:
q- друкований вихідний код повернений (q на даний момент)
<space>- коментар, який закінчується символом, який не пробіл, і додає символ до початку команди q (робить "пробіл" q)

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