Diyelim ki 2 diliniz var A
ve B
. Bir dize s
, aşağıdaki koşulları karşılarsa A
ve bir yarı dizindir B
:
s
bir dindirA
.s
içinde birçok dili olduğunuA
veB
.- Çalıştırmanın sonucunda
s
bir şekildeB
programa farklı bir dizes'
bir quine olduğunuB
.
Bu zorluğun amacı, iki farklı dilde bir yarı quin yazmaktır. Bu kod golf , 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, `12
Jelly 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/null
vb) 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.