Meta-poliglot sorgusu


18

PPCG'de geçirdiğim zamanlarda, quine problemlerinin ve çok dilli problemlerin oldukça popüler olduğunu fark ettim. Ayrıca, sorunlara meta çözümler, yani bir sorunun çözümü olan bir program oluşturan komut dosyaları, topluluktan çok olumlu geri bildirim alma eğilimindedir. Bu nedenle, bu üç fikri uygulayan bu zorluğu yarattım.

Göreviniz, okuyucu ve meraklısı, A ve B için ayetler oluşturmak üzere iki A ve B dilinde çalışabilen bir komut dosyası oluşturmaktır. Programınız A dilinde çalıştırıldığında, B dilinde bir quine olan ancak A dilinde olmayan bir programdır . Oluşturulan tırnakların yalnızca sürümlerden birinde çalışması gerektiğini unutmayın, A ve B dilleri aynı dilin farklı bir sürümü olabilir.

Unutmayın standart boşluklar kapalı olarak düşünülmeli ve sadece doğru quines izin verilir.

İyi şanslar, en az karakter kazanır!


1
Bir quine temel olarak bir meta-meta-meta-meta-meta-meta-meta-meta-vb. neyse program :)
Esolanging Fruit

İki dil farklı karakter kodlamaları kullanıyorsa bayt nasıl sayılır? Muhtemelen bayt yerine karakterlerle puan almalısınız
Luis Mendo

1
B dilini oluşturmak için A dilini kınayı çalıştırırsam, bu A'da çalıştırılabilir mi?
corvus_192

2
@LuisMendo Farklı kodlamaları olan diller için bir çoklu dil yazarken, her ikisinin de aynı bayt akışını aldıklarını varsayıyorum (aynı karakterlerin farklı kodlamaları değil).
Martin Ender

1
@Pavel Aslında buraya benzer bir meydan okuma yazdım , ancak kopya olarak kapatıldı.
Oliver Ni

Yanıtlar:


5

CJam 0.6.6 dev / GolfScript, 15 14 12 bayt

"0$p"0$~a:n;

2 bayt golf için @ jimmy23013 için teşekkürler!

Geri kalanı güncellenecek.

Doğrulama

Gönderim önemli boşluklar içerdiğinden, hexdumps'ı karşılaştırmak en iyisidir.

$ xxd -g 1 mpquine
0000000: 22 60 30 24 7e 22 30 24 7e 4e 4d 3a 6e 3b        "`0$~"0$~NM:n;
$
$ cjam mpquine | tee quine.gs | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e 0a                 "`0$~"`0$~.
$ golfscript quine.gs | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e 0a                 "`0$~"`0$~.
$ cjam quine.gs | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e                    "`0$~"`0$~
$
$ golfscript mpquine | tee quine.cjam | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e                    "`0$~"`0$~
$ cjam quine.cjam | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e                    "`0$~"`0$~
$ golfscript quine.cjam | xxd -g 1
0000000: 22 60 30 24 7e 22 60 30 24 7e 0a                 "`0$~"`0$~.

CJam

CJam baskılar "`0$~"0$~ve sondaki bir satır besleme. Çevrimiçi deneyin!

Oluşturulan program "`0$~"0$~GolfScript'te sondaki satır besleme ile ( çevrimiçi deneyin! ), Ancak CJam'de satır besleme olmadan yazdırır ( Çevrimiçi deneyin! ).

Metakin nasıl çalışır?

"`0$~"         e# Push that string on the stack.
      0$~      e# Push a copy and evaluate it:
               e#   `     Inspect the string, pushing "\"`0$~\"".
               e#    0$   Push a copy.
               e#      ~  Evaluate, pushing "`0$~".
               e# Both "\"`0$~\"" and "`0$~" are now on the stack.
         NM    e# Push "\n" and "".
           :n; e# Map print over the elements of "" (none) and pop the result.
               e# "\"`0$~\"", "`0$~", and "\n" are now on the stack, and the
               e# characters they represent will be printed implicitly.

