Dönem 2 Tersine çevrilmiş Quine


10

Göreviniz, kendi kaynak kodunu tersine çeviren bir program yazmaktır. Ancak, tersine kod çalıştırıldığında, kaynak kodu doğru yöne bakacak şekilde çıkarmalıdır.

Misal

Programınızın olduğunu söyleyin abc. Çalıştırıldığında çıktı almalıdır cba. cba, çalıştırıldığında çıktı vermelidir abc.

kurallar

Programınız uygun bir kinin tüm kurallarına uymalıdır (kaynak kodunun çıktısı hariç). Palindromlara izin verilmiyor.

Rastgele not: ben farkındayım bu ama dönüştürülmüş kod aynı özelliklere sahip olması gerekir, çünkü bu sorun farklı olduğuna inanıyoruz.



Yanıtlar:


9

RProgN , 3 bayt

1
2

@MartinEnder'e bu yanıtı hatırlattığı için teşekkürler .

Çevrimiçi deneyin!

Nasıl çalışır

Bu , doğru kine tanımımızda potansiyel bir kusurdan yararlanır :

Programın, programın farklı bir bölümünü kodlayan bir bölümünü tanımlamak mümkün olmalıdır. ("Farklı", iki parçanın farklı konumlarda görünmesi anlamına gelir.)

Ayrıca, bir kine doğrudan veya dolaylı olarak kendi kaynağına erişmemelidir.

Çıktı kodun tersi olduğundan ve kod bir palindrom olmadığından, bu durum böyledir.

RProgN - ters programcı gösterimi - bir LIFO yığını kullanır ve üzerindeki öğeleri atıldıkları sırayla yazdırır. Boşluklarla ve / veya satırsonlarıyla ayrılmış iki simge 1 ve 2 ters sırada açılır ve satırsonu ile ayrılmış olarak yazdırılır.

Bu, ters çevrilmiş programı yazdırır

2
1

bu da orijinali basar.

! enilno ti yrT


URL'yi beğendim.
Christopher

4
Bunu düzeltmeliyiz ... Meta soruya yeni bir cevap gönderirim ( bu yoruma dayanarak ), ancak muhtemelen mevcut cevaplarla rekabet etmek için yeterince dikkat çekmeyecekti.
ETHproductions

2
@ETHproductions: Yap. Şu anki doğru tanımımızla ilgili birkaç sorun olduğunu hissediyorum. (Muhtemelen, benim dilim 7, uygun quineness için son durumlarda bir çalışmadır; bu özel duruma ek olarak, birkaç tane daha işleyebilir.) FWIW, bunun şimdiki zamanımız tarafından bile uygun bir tersine doğru olduğundan emin değilim tanım; 1 ve 2 kendileri tarafından açıkça kodlanmıştır, bu yüzden tek potansiyel ilgi alanı yeni satırı kodlayan şeydir. (Bu, 1\n1iki 1s'nin birbirini kodladığı

9

Befunge-98 , 33 bayt

b3*>1#;-:0g,:#;_@_;#:,g0:-;#1>*b3

Çevrimiçi deneyin!


Güzel ilk cevap. Ama #başlık yapmak için kullanın . Ayrıca Tryitonline.net'e gidin ve çevrimiçi tercüman edinin
Christopher

2
Ayrıca kaydet düğmesinin altına gidin ve codegolf gönderimini kullanın.
Christopher

İlk olarak TIO'da düzenledim Bağlantıyı eklemeyi unuttum, ancak şimdi eklendi ve Başlık ipucu için teşekkürler
IQuick 143

TIO'daki "codegolf submission" seçeneğinin size başlık dahil bir başlangıç ​​şablonu verdiğini unutmayın.
Ørjan Johansen

gProgramın kaynağını doğrudan bellekten okuduğu için Befunge sorgularında izin verilmediğini düşündüm.

7

Bölüm 2 , 10 bayt

"L;L'!+!'_

Çevrimiçi deneyin!

Bu yazdırır:

_'!+!'L;L"

Çevrimiçi deneyin!

Ve tam tersi.

açıklama

Bu, ters kininin bir modifikasyonudur . Burada !baskı için kullanılan ve tekliften sadece bir kod noktası olan avantajımız için çalışıyor ". Bu, alıntı baskı bölümünün palindromik (the '!+!') olmasını kolaylaştırır . İlk kodla başlayalım:

"L;L'!+!'_

Bu programın Lher birinde sola doğru bir atom oluşturan iki giriş noktası vardır . Ancak, doğru olan hemen ;onu yıkar. Soldaki karakter dizisi moduna girer ve sonuna kadar sarar, böylece tüm kodu (hariç ") arkadan öne doğru yazdırır . Bu zaten bize veriyor _'!+!'L;L. Geriye sadece baskı ". _yok sayılabilir '!, atomun kütlesini 33 (kod noktası !) olarak ayarlar , +değerini artırır "ve !yazdırır. Tüm çıktı bu kadar. 'LSetleri kod noktasına atomlar kütle Lama bu konu dışı. ;bu atomu da yok eder ve hiç atom kalmadığından program sona erer.

Şimdi tam tersi:

_'!+!'L;L"

Yine, iki giriş noktamız var ama bir atom hemen yok edildi. Bu kez önce !+!'bölüm boyunca ilerliyoruz , bu yüzden bir teklif yazarak başlıyoruz. '_Yine alakasız, ama biz ihtiyacımız _(veya başka bir işe yaramaz karakter) burada önlemek için 'kaçan ". Atom sonuna kadar sarar, programın geri kalanını tersine yazdırmak için kaynak kodunu dize modunda bir kez geçirir, Ldaha sonra yoksayılır ve ;atomu yok eder ve programı sonlandırır.

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.