Bir Semiquine Yazın


10

Diyelim ki 2 diliniz var Ave B. Bir dize s, aşağıdaki koşulları karşılarsa Ave bir yarı dizindir B:

  1. sbir dindir A.
  2. siçinde birçok dili olduğunu Ave B.
  3. Çalıştırmanın sonucunda sbir şekilde Bprograma farklı bir dize s'bir quine olduğunu B.

Bu zorluğun amacı, iki farklı dilde bir yarı quin yazmaktır. Bu , bu yüzden en kısa kod kazanır, en erken cevap bir tiebreaker olarak kullanılır.

Quines Kuralları

Sadece gerçek ayinler kabul edilir. Olduğuna göre,, STDOUT kelimesi kelimesine tüm kaynak kodunu yazdırmak gerekiyor olmadan :

  • doğrudan veya dolaylı olarak kaynak kodunuzu okuma.
  • sadece beslediğiniz her ifadeyi değerlendiren ve basan bir REPL ortamına güvenmek.
  • belirli durumlarda kaynağı basan dil özelliklerine güvenmek.
  • tüm veya bir kısmını yazmak için hata mesajları veya STDERR kullanma. (STDOUT geçerli bir quine olduğu ve hata mesajları bunun bir parçası olmadığı sürece STDERR'a bir şeyler yazabilir veya uyarı / ölümcül olmayan hatalar üretebilirsiniz.)

Ayrıca, kaynak kodunuz yalnızca değişmez değerlerden (dize değişmez değerleri, sayısal değişmez değerler vb.) Ve / veya NOP'lardan oluşmamalıdır. Örneğin, `12Jelly ve Pyth'te bir çokglottur, ancak Jelly'de bir NOP ve sayısal bir değişmezdir, bu nedenle geçerli değildir.

Bastırmanın geçerliliği uğruna, bastırılamayan çıktılar (telif hakkı bildirimleri, başlatma / kapatma mesajları veya izleyen satır beslemesi gibi) çıktıda yok sayılabilir.

Polyglotlar için Kurallar

Kullanılan iki dil belirgin şekilde farklı olmalıdır. Özellikle:

  • Aynı dilin farklı sürümleri olmamalıdır (örn. Python 2 ve Python 3).
  • Aynı dilden farklı lehçeler olmamalıdır (örn. Pascal ve Delphi).
  • Bir dil diğerinin alt kümesi olmayabilir (örn. C'ye karşı C ++ 1 ).
  • Bir dil diğerinin önemsiz bir türevi olmayabilir (ör. Matlab vs. Octave 2 , brainfuck vs boolfuck vs TinyBF vs ShadyAsFuck vs tüm diğer önemsiz brainfuck türevleri).

Çeşitli Kurallar

  • STDIN (veya başka bir kaynaktan) girişi kabul edemezsiniz. Seçtiğiniz dil olursa gerekir girdi almak, ardından ya girişi (gelen borulu boş dize boş olmalıdır /dev/nullvb) veya programın çıkış girişine bağlı olmamalıdır.
  • Bu zorluk için tam bir program yazmalısınız. Çözümü çalıştırmak için ek kod gerekli değildir (çözümde tanımlanan bir lambda işlevi atama ve çağırma gibi).

1: Evet, C'nin gerçekten C ++ 'ın bir alt kümesi olmadığını biliyorum. Çok dilli amaç için düşünülecek kadar yakın olsa da, bu yüzden bu meydan okuma için sayıyorum.

2: Yukarıdaki 1. nokta gibi, Octave teknik olarak Matlab ile% 100 uyumlu olmasa da, uyumlu olacak şekilde tasarlanmıştır ve bir Matlab / Octave poliglotunun meydan okumayı önemsizleştirmesine izin verecek kadar yakındır.


ESMin'in kopya bloklarına izin veriliyor mu?
lirtosiast

@ThomasKwa ESMin'e aşina değilim, bu yüzden bana hızlı bir özet verebilir misiniz?
Mego

Bir kopya bloğunu başlatmak için bir komut var, bu da onu geçmiş her şeyin kaynak kodunu alıyor. Bence diğer JS golf dillerinde de bir tane olabilir.
lirtosiast

@ThomasKwa Ayırma kurallarındaki ilk kural altında buna izin verilmez (doğrudan veya dolaylı olarak kaynak kodunu okumak yok).
Mego

1
@Downgoat Kesinlikle başka kuralları ihlal etmediği sürece. Tuhaflıkları kötüye kullanmak bu sitenin hedefidir :)
Mego

Yanıtlar:


6

GolfScript + Fisyon , 19 18 bayt

{".~
'!+OR"
2<}.~

Sondaki hat beslemesi gereklidir.

Bu, GolfScript'te gerçek bir örnek. Çevrimiçi deneyin!

Fisyonda yazdırır

'!+OR"

Bu da Fisyonda gerçek bir kınadır . Çevrimiçi deneyin!

açıklama

GolfScript'te, formdaki herhangi bir şey

{...}.~

yığın üzerinde ...bir dize bıraktığı sürece bir kınadır ".~". .Sonunda yazdırıldığından bir kopyası var, öyle ki, blok kopyalar ve ~biz yazdırmak için içeriğini kullanabilmesi için, bunu yürütür .~kendisini. Bu durumda, blok dizeyi iter

".~
'!+OR"

ve ardından ile ilk iki karaktere kısaltır 2<.

Birinci ve üçüncü satır, program tarafından tamamen göz ardı edildiğinden, Fisyon programı gerçekten kinin kendisi ile aynı şekilde çalışır .


6

Ruby + (JavaScript veya Python 3), 76 bayt

Bu, yeni favori dilim olan Ruby, JavaScript ve Python 3'ün neredeyse yaygın alt kümesi kullanılarak çözülebilecek başka bir zorluktur; ve henüz ekzoterik dillerde cevap bulamadığımız ve birçok insan golf dili dışındaki çözümleri görmeyi sevdiğinden, bir katkıda bulunacağımı düşündüm. Daha da iyisi, aynı cevap, meydan okumayı aynı anda çeşitli şekillerde çözer.

İşte s:

s="'";d='"';n='print("s="+d+s+d+";d="+s+d+s+";n="+s+n+s+";eval(n)")';eval(n)

Bu Ruby'de bir soru. JavaScript veya Python 3'te bir quine değil; bu dillerden herhangi birinde çalıştırırsanız, çıktısının s'sondaki bir yeni satırı vardır ve bu nedenle farklıdır:

s = "'", d =' " 'n =' baskı (" s = "+ d + s + d +", n = "+ s + n + s +" d = "+ + d + s + s" ; Eval (n) ") '; Eval (n)

Ancak, s'JavaScript ve Python 3'te çok dilli bir sorgu! (Benim için her zamanki gibi, JavaScript'in Rhino uygulamasını kullanıyorum, hem kolaylık sağlamak için (bir tarayıcıya ihtiyaç duymak yerine komut satırından çalıştığı için) hem de printstandart çıktıya yazdığı garip bir standart kütüphaneye sahip olduğu için.) Her iki dil de s'her iki programı çalıştırmanın bir sonucu olarak üretilir.

Bonus olarak, bu program sorunu tersine de çözer. s'Ruby'de çalışmaya karar verirseniz , orijinal programı stekrar yazdırır . Bu nedenle, s'soruya geçerli (ama biraz daha uzun, 77 baytta) bir cevap var.

Bu noktada, "çıktının iki programı farklı saymaya yetecek kadar yeni bir satır ile bitip bitmeyeceği konusunda farklılıklar" düşünülmeye başladım, bunun ikinci bir dil kümesi olduğu göz önüne alındığında, (iyi bilinen GolfScript / CJam'ın ötesinde).


2

Vitsy (güvenli mod) ve Y, 9 bayt, rakipsiz.

' Ugrd3*Z

Vitsy'de bu bir kine. Y'de bu yazdırılır Ugrd3*Z'; çalıştırıldığında, Ugrd3*Z'Y'de bir kın olan bu baskı yazdırılır .

Vitsy'nin gördüğü:

 ' Ugrd3*Z
 '         Heyyyy a string! Let's do this!
  ........ Capturing a string! Oh, not done? Hm, let's go back to the start.
 '         There we go.
           (space) ...
   U       (no op)
    g      use count, disabled in safe mode
     r     reverse stack
      d3*  push a '
         Z print it all!

Y'nin gördüğü:

' Ugrd3*Z
'         Push a space.
  U       Wrap around and capture.
   g      Print that. (Nothing else is printed.)

1
Bunun yalnızca Güvenli modda çalıştığını veya bunun yerine, güvenli olmayan modda ... istenmeyen yan etkileri olduğunu unutmayın.
Addison Crump

1

CJam + GolfScript, 9 bayt

"0$p"
0$p

Bu CJam'da bir ay. GolfScript'te, kendisini GolfScript'te bir kınan olan sondaki yeni satırla çıkarır.

CJam'in GolfScript'in önemsiz bir türevi olarak kabul edilip edilmeyeceğinden emin değilim. Ama bence oldukça farklılar ve en azından önemsiz değiller.

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.