Quine nasıl çalışır

"`0$~"          # Push that string on the stack.
      0$~       # As in CJam.
         <LF>   # Does nothing.
                # "\"`0$~\"" and "`0$~" are now on the stack, and the characters
                # they represent will be printed implicitly, plus a linefeed.

GolfScript'ten farklı olarak, CJam varsayılan olarak sondaki bir satır beslemesini yazdırmaz, bu nedenle bu CJam'de bir quine değildir.

GolfScript

GolfScript "`0$~"0$~, sondaki boşluk olmadan yazdırılır . Çevrimiçi deneyin!

Oluşturulan program "`0$~"0$~, CJam'de boşluk bırakmadan yazdırır ( Çevrimiçi deneyin! ), Ancak GolfScript bir satır besleme ekler ( Çevrimiçi deneyin! ).

Metakin nasıl çalışır?

"`0$~"0$~       # As in CJam.
         NM     # Unrecognized token. Does nothing.
           :n   # Store the top of the stack – "`0$~" – in the variable n. n holds
                # "\n" by default. When the program finishes, the interpreter
                # prints n implicitly, usually resulting in a trailing linefeed.
                # By redefining n, it will print "0$~" instead.
             ;  # Pop the string from the stack so it won't be printed twice.

Quine nasıl çalışır

"`0$~"0$~      e# Works as in GolfScript.

CJam'ın aksine, GolfScript yığının içeriğine bir satır besleme ekleyecektir, bu yüzden bu GolfScript'te bir quine değildir.


Sadece merak ediyorum, geniş anlamda, CJam ve GolfScript arasındaki fark nedir ve kodunuz neden çalışıyor?
Pavel

CJam, GolfScript'ten büyük ölçüde ilham aldı ve çoğunlukla geriye dönük olarak uyumlu. Büyük bir fark, GolfScript'in varsayılan olarak çıktıya bir satır beslemesi eklemesi, CJam'ın kullanmaması, burada istismar ettiğim şey. En kısa zamanda ayrıntılı bir açıklama ekleyeceğim.
Dennis

1
"0$p"0$~a:n;.
jimmy23013

@ jimmy23013 Güzel, teşekkürler! Oyuncakla oynamıştım a:n, ama kullanmak pbana olmadı.
Dennis

8

CJam / Bölünme, 22 bayt

"'!+OR'")5-"{'_'~}_~";

CJam'de deneyin. Fizyonda deneyin.

CJam'de, bu standart Fission quine'ı yazdırır :

'!+OR"

Fission quine'i deneyin.

"Fisyonda, bu standart CJam quine'in -less bir varyantını yazdırır :

{'_'~}_~

CJam quine'i deneyin.

Bu aynı zamanda 22 bayt için de çalışır (aynı satırları yazdırarak):

"& *NQ!":)R"{'_'~}_~";

açıklama

CJam'de:

"'!+OR'"    e# Push this string.
)           e# Pull off the last character.
5-          e# Subtract 5, turning ' into ".
"{'_'~}_~"  e# Push this string.
;           e# And discard it again.

Böylece, programın sonunda, yığın , her ikisi de dolaylı olarak yazdırılan dizeyi "'!+OR"ve karakteri içerir ".

Fisyonda, program akışı Rsağdaki bir atomla başlar. '"Sadece, atomlar kütlesini değiştirir ), 5ve -çeşitli nedenlerle göz ardı edilir. Ardından atom, yazdırma moduna girer "ve yazdırır {'_'~}_~. ;atomu yok eder ve programı sonlandırır.


4
İfade için +1{'_'~}
betseg

5
Bu olduğunda yakınlarda
olmamayı

6

Clojure / Common Lisp, 274 bayt

(defmacro t []"((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))")(if '()(print(let[s clojure.string/replace](.toUpperCase(s(s(s(s(s(t)"fn""lambda")"[s]""(s)")"(quote ""'")"e)""e")")))))""))))"))))(eval '(princ(t))))

