Polyglot quine geri ve ileri!


9

Bir dilde kaynak kodu ve kaynak kodu çıkarır birçok dili yapmak zorundadır geriye başka. Normal kuralların aksine, geçerli dosyayı okumanıza veya gönderiminizin kaynak kodunu almak ve bunu bir dilde tersine çevirmek için bir yerleşik kod kullanmanıza izin verilir. Kaynak kodunuz bir palindrom olamaz.

Örneğin, kaynak kodunuz bir dilde ve başka bir dilde abcxyzçıktı almalıdır . Kodunuz geçersizse palindrom olduğu için geçersizdir.abcxyzzyxcbaabcxyzyxbca

İyi şanslar!


3
Bunun için normal kurallar var. Quine yerleşiklerine izin vermek büyük olasılıkla bu meydan okumayı çok geniş hale getirecek ve palindrome kaynak kodlarına izin vermek her iki dil için ileriye dönük yanıtlara izin verecektir.
Outgolfer Erik

@EriktheOutgolfer palindromlarına artık izin verilmiyor.
programmer5000

1
@EriktheOutgolfer Ah, yani kaynak kodu bir palindrom olamaz?
Luis Mendo

2
Bence ilk kişi için normal yarışma kurallarını ihlal etmeden bu meydan okumayı tamamlaması için bir ödül teklif etmelisin. (belki 50 rep?)
clismique

1
Her iki dilin kaynak kodunu okuduğu durumu açıkça göz ardı ederek "tek bir dilde" okudum, ancak mevcut en çok oy alan cevap tam olarak bunu yapıyor. Buna izin verilip verilmediğini netleştirmek için düzenleyebilir misiniz?
Hvd

Yanıtlar:



6

Python 2 / Python 3, 71 bayt

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

Herhangi bir kınamak yerleşik kullanmaz.

Beni uyandırdığı için teşekkürler.


lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]71 bayt
ovs için

@ovs Oh, elbette, bunu nasıl düşünmedim.
Outgolfer Erik

6

Toplu / bash + tac, 39 bayt

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

Toplu olarak ileriye doğru çıktılar. Açıklama: Toplu iş ilk satırı bir etiket olarak görür ve yok sayar, ikinci satır ise kaynak dosyayı STDOUT'a kopyalar. (Uzantıyı içeren dosyayı çağırmanız veya olarak değiştirmeniz %0gerektiğini unutmayın %~f0.) bashDört komut görür:

  • :(aynı şey yapmaz true)
  • tac -r -s '.\|'$'\n' $0
    • -rkoyar tacregex moduna
    • -s bir normal ifadeyi belirtir
    • '.\|'$'\n' regex, aşağıdakilerden oluşur
      • . satırsonu hariç herhangi bir karakter
      • \| veya
      • $'\n' yeni satır
    • Sonuç tac, dosyayı satırlar yerine karakterlere ayırmasıdır.
  • exit dördüncü komutu yok sayarak komut dosyasını durdurur
  • @type %0 (İhmal)

Bence ilk satırı değiştirebilirsin :;rev $0|tac;exit. Ayrıca, başlık bunun yerine Batch / sh + util-linux + coreutils yazmalıdır .
Erik the Outgolfer

@EriktheOutgolfer $'\n'bir Bashizm, rev $0|tacyeni satırları doğru bir şekilde tersine çevirmiyor ve tacbir paket içinde gelmesi gerçekten önemli mi?
Neil

$'\n'önerdiğim yerde mevcut değil ve rev $0|tacbenim için çalışıyor. Ve ben bireysel araçlar yerine paketleri belirtmek daha iyi olduğunu düşünüyorum, çünkü bazen karışıklık ortaya çıkabilir (örneğin hangi paket tac?).
Outgolfer Erik

@EriktheOutgolfer Çevrimiçi deneyin! Hata. Yani çevrimiçi deneyin! (ama daha ustaca).
Neil

Lütfen bir açıklama yapabilir misiniz?
programmer5000

3

PHP ve Retina, 2 bayt

1

Gille'in PHP ve GolfScript yanıtıyla aynı.

PHP sadece kodu okur ve doğrudan çıktı verir, Retina girişteki boş bir dizenin eşleşmelerini değiştirir ve 1 ile değiştirir ve bunu bir yeni satırla çıkarır.


2

JS (ES5), JS (ES6), 94 bayt

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

Herhangi bir kınama yerleşik kullanmaz. JS işlevlerinin kodlarına dizgi oluşturması gerçeğini kullanır. Muhtemelen daha fazla golf yapılabilir.


1

Kaynak kodun okunmasına izin verirseniz, bu gerçekten bir quine değildir.

PHP ve sh + util-linux, 6 bayt

rev $0

Her zamanki golf dillerinin 2 baytta yapabileceğinden eminim.


Onlar bulaşabilir.
ATaco
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.