Balik Quine!

11

Kita semua tahu apa itu quine . Sebuah terbalik Quine adalah program non-kosong yang cetakan kebalikan dari kode sumber tanpa membaca kode sumbernya, dan hanya terdiri dari karakter yang dapat dicetak-ASCII (ruang angkasa melalui ~).

Di sini, “kebalikan dari kode sumber” berarti yang berikut: output dari program Anda harus berisi setiap karakter ASCII yang dapat dicetak (m - c) kali, di mana c adalah berapa kali karakter tersebut muncul dalam kode Anda, dan m adalah maksimum berapa kali karakter diulang dalam kode Anda.

(Dengan kata lain: kode Anda + output Anda = permutasi m kali semua dicetak-ASCII.)

Misalnya, jika program Anda adalah 12345, maka m = 1 , dan Anda harus mengeluarkan permutasi dari string ini:

 !"#$%&'()*+,-./06789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Jika program Anda AAB, maka m = 2 , dan Anda harus mengeluarkan permutasi dari:

  !!""##$$%%&&''(())**++,,--..//00112233445566778899::;;<<==>>??@@BCCDDEEFFGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ[[\\]]^^__``aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~

Perhatikan bagaimana ada dua yang hilang A, dan satu hilang B.

Meskipun sebuah program yang berisi semua karakter ASCII yang dapat dicetak dan tidak menghasilkan apa-apa adalah kueri terbalik yang valid (memuaskan m = 1 ), jawaban seperti itu tidak akan sangat kompetitif, mengingat panjangnya.

Anda harus menulis sebuah program yang merupakan quine terbalik, seperti yang dijelaskan dalam paragraf di atas. Karena ini adalah , program terpendek dalam byte akan menang. Semoga berhasil!

Gryphon
sumber
1
Spasi, tab, dan baris baru?
Stewie Griffin
11
Anda harus menyoroti duplicated for every repeated character in the source codeitu membuat semua perbedaan dalam tantangan
Rod
6
Bisakah Anda memberikan contoh terbalik di mana beberapa karakter diulang (dan beberapa kali)? Katakan 11234512345,?
Giuseppe
4
Bagaimana ini duplikat? Berhubungan, ya. Gandakan, tidak! Ini jauh lebih sulit dalam bahasa di mana Anda harus memiliki karakter duplikat. Perhatikan bahwa Anda tidak dapat hanya menduplikasi string, karena jumlah karakter yang harus Anda hapus dari setiap string berbeda-beda.
Stewie Griffin
1
@StewieGriffin Saya akan VTC ini sebagai "tidak jelas" daripada "dupe" karena (hampir) setiap jawaban memiliki komentar mencoba untuk mencari tahu apa duplicated for every repeated character in the source codeartinya atau jika pengajuan valid untuk kriteria itu, karena OP belum membahas cukup banyak beberapa pertanyaan di sini.
Giuseppe

Jawaban:

7

Brain-Flak , 221 207 byte

Termasuk +1 untuk -A

(((((((()()()()){}){}()){}){})()){}{}){({}[()]<((((((()()()()){}){}){})<>[()()()])[()])((((()()()){})){}{})<>((()()()()){}){({}[()]<(({})())>)}{}({}()())<>{{({}<>[()]<(({})())><>)}{}<>(({}())()())<>}<>>)}{}

Cobalah online!

# Push 206 (the number of times to duplicate the output)
(((((((()()()()){}){}()){}){})()){}{})

# For 0 to 206
{({}[()]<

    # Push 32 on this stack and 18, 28 and 29 to the other
    # 18, 28 and 29 are the distances between the sets of braces 
    ((((((()()()()){}){}){})<>[()()()])[()])((((()()()){})){}{})<>

    # For 0 to 8
    ((()()()()){}){({}[()]<

        # Push TOS, TOS + 1
        (({})())

    # end For 0 to 8
    >)}{}

    # Push TOS + 2 
    # skips '(' and ')'
    ({}()())

    # For each value on the off stack (18, 28, 28)
    <>{

        # For 0 to that number
        {({}<>[()]<

            # Push TOS, TOS + 1
            (({})())

        # End for 0 to that number
        ><>)}{}

        # Push TOS + 1, TOS + 3 (skips this set of braces)
        <>(({}())()())<>

    # End for each value on the off stack (18, 28, 28)
    }<>

 # End for 0 to 206
 >)}{}
Riley
sumber
Saya pikir Anda hanya harus menghapus [lima kali, tidak setiap saat. Perhatikan bahwa 2hanya dihapus satu kali dalam contoh. Tantangannya agak membingungkan.
Stewie Griffin
Menarik bagaimana ini secara drastis lebih pendek dari quine standar. +1:)
James
2
Ini benar-benar timpang, dan secara signifikan kurang menarik daripada jawaban Anda, tetapi secara teknis, !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_abcdefghijklmnopqrstuvwxyz {|} ~ ` akan mendapatkan skor yang lebih baik: /
James
6

CJam , 17 byte

{s95c+'|,32>\-}_~

Cobalah online!

Cetakan

 !"#$%&()*./014678:;<=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^`abdefghijklmnopqrtuvwxyz

Penjelasan

Tujuannya adalah untuk memodifikasi quine standar

{"_~"}_~

