Quine Anagram! (Utang Perampok)


8

Ini adalah utas perampok. Untuk utas polisi, klik di sini .

Tugas Polisi

Untuk utas polisi, klik di sini .

Tugas Perampok

  • Temukan kiriman yang tidak retak pada utas polisi. (Kiriman hanya dapat dipecah satu kali.)
  • Pisahkan kode untuk menemukan quine yang berfungsi.
  • Posting jawaban di utas perampok. Sertakan bahasa, jumlah byte, pengguna yang mengeposkan kode yang diacak, tautan ke jawaban itu, dan kode yang tidak diacak.

Berikut adalah contoh pengiriman perampok:

Python, 29 byte, Oliver

_='_=%r;print _%%_';print _%_

Mencetak gol

Pengguna dengan celah terbanyak akan menjadi pemenang bagian ini.


1
Ada apa dengan tautan itu ?!
Solomon Ucko

Jawaban:


6

Vim, 22 byte, Loojvo

qtiqtqx0l"tp^V^[^[qx0l"tp

Cobalah online!

Penjelasan:

qt                  " Start recording in register 'q'
  i                 " Enter insert mode
   qtqx0l"tp        " Enter this string
            ^V^[    " Enter a literal 'esc' character
                ^[  " Exit insert mode
                  q " Stop recording

Pada titik ini, buffer terlihat seperti ini:

qtqx0l"tp^[

Dan kursor ada di kolom terakhir (tombol 'esc').

x                   " Delete the esc character
 0l                 " Move to the second character on this line
   "tp              " And paste register 't'

6

Underload , 20 byte, ais523

(:a~*(*S)):a~*(*S)*S

Cobalah online!

Penjelasan

Quine dasar dalam Underload adalah ini:

(:aSS):aSS

Inilah cara kerjanya:

                                  Stack:               Output:
(:aSS)      # Push string.        (:aSS)
      :     # Duplicate.          (:aSS) (:aSS)
       a    # Wrap in (...).      (:aSS) ((:aSS))
        S   # Print.              (:aSS)               (:aSS)
         S  # Print.                                   (:aSS):aSS

Masalah pertama adalah mengurangi jumlah yang Skita butuhkan, karena kita hanya punya 3 untuk digunakan di sini. Kita dapat melakukan ini dengan memanfaatkan swapping ( ~) dan concatenation ( *):

(:a~*S):a~*S

Di sini, alih-alih mencetak dua kali, kami menyatukan (...)versi dan versi polos dari string dan mencetaknya hanya sekali.

Teka-teki yang lebih besar adalah bagaimana mencetak angka ganjil *dan S. Saya bahkan tidak yakin bagaimana saya benar-benar sampai pada solusi akhir, tetapi ternyata kita bisa melakukan ini dengan meletakkan ekor output dalam string yang terpisah. String itu sendiri digandakan dalam string pertama, tetapi isinya tidak, yang memberi kita kemunculan ekstra *dan Skita butuhkan. Berikut adalah pemecahan dari solusi terakhir:

                        Stack:                       Output:
(:a~*(*S))              (:a~*(*S))              
          :             (:a~*(*S)) (:a~*(*S))              
           a            (:a~*(*S)) ((:a~*(*S)))
            ~           ((:a~*(*S))) (:a~*(*S))
             *          ((:a~*(*S)):a~*(*S))
              (*S)      ((:a~*(*S)):a~*(*S)) (*S)
                  *     ((:a~*(*S)):a~*(*S)*S)
                   S                                 (:a~*(*S)):a~*(*S)*S

6

MATL, 20 byte, Luis Mendo

'wo&GzL0fk'tl#DwI-ch

Cobalah online!

Saya belum pernah menggunakan MATL sebelumnya, jadi pemahaman saya mungkin sedikit tidak aktif, tetapi ini pada dasarnya cara kerjanya:

'wo&GzL0fk' This is a string representation of the code, offset by 3
t           Creates a duplicate copy of the string
l#D         Adds quotes to the second copy
w           Swap the unquoted version to the top of the stack
I-          Offset the characters in that version by 3
c           Convert back to characters
h           Join with the quoted string

Impresif! Terutama mengingat ini adalah jawaban Matlab pertama Anda. Sudah selesai dilakukan dengan baik!
Luis Mendo

4

Python 2, 54 byte, Loojvo

l= ['l=', ';print l[0],`l`,l[1]'] ;print l[0],`l`,l[1]

Sulit menemukan itu, karena saya pada dasarnya hampir tidak pernah menyentuh python


4

Retina, 20 byte, Martin Ender


\)1S*`\(?
\)1S*`\(?

Cobalah online

Saya menemukan ini hanya dengan bermain-main mencoba membuat quine. Saya menemukan "quine pendek" yang dia isyaratkan pada awalnya (atau yang serupa, setidaknya), hanya dengan bereksperimen (14 byte):


\)1S*`
\)1S*`

Cobalah online

Butuh waktu sekitar setengah jam sampai satu jam. Sangat pintar, Martin!


Pekerjaan yang baik! :) Ada sekitar 6 varian dari quine 14-byte, saya pikir.
Martin Ender

