Дворазова квітка: quine! DlroW, olleH


13

Напишіть програму, яка видаватиме власний вихідний код під час запуску, і нічого іншого. Здається, легко, правда?

Суть полягає в тому, що, коли вихідний код відмінено, ваша програма повинна вивести "Привіт, світ!" точно, без лапок.

Це код-гольф, тому виграє найменший байт.

Редагувати : Ваша квітка повинна бути належною.



4
@ Meego чесно, це не такий узагальнений quine, про який я говорю, оскільки це не "функція друку X вашого вихідного коду". Це сказало, що, ймовірно, не буде грати зовсім інакше, ніж інші "коли ви перевернете програму ...", що у нас є.
Мартін Ендер

1
@ MartinBüttner Це досить схоже на ті виклики, які ви описали, і я вважаю, що стосуються тих же міркувань.
Мего

Відповіді:


8

Y, 19 байт

Upxp"!dlroW ,olleH"

Uзахоплює рядок з Uна початку, поки не Uбуде виконано наступне , у цьому випадку вихідний код. pдрукує елемент і xє посиланням на припинення. У зворотному напрямку це виглядає так:

"Hello, World!"pxpU

Це захоплює рядок і друкує його p, знову закінчуючи програму x.

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


4
Uштовхає Uнеявно? ಠ_ಠ
Sp3000

1
@ Sp3000 Це зроблено так, що програма може змінювати себе. Більш технічно, Uкоманда - це "команда захоплення ланцюга ланцюга". Він не створений для айвінгу, але це не завадить мені використовувати його для віддання. : P
Conor O'Brien

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

@Dennis визначити коди? Я думав, pбіт зробив вихід, який був частиною кодування.
Conor O'Brien

1
Я взяв закодувати як то , що генерує вихідний сигнал, так pі xне злічити. Наприклад, найкоротша квітка SMBF як і раніше вважається обманом, хоча код повинен її надрукувати. Можливо, варто попросити у Мартина роз'яснень.
Денніс

20

JavaScript (ES6), 42 38 байт

f=_=>/\//g&&"f="+f||"!dlroW ,olleH">=_

Зворотний

_=>"Hello, World!"||f+"=f"&&g//\/>=_=f

Пояснення

При зворотному перетворенні він стає анонімною функцією, яка повертає рядок Hello, World!.

Зворотний вираз /\//gстає коментарем, коли він перевертається, що дозволяє >=_=fкоментувати синтаксично недійсні коди в зворотному коді.


Це дуже розумно. :) Я б не думав про це.
ericw31415

3
+1 тільки для бігає-очі: =_=.
Даррел Гофман

6

JavaScript (ES6), 71 байт

trela=a=>alert("trela="+trela+"\ntrela\n``")//
`!dlroW ,olleH`
trela
``

Як це працює:

Рядок 1 визначає функцію, trelaяка під час запуску видає вихідний код програми. Рядок 2 - це непризначений рядок, нічого не робить. Рядки 3 та 4 викликають trelaзловживання синтаксисом рядкового шаблону.

Відмінено:

``
alert
`Hello, World!`
//)"``n\alertn\"+alert+"=alert"(trela>=a=alert

Як це працює:

Рядок 1 - це непризначений рядок, нічого не робить. Рядки 2 і 3 зловживають синтаксисом рядкового шаблону для друку Hello, World!. Рядок 4 - це коментар.


Я бачу, що JavaScript, здається, має деякий рівень свободи зі своїм синтаксисом. Ну, принаймні більше, ніж робить Python. Це мило.
Р. Кап

Чи порожнє ``непотрібне?
Rɪᴋᴇʀ

@EasterlyIrk Ні, потрібно викликати trelaфункцію (яка друкує quine) у форвардній версії
jrich

@jrich о, я не розумів, що це ``були аргументи. Класно.
Rɪᴋᴇʀ

2
Я відчуваю, що мені слід звикати бачити trelaтут ...> _>
Conor O'Brien



2

ПОВЕРНЕННЯ , 94 байти

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'

Відмінено:

'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"'!'d'l'r'o'w' ','o'l'l'e'H' %,,,,,,,,,,,,,¤¤43"

Try it here.

Виводи в STDOUT. Поки я не знайду кращої рамки quine, це доведеться робити зараз.

Пояснення

"34¤¤,,,,,,,,,,,,,% 'H'e'l'l'o',' 'w'o'r'l'd'!'"

Це містить рядок quine. У зворотному порядку це висувається до стека, але не виводиться.

34¤¤,,,,,,,,,,,,,

Це підштовхує графік цитат до стеку і видає результат двічі, поки не залишиться нічого для виведення. У зворотному порядку це надрукує шаркоди, які вже є на стеку.

% 'H'e'l'l'o',' 'w'o'r'l'd'!'

Цей спливає верхній елемент стека (у зворотному варіанті, це з'явиться пробіл) та виштовхує ряд стек-кодів до стеку (навпаки, ці штрих-коди пізніше будуть надруковані серією ,s).


Я не можу сказати, чи справді це божевільний код ПОВЕРНЕННЯ, або просто звичайний код RETURN ._.
Пуховик

Обидва; _; Я плачу Everytiem
Mama Fun Roll

2

Fission 2, 42 байти

Безсоромна адаптація відмінної лайки @ MartinBüttner у цій відповіді

'!+O!'!d'!l'!r'!o'!W'! '!,'!o'!!l'!e'!H'R"

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

І перевернуто

"R'H!'e!'l!!'o!',!' !'W!'o!'r!'l!'d!'!O+!'

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

У версії quine атом починається з Rправого заголовка. Режим "запуску друку, який переходить на наступний "(сам). Це виводить все, крім ". '!+встановити атом на char ". Oроздруковує його і знищує атом, що закінчує програму.

Зворотна версія починається Rзнову і для кожного символу в Hello, Worldнаборі атома і роздруковується !, не руйнуючи атом. Для остаточного символу !принт Oзнищує атом.


1

Javascript ES6, 55 байт

$=_=>`$=${$};$()//"!dlroW ,olleH"`;$()//"!dlroW ,olleH"

Досить просто, справді.


0

Python 2, 131 байт

Вперед:

print(lambda x:x+repr(x)+")#'!dlroW ,olleH' tnirp")('print(lambda x:x+repr(x)+")#\'!dlroW ,olleH\' tnirp")(')#'!dlroW ,olleH' tnirp

Реверс:

print 'Hello, World!'#)'()"print '\Hello, World!'\#)"+)x(rper+x:x adbmal(tnirp'()"print 'Hello, World!'#)"+)x(rper+x:x adbmal(tnirp

Перша половина - це однорядний ланцюжок, після чого #формується коментар, що відокремлює першу половину від простішої другої половини.


Адаптація цієї_='_=%r;print _%%_#"!dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
квітки

0

C, 108 байт

char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}//};)"!dlroW ,olleH"(stup{)(niam

С99 я припускаю?
Ніл

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