Inverse-quotes-quine

29

Prospek tantangan ini adalah:

  • Jika program Anda berjalan secara normal, semua kode dalam tanda bicara ( "- tanda kutip ganda) harus dicetak.
  • Jika program Anda dibungkus dengan tanda kutip ganda (pada gilirannya membalikkan tanda bicara), kode yang biasanya tidak dalam tanda kutip harus dicetak.

Misalnya:

Katakanlah Anda memiliki kode berikut:

fancyStuff("myCode"); "I like".isGreat();

Jika saya menjalankannya, saya akan mengharapkan output dari:

myCode
I like

Namun, jika saya membungkusnya dengan tanda kutip, saya akan mendapatkan:

"fancyStuff("myCode"); "I like".isGreat();"

Ketika kode ini dijalankan, output yang diharapkan adalah:

fancyStuff(
); 
.isGreat();

Jelas, contoh di atas bukanlah respons fungsional dalam bahasa apa pun. Tugas Anda adalah menulis kode yang berkinerja seperti ini.

Aturan

  • Celah standar berlaku.
  • Nilai yang dicetak, baik dalam bentuk kuotasi dan tidak kutip, harus kosong, atau hanya terdiri dari spasi putih. Ini juga berarti bahwa semua program harus menyertakan setidaknya satu set kutipan.
  • Namun, trailing / whitespace sebelumnya diperbolehkan.
  • Tidak melihat kode Anda sendiri, nama file yang diperlukan, dll.
  • Kutipan yang tidak cocok ditolak
  • Jika ada banyak string, mereka dapat dicetak sebagai baris baru (seperti pada contoh), atau dengan cara lain yang dapat dibaca manusia - tidak ada array atau objek
  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
Geza Kerecsenyi
sumber
Apakah kutipan yang tidak cocok diizinkan, dan jika demikian, bagaimana mereka harus ditangani?
Negatif tujuh
3
@ GezaKerecsenyi Jadi, apakah diperlukan separator, atau dapatkah kita menyatukan senarnya?
Erik the Outgolfer
9
Bagaimana array bukan format yang dapat dibaca manusia?
Wheat Wizard
4
Haruskah string menjadi output dalam urutan yang sama seperti yang ditampilkan dalam kode kita?
Shaggy
1
Saya pikir ini akan menjadi sedikit lebih kompleks jika Anda harus mencetak apa pun yang tidak ada dalam tanda kutip
Jo King

Jawaban:

28

Python 2 , 20 byte

print";print'print'"

-7 byte terima kasih kepada tsh

Cobalah online!


Jawaban lama:

Python 2 , 27 byte

'';print";print 2*"'';print

Cobalah online!

Latih pemikiran di balik jawaban ini:

Mulailah dengan cetakan sederhana, karena kita perlu mencetak sesuatu .

print"a"

Kita juga perlu mencetak sesuatu dalam case terbalik, yaitu. cetak di dalamnya.

print"print"

Kasing non-terbalik cukup bagus pada saat ini. Mari kita fokus pada kasus terbalik. Kita sekarang mulai dengan string print, yang tidak dapat segera diikuti oleh pernyataan cetak. Mari kita perbaiki ini dengan titik koma.

print";print"

Barang bagus. Kecuali, kode terbalik tidak benar-benar mencetak apa pun. Kita perlu mencetak printdi awal, karena berakhir dengan tanda kutip, tetapi juga mencetak apa pun yang muncul setelah kutipan kedua, karena berakhir juga dalam tanda kutip. Cara yang jelas untuk ini adalah dengan menambahkan printdan mengalikan string terakhir dengan 2.

print";print 2*"print

Sekarang kode terbalik berfungsi dengan baik, meskipun kita harus waspada terhadap kenyataan bahwa bagian sebelum kutipan pertama dan bagian setelah kutipan kedua perlu dijaga tetap sama sepanjang perubahan di masa depan. Adapun kode non-inverted, itu melempar kesalahan sintaksis - sekali lagi, kita perlu memperkenalkan titik koma untuk memisahkan ekspresi.

;print";print 2*";print

Python tidak benar-benar menyukai tampilan titik koma tunggal itu, jadi kita harus memuaskan rasa lapar ular dengan dua dari ekspresi no-op yang sama, dimasukkan sebelum titik koma pertama dan titik koma terakhir. Sebagian besar ekspresi akan berfungsi dengan baik dalam kasus pertama, tetapi dalam kasus kedua harus mengikuti print";print 2*"kode non-terbalik tanpa merusak apa pun. Kita dapat menggunakan '', yang hanya akan digabungkan dengan string sebelumnya.

'';print";print 2*"'';print
negatif tujuh
sumber
5
print(";print('print()');")juga 27 byte, dan juga Python 3.
tsh
2
@ tsh Kode ini mengungkapkan solusi Python 2 byte 20-byte yang seharusnya jelas di belakang, sangat bagus!
negatif tujuh
19

CSS, 66 byte

body:after{content:"{}body:after{content:'body:after{content:}'}"}

"body:after{content:"{}body:after{content:'body:after{content:}'}"}"

Tidak banyak pertanyaan dapat diselesaikan dengan CSS ...

tsh
sumber
Sepertinya itu body:afterjuga berfungsi pada beberapa implementasi?
Shieru Asakoto
@ShieruAsakoto Anda benar. :aftertersedia di sebagian besar browser untuk alasan kompatibilitas ke belakang
tsh
@Shaggy Tapi sulit untuk mendefinisikan bagaimana "membungkus kode sumber Anda dengan tanda kutip" bekerja ketika HTML dan CSS disediakan.
tsh
@ tsh Tidak apa-apa - saya tidak menentukan beberapa file dalam aturan, karena saya tidak mengharapkan jawaban yang unik!
Geza Kerecsenyi
10

HQ9 + [lihat catatan di bawah] , 1016 byte

"Halo Dunia""""""""""""""""""""""""""""""""""""""""""""""" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """ "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""""""""""""Halo Dunia"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""""""""""""""""""""""Halo Dunia"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""""""""""""""""""""""Halo Dunia"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""Halo Dunia"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""Halo Dunia"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""Halo Dunia"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """""""""""""""Halo Dunia"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""""""""""""Halo Dunia"" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" """"""""""""""""""""""""""""""""""""""Halo Dunia"""""""""""""""""""""""""""""""""""Halo Dunia"""""""""""""""""""""""""""""""""""Halo Dunia

Gunakan implementasinya di https://esolangs.org/w/index.php?title=HQ9%2B&oldid=59995 dan kompilasi juru bahasa dengan MinGW GCC 5.3.0 di Windows. Saya tidak yakin apakah itu bekerja dengan versi kompiler lain, karena perilaku C yang tidak ditentukan diperlukan untuk menghentikan program. Panjang buffer adalah 1000 byte. Dan kode sumber lebih besar dari 1000 byte melakukan trik. Saya tidak yakin bagaimana ini terjadi.

tsh
sumber
7
Mungkin ini adalah jawaban HQ9 + terpanjang di situs ini. (?)
tsh
1
"perilaku C yang tidak terdefinisi diperlukan untuk mengakhiri program" Perilaku yang tidak terdefinisi tidak ditentukan : ia dapat melakukan apa saja.
Solomon Ucko
Menurut halaman 4 standar C18 : "Perilaku yang mungkin tidak terdefinisi mulai dari mengabaikan situasi sepenuhnya dengan hasil yang tidak terduga, hingga berperilaku selama penerjemahan atau pelaksanaan program dengan cara yang terdokumentasi, karakteristik lingkungan (dengan atau tanpa penerbitan pesan diagnostik) ), untuk mengakhiri terjemahan atau eksekusi (dengan penerbitan pesan diagnostik). "
Solomon Ucko
@SolomonUcko Tapi kami mendefinisikan bahasa dengan kompiler / penerjemahnya di situs ini. Dan jawabannya baik-baik saja selama setidaknya satu kompiler / juru bahasa dapat menghasilkan hasil yang benar.
tsh
9

05AB1E , 4 byte

"A"§

Output disatukan tanpa pemisah.

Cobalah online atau coba online dengan tanda kutip di sekitarnya .

Penjelasan:

        # Program without surrounding quotes will output string "A"
"A"     # Push "A" to the stack
   §    # Cast it to a string
        # (output the top of the stack implicitly as result)

        # Program with surrounding quotes will output string "§"
""      # Push an empty string to the stack
  A     # Push the alphabet to the stack: "abcdefghijklmnopqrstuvwxyz"
   "§"  # Push "§" to the stack
        # (output the top of the stack implicitly as result)
Kevin Cruijssen
sumber
Sayangnya, ini melanggar aturan # 2. Meskipun boleh saja memiliki beberapa tanda kutip kosong dalam kode Anda, harus ada setidaknya satu tanda kutip kosong dalam bentuk dikelilingi dan tidak dikelilingi.
Geza Kerecsenyi
@GezaKerecsenyi Ups, baca melewati bagian " dalam bentuk yang dikutip dan tidak dikutip ". Harus diperbaiki sekarang.
Kevin Cruijssen
6

Japt , 4 byte

"P"s

Cobalah kuotasi atau dikutip

Padalah variabel Japt untuk string kosong dan smetode mengiris string - tanpa argumen apa pun, tidak ada artinya.


Atau, yang sedikit kurang sepele:

"+"u

Cobalah kuotasi atau dikutip

Yang pertama huruf besar +dan yang kedua ditambahkan uke string kosong.

Shaggy
sumber
3
Perhatikan bahwa 4 adalah skor minimum untuk pertanyaan ini, karena kurang melanggar batasan.
Jo King
5

C # (Visual C # Interactive Compiler) , 113 112 107 70 64 byte

Write(".f();static void f(this string s){Write(s+')'+';');}//");

Disimpan 5 byte berkat @negatif tujuh

Tidak dikutip dan dikutip

Setelah beberapa saat, saya menyadari bahwa solusi saya terlalu rumit. Program terbaru yang ditampilkan di sini hanya menyembunyikan sisa program dalam komentar untuk menghindari kesalahan ketika dibungkus dengan tanda kutip.

Ketika dibungkus dengan tanda kutip, Write(diteruskan ke metode ekstensi, yang mencetaknya bersama );.

Perwujudan Ketidaktahuan
sumber
Split()-> Trim(), dan var a->_
negatif tujuh
1
@negativeseven Terima kasih, saya tidak akan pernah berpikir untuk menggunakan buangan!
Perwujudan Ketidaktahuan
1
@negativeseven Sebenarnya, solusi saya bahkan tidak perlu terlalu rumit, lihat edit terbaru saya
Perwujudan Ketidaktahuan
64 byte menggunakan metode ekstensi. Cukup terkejut ini berhasil dengan sangat baik!
Negatif tujuh
1
@negativeseven Terima kasih! Dan Anda memberi saya ide untuk bagian kedua dari tantangan: Saya menangkap bagian luar dalam sebuah variabel dan kemudian menggunakan Removedan Insertdi atasnya, sekarang saya bisa menggunakan metode ekstensi!
Perwujudan Ketidaktahuan
4

Perl 6 , 11 byte

say ".say~"

Cobalah online!

Mencetak .say~dengan baris baru yang tertinggal. Sepertinya terlalu mudah. Apakah saya melewatkan sesuatu?

Ketika dibungkus dengan tanda kutip , hasilkan saydengan spasi dan ikuti baris baru.

Jo King
sumber
2
Saya kira tidak. Hanya saja p6 katakanlah (ha) katakan $ foo dan $ foo.say yang membuatnya jauh lebih mudah.
user0721090601
4

Foo , 4 byte

"P"s

Cobalah online! Juga berfungsi di Japt.

5 byte (UTF-8)

"A"§

Cobalah online! Juga berfungsi di 05AB1E.

9 byte

"!""$;"$;

Cobalah online! Juga bekerja di Pesona Rise.

11 byte

say ".say~"

Cobalah online! Juga bekerja di Perl 6.

20 byte

print";print'print'"

Cobalah online! Juga berfungsi di Python 2.

69 byte

body::after{content:"{}body::after{content:'body::after{content:}'}"}

Cobalah online! Juga berfungsi di CSS.

Hmm ... Foo adalah bahasa yang sangat mudah beradaptasi.

jimmy23013
sumber
" Hmm ... Foo adalah bahasa yang sangat mudah beradaptasi. " Bagi siapa pun yang tidak tahu Foo: segala sesuatu dalam tanda kutip ganda adalah output dan segala sesuatu yang lain (kecuali untuk beberapa karakter bawaan lainnya) bukan pilihan. " Bahasa yang sempurna untuk pekerjaan itu " adalah pernyataan yang meremehkan di sini. ;)
Kevin Cruijssen
2
Jadi, pada dasarnya, lepas semua solusi lain untuk tantangan ini ?!
Shaggy
@ Shaggy Bahasanya adalah Foo. Hampir semuanya dengan setidaknya sepasang tanda kutip dan keduanya diharapkan menghasilkan karya yang tidak kosong di Foo dalam tantangan ini. Begitu "a"b 1"2"juga bekerja di Foo. Satu-satunya jawaban dalam tantangan ini yang bukan merupakan polyglot Foo sejauh ini adalah di HQ9 +, karena penerjemah Foo juga memiliki masalah meluap.
jimmy23013
4

> <> , 18 9 byte

"|o<"r>o|

-9 byte terima kasih kepada Jo King

Cobalah online! ( dikutip )

Penjelasan

"|o<"r>o|
"|o<"     Pushes the quoted characters onto the stack
     r    Reverses the stack
      >o| Outputs all characters on stack & errors
""|o<"r>o|"
""          No-op
  |         Reverses the IP direction
     "r>o|" Pushes the quoted characters onto the stack (backwards)
  |o<       Outputs all characters on stack & errors
tjjfvi
sumber
5
Selamat datang di Golf Code!
Stephen
@Stephen Terima kasih!
tjjfvi
2

Pesona Rise , 9 byte

"!""$;"$;

Cobalah online! dan""!""$;"$;"

Dari Kevin Cruijssen, yang pada dasarnya memperbaiki upaya pertama saya memanfaatkan apa yang saya lakukan pada yang kedua.

Menuruni "fungoid tidak pernah memiliki tanda kutip tak tertandingi" aturan-membungkuk "ada sesuatu tentang hal ini yang tidak boleh apa-apa" rute, disinggung dalam komentar saya sendiri:

7 byte

0".""$;

Cobalah online!dan"0".""$;"

Dalam keadaan normal, program ini dijalankan dengan 0".""$;0".""$;menekan bilangan bulat 0, kemudian string ., concatenate $;0, NOP, concatenates string kosong, mencetak top-of-stack (string .$;0) dan berakhir. Membungkusnya dalam tanda kutip menghasilkan "0".""$;"yang mendorong string- 0, NOP, menggabungkan string kosong, mencetak top-of-stack, dan berakhir (rendering bilangan bulat yang sebelumnya tidak dicetak 0dalam bentuk string). Yang terakhir" dibiarkan tidak dieksekusi (dan bukan bagian dari program aslinya ).

Fungoid tidak memiliki string literal, mereka memiliki perintah yang mengaktifkan mode "baca sumber sendiri sebagai string" dan beberapa bentuk "penunjuk instruksi telah mencapai aturan batas sumber" (biasanya tepi-bungkus), sehingga kode sumber yang sama -positional-byte bertindak sebagai instruksi "string awal" dan "string akhir", menciptakan string literal dari seluruh baris / kolom (tidak termasuk yang "itu sendiri).

Draco18s
sumber
Jawaban super cepat! Saya hanya ingin tahu apakah saya salah mengerti tentang kiriman Anda, tetapi bagi saya itu tidak mencetak $;di akhir dalam versi yang dikutip.
Geza Kerecsenyi
Saya menyadari bahwa setelah membaca kembali dan saya mencoba untuk mencari tahu apakah rahasia pernah dapat melakukan itu. Mulai untuk menyelidiki penawaran "tidak berpasangan" sekarang; eg "$;dan ""$;"(Runic wrap-around quotes berpasangan dengan diri mereka sendiri).
Draco18s
@GezaKerecsenyi Beri tahu saya jika program saya yang diperbarui melanggar aturan.
Draco18s
Umm .. Bagaimana ini valid? Program Anda tanpa output penawaran !.(mana yang benar), tetapi tidakkah program Anda menghasilkan output penawaran 0$;? PS: Saya tidak tahu Pesona Rise sama sekali, tetapi perbaikan potensial berdasarkan tata letak Anda saat ini yang saya pikir akan valid 0"!""$;"$;( output!$; apa adanya, atau output0$; jika dikelilingi dengan tanda kutip). EDIT: Sebenarnya, saya pikir Anda dapat drop 0dan output !$;dan $;.
Kevin Cruijssen
1
@KevinCruijssen $adalah "print top of stack" dan ;berakhir. Tetapi Anda pada dasarnya mendapat jawaban yang valid.
Draco18s
0

Japt , 4 byte

"P"u

Tanpa tanda kutip, ini mengubah string Pmenjadi huruf besar. Dikutip, itu dicetak u.

Cobalah

Japt , 4 byte

"P"w

Tanpa tanda kutip, itu membalik string P. Dikutip, itu dicetak w.

Cobalah

Perwujudan Ketidaktahuan
sumber
Ahem!
Shaggy
@Shaggy Solusi kami sedikit berbeda, ada banyak solusi berbeda untuk tantangan ini
Perwujudan Ketidaktahuan
Gunakan Qalih-alih P, ini lebih meta! ;)
Shaggy
0

R, 16 byte

 ";print(";");" 

Perhatikan bahwa kode di atas tidak dibungkus dengan tanda kutip tambahan dan memiliki spasi utama dan spasi tambahan.

Cobalah (versi tidak terbungkus)

James Otto
sumber
Anda mungkin ingin menambahkan catatan bahwa program yang ditautkan adalah versi yang tidak dibungkus.
Jonathan Frech
Saya juga akan menambahkan catatan tentang ruang depan dan belakang. Sebaliknya, sulit untuk memperhatikan mereka.
mbomb007
Diedit, terima kasih atas sarannya!
James Otto
0

AppleScript, 9 byte

return"&"

Dijelaskan:

return"&"    -- returns "&"

Dikutip:

"return"&""  -- implied return of the string "return" concatenated with ""
arakhnida batu
sumber