Okunabilirlik için bazı alanlar eklendi

(defmacro t []"((fn [s] (print (list s (list (quote quote) s))))
     (quote (fn [s] (print (list s (list (quote quote) s))))))")
(if '()(print(let[s clojure.string/replace](.toUpperCase
    (s(s(s(s(s(t)"fn""lambda")"[s]""(s)")"(quote ""'")"e)""e")")))))""))))"))))
    (eval '(princ(t))))

Temel olarak Clojure'da bir kine döndüren bir makro tanımlar. Clojure, vector ( []) olarak sağlanan makro tanımı için parametreler gerektirirken Common Lisp (şükür ki) bunu görmezden gelir. Bundan sonra, Common Lisp'te ve Clojure'da '()hangisinin eşit nilve dolayısıyla falsey olduğunu değerlendirerek 2 dili birbirinden trueayırıyoruz. Sonra Clojure'u kullanarak Common Lisp'in başka bir ifdalda olduğu gibi değerlendirmeye bile çalışmadığı dize manipülasyonları yapıyoruz . Clojure ise yürütmeden önce başka bir dalın en azından doğru olup olmadığını kontrol etmeye çalışır.eval hem Clojure'da doğru olmak hem de Common Lisp'de doğru dizeyi çıkarmak .

Not: Sadece iki farklı dize döndürmek muhtemelen daha kısa olabilir, ancak farklı dillerde farklı dize çıktıları hakkında çok dilli zorluklardan farklı olmayacaktır. ¯ \ _ (ツ) _ / ¯

Clojure orijinal kaynak çalıştırma: https://ideone.com/SiQhPf

Ortak Lisp orijinal kaynak çalıştırma: https://ideone.com/huLcty

Clojure çıkışı: ((LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))) '(LAMBDA (S) (PRINT (LIST S (LIST 'QUOTE S)))))

Ortak Lisp çıktısı: ((fn [s] (print (list s (list (quote quote) s)))) (quote (fn [s] (print (list s (list (quote quote) s))))))

Clojure çıktısı Common Lisp'de çalışıyor: https://ideone.com/T1DF7H

Tam tersi: https://ideone.com/Fezayq


4

Jelly / GolfScript, 18 16 bayt

0000000: 3a 6e 22 ff cc cc 22 7d 7f fe 22 3a 6e 60 ff 3b  :n"..."}..":n`.;

Doğrulama

İlgili tüm programları tam bayt akışlarıyla test etmek yalnızca yerel olarak yapılabilir.

$ LANG=en_US # Latin-1. Jelly doesn't care about the exact encoding,
$            # as longs as it's not UTF-8.
$
$ xxd -g 1 mpquine
0000000: 3a 6e 22 ff cc cc 22 7d 7f fe 22 3a 6e 60 ff 3b  :n"..."}..":n`.;
$
$ jelly f mpquine | tee quine.gs | xxd -g 1
0000000: 22 3a 6e 60 22 3a 6e 60                          ":n`":n`
$ golfscript quine.gs | xxd -g 1
0000000: 22 3a 6e 60 22 3a 6e 60                          ":n`":n`
$ jelly f quine.gs 2> /dev/null | xxd -g 1
$
$ golfscript mpquine | tee quine.jelly | xxd -g 1
0000000: ff cc cc                                         ...
$ jelly f quine.jelly | xxd -g 1
0000000: ff cc cc                                         ...
$ golfscript quine.jelly | xxd -g 1
0000000: 0a

Jöle

İle Jelly kod sayfası aşağıdaki gibi program görünüyor.

:n"”ṘṘ"}
“":n`”;

Bu baskı ( Çevrimiçi deneyin! )

":n`":n`

GolfScript'te bir sorgu ( çevrimiçi deneyin! ), ancak Jelly'de bir ayrıştırıcı hatası ( Çevrimiçi deneyin! ).

GolfScript

Latin-1'de, program }ve arasında yazdırılamaz bir DEL karakteriyle aşağıdaki gibi görünür þ.

:n"ÿÌÌ"} þ":n`ÿ;

