Quine / Error Quine Polyglot


14

Göreviniz basit: İki dilde çalıştırılabilecek bir program yazın. Dil 1'de normal bir tırnak (kendi kaynak kodunu yazdırır) ve dil 2'de bir hata sorgusu (kendi kaynak koduyla özdeş bir hata mesajı oluşturur) olmalıdır.

Bu , bu yüzden en kısa geçerli gönderme (bayt cinsinden) kazanır.

Kurallar:

  • Diller keyfi olarak benzer olabilir. Üst kümeler / benzer sürümler / benzer lehçelere izin verilmez.
  • Error quine kuralları, Quine Make Quine! İle aynıdır . .


BASIC'in iki farklı lehçesine izin veriliyor mu?
MD XF

@ MDXF Bunun yerine STDERR'a bir çıkış çıkması dışında tamamen aynı davranışları varsa, o zaman hayır. Aksi takdirde, evet.
Meyveleri Esolanging

O zaman cevabım geçerli.
MD XF

@MDXF Geçerli.
Esolanging Fruit

Yanıtlar:


2

Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 bayt

^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected

Çevrimiçi deneyin !: Befunge-93 , C

Dosya adının çalışması için eşleşen tırnak işareti gerektirdiğini belirten randomdude999'a teşekkürler.

Yeni satırın ^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$pbulunduğu dosya adının altına kaydedilmelidir \n. Bu nedenle, TIO for C tam olarak tasarlandığı gibi çalışmaz. Lubuntu üzerinde çalıştığı test edildi.

Açıklama (C):

Program derlenemez ve tcc, hata iletisinin bir parçası olarak dosyanın adını mutlu bir şekilde çıkarır. Kodun başlangıcına bağlı olarak alabileceğiniz birden çok derleme hatası vardır. ^başlangıçta bize declaration expectedkısa olan ve sorunlu karakterler içermeyen bir a verir ". Öte yandan, gcc ve clang geliştiricileri çok kötümser ve bir kerede birden fazla hata vermeyi seçtiler, bu çok hoş değil, bu yüzden derleyicilerini kullanmıyoruz.

Açıklama (Befunge-93):

Befunge, "dize modunu değiştiren komut sayesinde kodunun karakter verisi olarak da kullanılabileceği için sorgular için uygundur . Başlangıçta, bazı yararsız yığın işlemleri gerçekleştiririz, sonra p(0, 1) 'e bir NUL karakteri yerleştiren bir (put komutu) veririz . Ardından talimat işaretçisini sola yansıtırız ve her şeyi bir dize olarak okumaya başlarız. Bu, yığının LIFO doğası nedeniyle solda yapılmalıdır. Sarılıp "tekrar karaktere ulaştıktan sonra dize biter. NUL karakterinin,$karakter, dizenin ortasında bir sınırlayıcı oluşturma. Daha sonra 3 numarayı yığının üzerine itiyoruz ve NUL'un üzerine atlıyoruz (çünkü talimat olarak çalıştırıldığında maalesef yorumlayıcıyı asıyor). Hata mesajının statik kısmı burada yürütülmelidir. Karakterlerinin çoğu op-op değildir, ancak pkomut üç argüman tüketir (bu nedenle neden 3 sayı ittik, aksi takdirde dizenin bir kısmı burada yenir) ve :& 1karakterler, yığına karşı koyduğumuz toplam 4 değeri iter a pve a $(pop and at) komutuyla. Daha sonra, ASCII kodlarını itmek için bazı aritmetik yapılır ^"\n>#001p#"ve son olarak bir döngü, bir NUL karakteri bulana ve sona erene kadar yığındaki tüm değerleri karakter olarak yazdırır.


Böyle bir dosya adını destekleyen bir işletim sistemi bulmanız ve listelemeniz gerekir. Windows'un bunu desteklemediğini biliyorum.
mbomb007

@ mbomb007 Sözde, Linux genellikle dosya adındaki herhangi bir yazdırılabilir karakteri kabul eder /. Bunu kendim test edemiyorum.
negatif yedi

1
Hangi tcc sürümünü kullandınız? Doğrudan Arch depolarından 0.9.27-3 kullanıyorum ve aldığım hata <define>:1: error: missing terminating " character.
randomdude999

1
Tamam, TIO'da kullanılan tcc'nin tam sürümünü buldum ve aynı hata mesajını aldım, ancak sadece dosya adının tırnak işaretleri eşleşirse. Bu cevabın işlemesi için benzersiz tırnaklara sahip olmak oldukça gerekli görünmektedir. İşte size yardımcı olabilecek bir şey: Linux da dosya adlarında yeni satırlara izin veriyor. Bu, dosya adının sonuna yeni satır ve fiyat eklerken tcc çıktısıdır: (uzun gist bağlantısı) . Bu, yeni satýrý ve þeyleri 2. satýrda basmak için bir yol bulman gerektiði anlamýna geliyor.
randomdude999

@ randomdude999 Teşekkürler. Bunu açıklamak için çözümü güncelledim. Gerçekten ilginç bir teklif böyle bir soruna neden ...
negatif yedi

0

Applesoft BASIC / Commodore LCD BASIC , 13 bayt

?SYNTAX ERROR

Apple] [emülatöründe RESETTEMEL moda girmek için tuşa basın.
Commodore LCD emülatöründe RightArrowEnterBASIC uygulamasına girmek için tıklayın.
Her ikisinde de ?SYNTAX ERRORtüm büyük harfleri yazmayın, çünkü otomatik olarak büyük harf kullanırlar.


2
rekabet etmeme durumu, bu mücadeleden sonra yapılan dillerde gönderilen gönderiler için ayrılmıştır. Kurallara göre geçersizse, silin. Önce OP'nin onayını bekliyorum çünkü bunun geçerli olması gerektiğini düşünüyorum (işe yaradığı varsayılarak).
HyperNeutrino

@HyperNeutrino Teşekkürler, düzenlendi.
MD XF

1
Bunun da bundan şüphelenmesi gerekecek. Bu soru göründüğünden daha acımasız ...
Ørjan Johansen

1
@ ØrjanJohansen Pekala, bundan emin değilim. Teknik olarak, Commore LCD'de standart bir hata bayt akışı yoktu, bu yüzden gerçekten bir hata sorgusu mu?
MD XF

1
@ ØrjanJohansen bunu ? Sanırım bu geçerli olup olmadığını söylemek imkansız. OP'den onay bekleyebilir miyiz?
MD XF
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.