Çift görevli quine: quine! DlroW, olleH


13

Çalıştırıldığında kendi kaynak kodunu çıkaracak bir program yazın ve başka bir şey yapmayın. Kolay görünüyor, değil mi?

Yakalama, kaynak kodu tersine çevrildiğinde, programınızın "Merhaba, Dünya!" tam olarak, tırnak işaretleri olmadan.

Bu kod golf, bu yüzden en düşük bayt sayısı kazanır.

Düzenleme : Quine uygun bir quine olmalıdır.



4
@Mego adil olmak gerekirse, bu benim bahsettiğim genelleştirilmiş bir tür değil, çünkü bu "kaynak kodunuzun X yazdırma işlevi" değil. Bu, muhtemelen "programı ters çevirdiğinizde ..." karşılaştığımız diğer zorluklardan çok farklı olmayacağını söyledi.
Martin Ender

1
@ MartinBüttner Aynı akıl yürütmenin geçerli olduğunu düşündüğüm zorluklara yeterince benziyor.
Mego

Yanıtlar:


8

Y, 19 bayt

Upxp"!dlroW ,olleH"

UUbaşında bir sonraki dizeye U, bu durumda kaynak koduna kadar olan bir dize yakalar . pöğeyi yazdırır ve xbir sonlandırma bağlantısıdır. Tersine çevrildiğinde, bu şöyle görünür:

"Hello, World!"pxpU

Bu, dizeyi yakalar ve ile birlikte yazdırır p, programı yeniden sonlandırır x.

Burada deneyin!


4
UUdolaylı olarak itiyor ? ಠ_ಠ
SP3000

1
@ Sp3000 Programın kendisini değiştirebilmesi için yapılmıştır. Daha teknik olarak, Ukomut "zincir bağlantı yakalama komutu" dur. Quining için yapılmadı, ancak quining için kullanmamı engellemeyecek. : P
Conor O'Brien

1
Bunun uygun bir soru olarak sayıldığından emin değilim. Bizim tanım gerektiren bir programın farklı bir kısmını kodlar programın bir bölümünü , ama U...sadece kodlamakta U....
Dennis

@Dennis kodları tanımlar? Ben pbiraz kodlama parçası çıktı yaptı düşündüm .
Conor O'Brien

1
Çektiğim kodlamak çıktı üretir şey olarak, yani pve xsaymak olmaz. Örneğin, kodun yazdırması gerekse de, en kısa SMBF sorgusu hala bir hile sorgusu olarak kabul edilir. Yine de Martin'den açıklık istemek gerekebilir.
Dennis

20

JavaScript (ES6), 42 38 bayt

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

ters

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

açıklama

Tersine çevrildiğinde, dizeyi döndüren anonim bir işlev haline gelir Hello, World!.

Normal ifade /\//g, tersine çevrildiğinde bir yorum haline gelir, bu da sözdizimsel olarak geçersiz olanın >=_=fters çevrilmiş kodda yorumlanmasına izin verir .


Bu çok akıllı. :) Bunu düşünmezdim.
ericw31415

3
Sadece kaypak-gözler için 1: =_=.
Darrel Hoffman

6

JavaScript (ES6), 71 bayt

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

Nasıl çalışır:

Satır 1, trelaçalışma sırasında programın kaynak kodunu çıkaran işlevi tanımlar . Satır 2 atanmamış bir dizedir, hiçbir şey yapmaz. 3. ve 4. satırlar trela, şablon dizesi sözdizimini kötüye kullanır.

ters:

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

Nasıl çalışır:

Satır 1 atanmamış bir dizedir, hiçbir şey yapmaz. 2. ve 3. satırlar yazdırılacak şablon dizesi sözdizimini kötüye kullanır Hello, World!. Satır 4 bir yorumdur.


JavaScript'in sözdizimi ile biraz boş olduğu görülüyor. En azından Python'dan daha fazla. Bu iyi.
R. Kap

Boş ``gereksiz mi?
Rɪᴋᴇʀ

@EasterlyIrk Hayır, trelaileri sürümde
quine

@jrich oh, ``bunun argümanlar olduğunu fark etmedim . Güzel.
Rɪᴋᴇʀ

2
trelaBuralarda görmeye
Conor O'Brien



2

DÖNÜŞ , 94 bayt

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

ters:

'!'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 çıkışları. Daha iyi bir quine çerçevesi bulana kadar, bunun şimdilik yapılması gerekecek.

açıklama

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

Bu, quine dizesini içerir. Tersine, bu yığına itilir, ancak çıktı alınmaz.

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

Bu, bir teklif karakterini yığına iter ve çıktı için hiçbir şey kalmayana kadar sonucu iki kez çıktılar. Tersine, bu zaten yığın üzerinde bulunan kodları yazdırır.

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

Bu, üst yığın öğeyi açar (tersine, bu bir boşluk karakterini açar) ve bir dizi charcoki yığına iter (tersine, bu charcodes daha sonra ,'s serisi tarafından yazdırılır ).


Bu gerçekten çılgın RETURN kodu, ya da sadece normal RETURN kodu ._ olup olmadığını söyleyemem.
Downgoat

Her ikisi de ;_; Ağladım everytiem
Mama Fun Roll

2

Bölüm 2, 42 bayt

Bu cevapta @ MartinBüttner tarafından mükemmel bir kinin utanmaz adaptasyonu

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

Çevrimiçi deneyin

Ve tersine döndü

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

Çevrimiçi deneyin

Quine versiyonunda atom Rsağdan başlar . "Başlar sonrakine sarar modunu yazdırmak "(kendisi). Bu, hariç her şeyi yazdırır ". '!+atomu char olarak ayarlayın ". Oyazdırır ve programı bitiren atomu yok eder.

Ters sürüm Rtekrar başlar ve Hello, Worldsetteki her karakter için atomu ve !atomu yok etmeden yazdırır . Son karakter !için baskı Oatomu yok eder.



0

Python 2, 131 bayt

yönlendir:

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

Ters:

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

İlk yarı tek satırlık bir kınadır, ardından #ilk yarıyı daha basit ikinci yarıdan ayıran bir yorum oluşturmak için a gelir.


Bu Python_='_=%r;print _%%_#"!dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
quine

0

C, 108 bayt

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

C99 sanırım?
Neil

0

Python 2,70 bayt

_='_=%r;print _%%_#"dlroW ,olleH"tnirp';print _%_#"!dlroW ,olleH"tnirp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.