Bu baskı ( Çevrimiçi deneyin! )

ÿÌÌ

veya Jelly'in kod sayfası ile görselleştirildi,

”ṘṘ

Bu Jelly'de bir quine ( Çevrimiçi deneyin ! ), ancak yalnızca GolfScript'te bir satır besleme yazdırır ( Çevrimiçi deneyin! ).


1
İyi yaşlı ”ṘṘ, bu yüzden ØVgitmeli, değil mi?
Outgolfer Erik

3

JavaScript / C 278 bayt

Şaşırtıcı bir 278 baytta:

//\
console.log('int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}');/*
int main(){puts("A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));");}//*/

C sorgusu:

int main(){char*A="int main(){char*A=%c%s%c;printf(A,34,A,34);}";printf(A,34,A,34);}

JavaScript sorgusu:

A='A=;B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));';B=String.fromCharCode(39);console.log(A.slice(0,2)+B+A+B+A.slice(2));


Kutsal annelerin annesi ...
MD XF


1

Python / Retina, 70 65 64 66 bayt

Önceki Python / Retina poliglotumda kullandığım stratejinin aynısını kullandım .

#
print"\nS`((.+))"*2+"\n\n"
#?
#_='_=%r;%_\n';_
#?;
#;print _%
#

Python'da deneyin | Retina'da deneyin

#Python'daki bir yorumdur, bu yüzden sadece Python'daki Retina quini yazdırır. Retina'da, ilk aşama (2 satır) hiçbir şey yapmaz, çünkü #girişte hiçbir şey bulunmaz. Bir sonraki aşama hiçbir şeyi Python quine temeli ile değiştirmez. Üçüncü aşama her noktalı virgülün yerini #print _%parça ile değiştirir . Son aşama hepsini kaldırır #.


Retina'da Quine:


S`((.+))
S`((.+))


Python'da Quine:

_='_=%r;print _%%_\n';print _%_

Kullanılan ayinler bu meydan okumada görülebilir . Retina sorgusu Python'da bir hatadır ve Python sorgusunun Retina'da çıktısı yoktur.


Cevabınıza metakin'in nasıl çalıştığı hakkında bir açıklama ekleyebilir misiniz?
Pavel

@Pavel Ekledi.
mbomb007

1

Python 3 / Python 2, 62 bayt

_='_=%r;print(_%%_['+'~'*-~int(-1/2)+'int(-1/2):])';print(_%_)

Python 2 , Python 3'te deneyin .

Python quine dayanarak Burada . İki sürüm arasındaki ayırt edici faktör int(-1/2), Python 2'de /tamsayı bölümüdür (yuvarlama) -1; Python 3, /sayı bölme (yüzer -0.5) intiçin yuvarlar0 .

_Üç parçadan oluşan bir ip üretiyoruz. '_=%r;print(_%%_['ve 'int(-1/2):])'hep aynı. İlginç olan kısım '~'*-~int(-1/2):

  • Python 2'de, -~int(-1/2)olduğu0 ve tilde dize eklenmez;
  • Python 3, -~int(-1/2)olduğu 1ve tilde dize eklenir.

Böylece, Python 2, Python 3 quine çıktısını verir

_='_=%r;print(_%%_[int(-1/2):])';print(_%_[int(-1/2):])

ve Python 3 Python 2 sorgusunu

_='_=%r;print(_%%_[~int(-1/2):])';print(_%_[~int(-1/2):])

Her sürümde, içindeki ifade [ :]değerlendirilir 0, bu da dilimin tüm dizeyi içermesini sağlarken, değerlendirdiği yanlış dilde -1, dilimin yalnızca son karakteri içermesini sağlar, böylece çıktıyı keser, böylece tam bir quine olmaz.


1

Brain-Flak , brainfuck 4617 4009 bayt

