Siparişlerin sorgusu


10

Farklı dillerde çalıştırıldığında, her dilde kodun farklı bir bayt permütasyonu çıkaran bir program yazın. Tam kaynak kodu bir permütasyon olarak sayılır.

Burada "farklı dil" farklı versiyon (Py 2 ve Py 3) veya farklı standart bayraklar olabilir. Farklı sürümü zorlayan farklı çıktı.

Her dilde program için uygun quine kuralları geçerlidir. Puanınız, (Language count)^6/(Code length in bytes)daha yüksek bir puan daha iyi olacak şekilde hesaplanır .

Örneklem:

Kodunuzu ise AABüç farklı dil getiri çalışan ABA, AABve AABsonra onun puanıdır 2^6/3(iki yalnızca bir AABsayımı). It yolunda ise ABAanlamsızdır.


1
Farklı bir dil olarak sayılan nedir?
Laikoni

4
Uygun bir kinin hangi tanımı geçerlidir? ( Martin , ya ais523 en , ya da belki bu meta parçacığı bazı diğer tanım?) Doğru quine kuralları yalnızca programın yorumların için geçerli musunuz olan aslında quines? (
Lynn

Açıklığa kavuşturmak için, örneğin üzerinde çalışmak - kodum dil-1 ve dil-2'de AAByazdırılıyorsa AAB, ABAdil-1 programı olarak bakıldığında bunun uygun bir quine olması gerektiğini ve bunun bir dil-2 programı. Bu doğru mu?
Lynn

1
Kod uzunluğu karakter veya bayt olarak sayılıyor mu? Farklı karakter kodlamaları ile ne yapmalıyız?
dylnan

1
Baytlara karşı karakterlere ne dersiniz?
dylnan

Yanıtlar:


10

Befunge-98 , > <> , Göl> <> , Bölünme , Wumpus , Cardinal , balmumu ve Alice değerlendirmesi: 8 6 /88 = 2978,909

"65*4+059*$!#.39*0jp2+'Wk,@ ''5&.'\d&o@o&88#+\@ol?!,'.'0.6'!+Ox,++tttt=++%-$#}.6~.F4*`*R

Befunge'de deneyin! Deneyin> <>! Gol deneyin> <>! Fisyon deneyin! Wumpus'ta deneyin! Cardinal'de deneyin! Balmumu'nda deneyin! Alice de deneyin!

Doğrulama!

Çok sayıda 2B dil, hepsi sarma dize değişmezlerini kötüye kullanıyor. Çıktılardaki fark şu şekilde:

> <>, Gol> <> ve Befunge-98 Tüm (haricinde kod geriye doğru basmak ", farklı pozisyonlarda son üç karakterli,) R*", O"*ve "R*sırasıyla. Balmumu da kodu geriye doğru içerir, ancak son üç karakter çıktının ilk bölümünde serpiştirilir. Alice tüm kaçan karakterler dışında, çoğunlukla geriye doğru ( ', \ve ") yerine cepheye taşındı.

Wumpus tek gerçek kınadır, Fission "başlangıç ​​yerine kodun sonuna koyar ve Cardinal başlangıç ile yakın "arasındaki kotayı koyar .05

Farklı permütasyonların kanıtı

açıklamalar:

Befunge-98:

"  Wrapping string literal pushes all other characters + a space to the stack
 65*4+  Push " to the stack
      059*$!#.39*0j   Push 1,27 to the stack
                   p  Pops the top three values of the stack (27,1,34)
                    2+  Adds 2 to the space to make "
                      'Wk,@  Prints the top 88 characters of the stack and terminates

> <> ve Gol> <>:

Dürüst olmak gerekirse, burada fazla bir şey yapmadım. Bu iki dilin yürütülmesi arasındaki tek fark @, yığının ilk üç değerini her dil için farklı şekillerde döndüren komuttur.

"  Wrapping string literal pushes all other characters to the stack
 65*4+  Push 34 (") to the stack
      059*$!#.  Jump to cell 45,0
                                   \@  Rotate the top three values of the stack 
                                     ol?!,'.'0.  Output the whole stack, ending in a divide by 0/stack underflow error

fizyon:

 "............R  Spawn a pointer going right

 "  Switch to printing mode and print every other character
 "  Switch off printing mode
  6  Teleport to other 6
 "........6'!+O   Print the "

Wumpus:

"  Bouncing string literal
 65*4+  Push a (")
      059*$!#.   Push 0 and jump to cell 0,45
                                        \  Reflect off mirror
                                       +   Add 0 to top of stack
                                 @o&88#    Print the top 88 characters of the stack

Kardinal:

                                 %   Spawn two pointer going left/right (up/down despawn immediately)
                                  -$  Right pointer jumps to cell -1,0
                      x,++tttt=++     Left pointer prints "
"  While right pointer switches to print mode and prints the code

Balmumu:

 "................*`*   Spawn pointers going in every direction
                        Every other * also spawns pointers, but they do nothing
                   `    Turn on print mode for two of the pointers going in different directions
                        This prints everything but the `
          #}.6~.F4*     Print a `

Alice:

"  Wrapping string literal pushes all other characters to the stack
   Except 's and mirrors
 65*4+  Push " to the stack
      059*$!#.  Does nothing
              39*0j  Jumps to cell 39,0
                         ''5&.    Push ' and duplicate it 5 times
                              '\  Push \
                                d&o@  Print the whole stack

6

5 Perl , Ruby , JavaScript (Krom), PHP , Python 2 , Python 3 , 1206 bayt, skor 6 6 /1206 = 38,6865671641791

q=1//2;s=+0;s|0;"/.__id__;#";_="""q=1//2;s=+0;s|0;"/.__id__;#";_={0}{1}{0};R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q={0}{2}{0};print(_.format(Q,_,q[0:-12]+R,"%"))""";R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q="""|;#<?ob_end_clean();
eval($_='"$t"?0?[$q=37 .chr+113 .chr+38 .chr,$p=(96 .chr+39 .chr)*4,$n=10 .chr,$s=39 .chr*12,$S=34 .chr*3]:eval("printf=console.log;c=String.fromCharCode;$q=c(96);$p=c(37,113,38,39).repeat(4);$n=c(10);$s=c(39).repeat(12);$S=c(34,34,34)"):[]?[$q=q(!g)^PA,$p=HARHARHARHAR^od2od2od2od2,$n=R^X,$s=bbbbbbbbbbbb^EEEEEEEEEEEE,$S=hhh^JJJ]:[$q=O^h,$p=str_repeat(RHa3^w9GS,4),$n=R^X,$s=str_repeat(b^E,12),$S=HHH^jjj];//#');printf($x='q=1//2;s=+0;s|0;"/.__id__;#";_=%7$sq=1//2;s=+0;s|0;"/.__id__;#";_={0}{1}{0};R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q={0}{2}{0};print(_.format(Q,_,q[0:-12]+R,"%8$s"))%7$s;R=chr((39,34)[1/2>0])*12;Q=chr((39,34)[1/2==0])*3;q=%7$s|;#<?ob_end_clean();%5$seval($_=%3$s%1$s%3$s);printf($x=%3$s%2$s%3$s,$_,$x,$q,$p,$n,$s,$S,"%8$s",![]||([]+[])?$n:"");//#%4$s%6$s%7$s;print(_.format(Q,_,q[0:-12]+R,"%8$s"))%9$s',$_,$x,$q,$p,$n,$s,$S,"%",![]||([]+[])?$n:"");//#`q&%`q&%`q&%`q&%''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))

Perl, Ruby, PHP, Python 2 ve Python 3'ü çevrimiçi doğrulayın!

Not : Yukarıdaki programı Chrome'daki Inspector konsolunda çalıştırmak (konum bağımsız değişkenlerini desteklediği anlaşılıyor console.log) doğru programı döndürür.

açıklama

Bu umduğumdan çok daha uzun çıktı ve hayatımı da biraz daha zorlaştırdım, bu yüzden muhtemelen onunla uğraşmaya devam edeceğim. Ben de daha fazla dilde eklemek istiyorum, ama bir $sigil umursamayan bir şey bulmak gerekir ...

Kullanımına alıntı hesaplanması her dil için biraz farklı burada hemen hemen standart bir quine biçimi şöyledir: Ruby %q&, PHP kullanır kullanılır ', JavaScript (node.js) kullanır `yararlı kullanımlarını ve Perl 5 q(... ). Yalnızca tırnak işaretleri değiştiğinden, programın geri kalanı hala her dilde çalıştırılabilir ve geçerli bir sözdizimidir. Python 2 ve 3, """Python 2 ve '''Python 3 için önceki programın etrafına sarılır .

Ortaya çıkan Perl ve Ruby programları standart satırlar değildir, her yinelemeye ek q/ %qs eklenir, ancak ilk program doğru şekilde döner.

Sonuçlar:

  • Perl 5:
    eval($_=q&... q&);printf($x=q&... q&,... );//#'%`'%`'%`'%`''''''''''''"""...
  • Ruby:
    eval($_=%q&... %q&);printf($x=%q&... %q&,... );//#`'`'`'`'''''''''''''"""... ...
  • JavaScript (Chrome):
    eval($_=`... `);printf($x=`... `,... );//#%q&'%q&'%q&'%q&'''''''''''''"""...
  • PHP:
    eval($_='... ');printf($x='... ',... );//#`q&%`q&%`q&%`q&%''''''''''''"""...
  • Python 2:
    ... _="""... """;... q="""...''''''''''''""";print(_.format(Q,_,q[0:-12]+R,"%"))
  • Python 3:
    ... _='''... ''';... q='''...""""""""""""''';print(_.format(Q,_,q[0:-12]+R,"%"))

Bunu çok çalıştım, umarım burada hiçbir şeyi kaçırmadım. Hala Jo King'in skoruna yakın bir yerde olmak için bir yolum var ...


2

Jöle , ve M , 2 6 /14 = 4.57

1Ɗṙ@“1Ɗṙ@ȮṾ”ȮṾ

Jelly'de deneyin!

M'de deneyin!

Ɗṙ@ȮṾ1“Ɗṙ@ȮṾ1” Jelly'de

1Ɗṙ@ȮṾ“1Ɗṙ@ȮṾ” M cinsinden



@ H.PWiz Bunu söyleyerek bir yorum eklemek üzereydim. OP
dylnan'a

@ l4m2 Kömür programını uygun bir soru olarak görüyor musunuz? Değilse silerim.
dylnan

QuinePHP gibi sanırım ?
l4m2

@ l4m2 Emin değilim, PHP bilmiyorum. Sanırım çoğu ASCII metni için çalışıyor
dylnan

2

Python 2 ve piton 3 , 2 6 / et 61 = 1.05

s='s=%r;print(s%%s[::(1/2>0)*2-1])';print(s%s[::(1/2>0)*2-1])

Python 2'de deneyin!

Python 3'te deneyin!

Jo King sayesinde 12 bayt tasarruf etti.

Python 2 baskılar

s=')]1-2*)0>2/1(::[s%%s(tnirp;r%=s';print(s%s[::(1/2>0)*2-1])

Python 3 baskılar

s='s=%r;print(s%%s[::(1/2>0)*2-1])';print(s%s[::(1/2>0)*2-1])

Bu gerçeği kullanır 1/2olan .5Python 3 ve 0Python 2'de.


1

Bash / GolfScript, 72 bayt, skor 2 6 /72 = 8/9 (~ 0.888 ...)

.~0 () 
{ 
    declare "-f" @* ".~0" " ()
 "+@n.;
    echo '.~0;'
}
.~0;

İlk iki satırda tek bir boşluk bırakır.

Bash'ta çevrimiçi deneyin.
GolfScript'te çevrimiçi deneyin.

Basitçe modifikasyonu @ jimmy23013 ' 'la cevap Bir Polyquine yaz ' meydan okuma . Yapıldı modifikasyon üçüncü satırda sonra arka alan kaldırma ve değişiyordu \n"+@n.;için \n "+@n;.

Bash 1 ve 2 satırlarını şu şekilde basacaktır:

.~0 ()    <- Trailing space
{         <- Trailing space

GolfScript 1 ve 2 satırlarını şu şekilde basacaktır:

.~0 ()   <- No trailing space
 {       <- Both leading and trailing space

Burada temel program, Bash çıkışı ve GolfScript çıkışları sırasıyla yeni satırlarla değiştirildi \n:

.~0 () \n{ \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;
.~0 () \n{ \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;
.~0 ()\n { \n    declare "-f" @* ".~0" " ()\n "+@n.;\n    echo '.~0;'\n}\n.~0;

      ^^^ Note the difference here
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.