sedemikian rupa sehingga tidak ada karakter yang diulang dalam program. Alasan untuk ini adalah bahwa CJam memiliki satu set operator yang berbeda yang dapat kita gunakan untuk menghapus karakter dari rentang ASCII yang dapat dicetak, tetapi tidak memperhitungkan jumlah kemunculannya. Menerapkannya dengan tangan mungkin akan lebih lama, jadi saya perlu memastikan bahwa setiap karakter muncul hanya sekali dan kita tidak perlu khawatir tentang kejadian.

{      e# Quine framework. Executes the block while leaving another copy of the
       e# block on the stack.
  s    e#   Stringify the block, giving us "{s95c+'|,32>\-}".
  95c  e#   Convert 95 to a character, which gives us '_' without repeating
       e#   it in the source code.
  +    e#   Append it to the string. We don't need to worry about '~', we'll just
       e#   leave it out of the printable ASCII range to begin with.
  '|,  e#   Get a character range from the null byte up to '{'. This omits "|}~",
       e#   but those are in the program anyway, it doesn't matter.
  32>  e#   Discard the unprintable characters.
  \-   e#   Subtract the source string from the printable ASCII range.
}_~
Martin Ender
sumber
3

Python 3 , 83 byte

print(~2/8,6>9)#!"$%&'*+14:;<=?@ABCDEGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdfghjkmoquvwxyz{|}

Cobalah online!

Cetakan -0.375 False.

Lynn
sumber
2

05AB1E , 95 61 60 byte (bukan 58 b / c Saya tidak suka yang itu)

A?9L<J, !"'#$%&()*+-./:;=>@BCDEFGHIKMNOPQRSTUVWXYZ[\]^_`{|}~

Cobalah online!

Jawaban lama dibatalkan oleh "karakter-karakter ASCII saja", banyak perintah tidak valid di sini.

Ini mencetak abcdefghijklmnopqrstuvwxyz012345678satu kali karena tidak ada karakter yang digandakan.


Versi dengan BCDEFGHIKMNOPQRSTUVWXYZdihapus:

Bekerja dalam proses ... Saya pikir ~ 60 byte serendah yang Anda dapatkan tanpa karakter non-ASCII di 05AB1E ..

05AB1E , 58 byte

T5+FA'uK?Au"ADLJFKST"SK?9L<5KJ?} !#$%&()*>-./:;=@[]^_`{|~\

Cobalah online!

Mencetak output x12 karena karakter yang berulang:

['""', '55', '???', 'AAA', 'FF', 'JJ', 'KKKK', 'LL', 'SS', 'TT', 'uu']

Itu juga tidak berakhir dengan benar, mengerjakannya sekarang ...


Jawaban lama yang tidak valid (karena karakter non-ASCII) telah dihapus, lihat edit riwayat.

Guci Gurita Ajaib
sumber
"Quine terbalik adalah program non-kosong yang mencetak kebalikan dari kode sumbernya tanpa membaca kode sumbernya, dan hanya terdiri dari karakter ascii yang dapat dicetak ." Saya sedang mengerjakan jawaban 05AB1E, juga, sampai saya perhatikan ini.
KSmarts
1
@KSmarts diperbaiki dengan biaya 76 byte.
Guci Gurita Ajaib
2
Biasanya, dalam tantangan kode-golf, orang akan berharap 05AB1E melakukan sedikit lebih baik daripada, "mengalahkan Java".
KSmarts
@KSmarts mengangkat bahu jika Anda tidak membiarkan esolang dengan mudah bersaing dengan definisi, Anda layak mendapatkan jawaban sarkastik esolang: P.
Guci Gurita Ajaib
0

Java 8, 106 99 190 byte

class i {/*{}!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`claibdefghjkmnopqrtuvwxyz|~*/}
Roberto Graham
sumber
Anda mungkin dapat golf dengan menghapus ruang i {karena Anda sudah memiliki ruang
Okx
1
Saya percaya bahwa setiap karakter harus muncul dalam jumlah yang sama untuk valid
Roberto Graham
Saya tidak yakin apakah saya memahami tantangan sepenuhnya, tetapi tidak hanya class i{/*!"#$%&'()+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bdefghjkmnopqrtuvwxyz|~*/}cukup? Ini berisi semua printable-ASCII dalam kode sumbernya, dan tidak menghasilkan apa-apa. Bagian " digandakan untuk setiap karakter yang diulang dalam kode sumber " berlaku untuk output, jadi meskipun sdigandakan classdan *dan /digandakan karena /* */, menghasilkan empat kali tidak ada yang masih tidak berarti apa-apa.
Kevin Cruijssen
Juga, jika saya memang benar, Anda juga bisa memasukkannya ke: interface Z{}//!"#$%&'()*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY[\]^_`bdghjklmopqsuvwxyz|~( 97 byte )
Kevin Cruijssen
0

Javascript (ES6), 103 101 byte

_=>` !"#$%&'()*+,-.0123456789:;<?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^abcdefghijklmnopqrstuvwxyz{|}~`//_=>\\

Solusi lama (menggunakan 103 byte alert)

alert;;alert`\ \!"#$%&'()*+,-./0123456789:<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_bcdfghijkmnopqsuvwxyz{|}~`

Solusi lama (tidak valid) (96 byte)

alert()// !"#$%&'*+,-.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bcdfghijkmnopqsuvwxyz{|}~
Herman L.
sumber
Anda memiliki dua //, yang berarti Anda harus menampilkan karakter yang dapat dicetak, dengan satu /dihapus. (Saya pikir)
Stewie Griffin
@StewieGriffin Diperbaiki
Herman L