((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()())))()())[()()])))()()())[()()])))())[()])[()()()()])))))))))))))))))))))))))))))))))))))))))))()()())()())[()()()()])()()())[()()])()())[()()()()])()()()))()()())[()()])[()()()()])))))))))))))))))))()())))()()())[()()()()])()()()()())[()()]))()())[()()()])()())[()()])))()()())[()()])))())[()()])[()()()])))))))))))))))))))))))))))))))))))))))))))()()()())[()()()])()()()())[()()])[()()()]))()()()())[()()()])()()()())[()()])[()()()])()()()())[()()()])()()()())[()()])[()()()]))))))))))))))()()()())[()()()])()()()())[()()])[()()()]))()()()())[()()()])()()()())[()()])[()()()])))))))))))))))))))))))))))))()()()())[()()()])()()()())[()()])[()()()]))()()()())[()()()])()()()()()))))))[()()()])[()])()()))))()()){({}<>)<>}<>([]){({}[()]<(({}[()]<((((((()()()){}())){}{}){}())<>)>)<>){({}[()]<({}()())>){({}[()]<({}())>){({}[()]<({}((()()()){}()){})>){({}[()]<({}()())>){({}[()]<({}(((()()()){}()){}){}())>){(<{}({}()())>)}}}}}}{}([]<({}<{({}<>)<>}<>>)>){({}[()]<({}<>)<>>)}{}{({}[()]<(({}))>)}{}(((({})(((()()())){}{}){}())))<>>)}{}{<>({}<>)}{+++++++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++++++>>>+++>>>++++>>>+>>>+++++>>>++++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+>>>+>>>+>>>+>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>++>>>+++>>>++++>>>++>>>++>>>+>>>++>>>++>>>++>>>++++>>>++>>>+++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>++>>>+++++++>>>++++++++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>+++++++>>>++++++++>>>+>>>++>>>++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>+>>>++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+>>>+>>>+>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>+>>>++>>>++>>>++>>>+++++++>>>++++++++>>>+++++++>>>++++++++>>>++>>>+++++++>>>++++++++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++>>>+++++++>>>++++++++>>>+>>>+++++++>>>++++++++>>>+>>>++>>>+>>>++>>>++>>>++++>>>++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>++++++++>>>+++++++>>>++++++++>>>+>>>+++++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++++++>>>+++>>>++++>>>++++>>>++>>>++++>>>++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++>>>++>>>++++++++>>>+++++++>>>++++++++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>+++>>>+>>>+>>>+>>>+++++++>>>++++++++>>>+++++>>>+>>>++>>>++++++>>>++>>>+>>>++>>>++>>>++>>>++++>>>++>>>++++++++>>>+++++++>>>++++++++>>>+++>>>++++>>>++++>>>++>>>++++++++>>>+++++++>>>++++++++>>>+++>>>++++>>>+++++++>>>+>>>+++++++>>>++++++++>>>+++>>>++++>>>++>>>+++>>>++++>>>++++++++>>>+++>>>++++>>><<<[<<<]>>>[>++++++++++++++++++++++++++++++++++++++++.<[->.+.->+<<]>+.[-]>>]<[<<<]>>>[<++++++++++++++++++++++++++++++++++++++++>-[<+>-[<+++++++++++++++++++>-[<++>-[<+++++++++++++++++++++++++++++>-[<++>-[<++++++++++++++++++++++++++++++>-[<++>-]]]]]]]<.>>>>]}{}

Çevrimiçi deneyin!

Çevrimiçi deneyin!

Açıklama hala yolda golf oynuyor


Bu, brainfuck'ta bir brainfuck sorgusu ve Brain-Flak'ta bir Brain-Flak sorgusu üretir. Bu olmalıdır brainfuck çalıştırdığınızda Beyin Flak ve Beyin-Flak Quine çalıştırdığınızda bir brainfuck Quine üretir.
Pavel

Tekrar yapacağım. Üzgünüm sadece As ve Bs takip sonrası zor bir zaman var
Post Rock Garf Hunter
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.