@ MartinEnder Saya mulai dengan mencoba mengocok anagram Anda, tetapi itu tidak membantu, jadi saya mulai dengan quine yang dikenal dan mengubahnya.
mbomb007

@ MartinEnder Apakah Anda menambahkan quine baru ke pertanyaan "Golf you a quine"?
mbomb007


3

JavaScript ES6, 49 byte, Mama Fun Roll

function f(){return    `${(((((k=>f+'')(f)))))}`}

Cukup banyak quine fungsi JS standar, dengan sedikit kebingungan.


3

> <> , 36 byte, Erik the Pegolf

'''000**rd3*:::?!;od0.!!+..233??dfrr

Cobalah online!

Saya cukup yakin bahwa ini bukan solusi yang dimaksudkan. Namun,> <> quines membuatnya cukup mudah untuk menyingkirkan sebagian besar karakter yang tidak diinginkan, kecuali '. Untungnya, :membuatnya cukup mudah untuk merawatnya juga.

Penjelasan

'''                                    Push everything except these quotes onto the stack.
   000**                               In effect, pushes a zero.
        r                              Reverse the stack.
         d3*                           Push 39 (the quote character).
            ::                         Make two copies. The stack now holds
                                       a null-terminated representation of the
                                       entire code.
                                       The print loop begins here...
              :                        Duplicate top of stack.
               ?!;                     Terminate if zero.
                  o                    Otherwise, print.
                   d0.                 Jump back to position 13, i.e. the
                                       beginning of the print loop.
                      !!+..233??dfrr   Unused characters.

Yap, bukan solusi yang ditakdirkan: P Dilakukan dengan baik.
Erik the Outgolfer

2

JavaScript, 147 byte, jrich

+function e(){window[(w=[``>``]+``)[i=9/9]+w[i+i]+"ert"]('+'+e+'()');"  +./;;;;;=======>[]````````ccddddddeeeeeeeefiinnnnoooooorrrrrrrsttuwwx{}"}()

Dengan semua karakter ekstra itu, ini jelas bukan solusi yang dimaksudkan :-)


Yap, jelas bukan solusi yang dimaksudkan, tapi saya terkesan! Kerja bagus!
Jrich

@jrich Bagian tersulit adalah mencari tahu bagaimana menyeimbangkan tanda kurung dan parens sehingga saya tidak menggunakan yang ekstra. Saya melihat Anda tidak menyadari bahwa (false+"")[1]trik ini akan berguna di sini? ;)
ETHproduksi

Tidak berpikir tentang hal itu jujur ​​... solusi saya adalah ... sedikit lebih sulit untuk sedikitnya
jrich

2

Haskell, 86 byte, Laikoni

y!r=r:y:r:[y]>>=id;main=putStr$[succ$'!']!"y!r=r:y:r:[y]>>=id;main=putStr$[succ$'!']!"

Ide bagus untuk mendapatkan "via succ$'!'(ascii char after !). Ada beberapa karakter yang hilang untuk mendapatkannya seperti biasa, yaitu secara implisit melalui showatau print.


1

Befunge , 15 byte, James Holderness

<:0:+1_@#%9,:g-

Cobalah online!

Penjelasan

Tangkapan di sini adalah bahwa loop berakhir ketika karakter saat ini dapat dibagi dengan 9, yang hanya berlaku untuk -. Oleh karena itu, itu perlu dilakukan pada akhirnya.

<                 Run code from right to left.
              -   There will always be 2 zeros on top of the stack at this
                  point, and this just reduces them to 1 zero.
             g    Get the character at the coordinates given by the top
                  two stack values, (0, 0) initially.
           ,:     Print a copy of that character.
         %9       Modulo 9.
      _@#         Terminate if that is 0.
    +1            Increment the x coordinate.
   :              Duplicate it.
 :0               Push two zeros.

1

PHP, 110 byte, Oliver

<?php $x='<?php $x=0; echo strtr($x, array(chr(39).$x.chr(39)));'; echo strtr($x, array(chr(39).$x.chr(39)));

Terima kasih, saya bersenang-senang dan strtr([])trik itu baru bagi saya yang saya harap akan menyelamatkan saya beberapa byte di masa depan.



0

Python 2, 105 byte, Erik the Pegolf

a='a=%r;print a%%a ###(((())))**-01::@@@@@[[]]gggiiirrr~';print a%a ###(((())))**-01::@@@@@[[]]gggiiirrr~

Ini hanya standar format string Python ...


0

Ruby, 53 byte, wat

puts <<ENDIT*2,"ENDIT"
puts <<ENDIT*2,"ENDIT"
ENDIT

Hanya modifikasi dari standar heredoc quine:

puts <<2*2,2
puts <<2*2,2
2
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.