Dalam pertanyaan ini saya meminta Anda untuk menebak quine anagram berdasarkan outputnya. Namun sepertinya kami belum memiliki pertanyaan untuk golf anine quine. Jadi tugas Anda adalah membuat anagram terpendek yang Anda bisa.
Apa itu anagram quine?
Anagram quine adalah program yang tidak kosong yang mencetak anagram dari kode sumbernya, selain dari sumber aslinya.
Berikut adalah contoh quine anagram dengan Python 2:
print`'`print`*2'*2`
Anda seharusnya tidak membaca sumber Anda sendiri untuk tantangan ini.
code-golf
quine
permutations
Wisaya Gandum
sumber
sumber
Jawaban:
Pyth , 2 byte
Keluaran
Cobalah online!
sumber
()
quine jauh lebih pendek daripada yang terkenaljN*2]"jN*2]
?V , 4 byte
Output:
Cobalah online!
sumber
i2
?2 -> do the next thing twice
i -> insert the following
> <> ,
987 byteGolf 1 byte berkat @WheatWizard dengan menggunakan
!
dan menambahkannya untuk mendapatkannya"
Golf 1 byte berkat @ ConorO'Brien dengan menggunakan
#
bukan<!
Cobalah online!
Keluaran
"#o>-1:
.Penjelasan
sumber
":1+>o<!
sedikit lebih pendek.":1->o#
Brainfuck, 158 byte
Cobalah online!
Ini mungkin bukan versi terpendek, tetapi setidaknya itu berfungsi.
Fakta yang menyenangkan , kode output sebenarnya dapat dieksekusi (dan itu tidak berakhir).
Keluaran
Penjelasan
sumber
Python 3, 32 byte
p"r"i"n"t"2(")*p"r"i"n"t"2(")*\n
Hasil cetak , diurutkan:\n""""""""""""(())**22iinnpprrtt
sumber
Ruby , 8 byte
Cobalah online!
Ini mencetak
Penjelasan
Ini berfungsi mirip dengan jawaban python dalam pertanyaan. Ini akan membuat string
p*2p*2
kemudian menggunakan Rubyp
akan mencetak representasi dari string.sumber
p
bukanputs
?! Begitu banyak waktu yang terbuang ...p x
setara denganputs x.inspect
JavaScript (ES6),
4032 byteTidak main-main dengan Function.toString juga. Sebagai bonus, kode di dalam string hampir terlihat legal. Sunting: Disimpan 8 byte dengan menggunakan
+
alih-alihrepeat(2)
.sumber
*2
bukan.repeat(2)
, apakah itu tidak bekerja?*
stringKlein , 7 + 6 = 13 byte
Inilah jawaban berdasarkan >> jawaban .
Cobalah online!
Ini output
sumber
Japt ,
109 byteMenemukan cara yang lebih baik :-)
Keluaran
"Q+2çQ+2ç
.Uji secara online!Penjelasan
Bisa juga
Qi2ç"Qi2ç
, yang dicetakQi2çQi2ç"
. Yang ini lebih dekat ke standar Japt quine:Tapi saya tidak percaya ada cara mudah untuk memotong tanda kutip di tengah string untuk quine 9-byte.
sumber
Q+"+Q² " ²
Ruby, 20 byte
Ini output
Mengambil keuntungan dari
%q(...)
sintaks string Ruby , yang mendukung tanda kurung bersarang.sumber
Retina , 8 byte
Cobalah online!
Cetakan
Keduanya mengandung satu
_
, duan
, dua$
dan tiga umpan baris.Perhatikan bahwa linefeed yang diikuti oleh hampir semua karakter lain adalah solusi sepele, tetapi dipertanyakan apakah itu valid, karena karakter kedua hanya mengkodekan dirinya sendiri dan linefeed tidak benar-benar menyandikan salah satu karakter output.
Penjelasan
Ganti input kosong dengan a
_
.Cocokkan string kosong, yang terjadi sebelum atau sesudah
_
dan masukkan baris baris ($n
), ann
, dan a$
. Sejak pertama kali kami menyisipkan itu_
, ini menambahkan masing-masing karakter tersebut dua kali, jadin
dan$
akun untuk$n
, dan kita mendapatkan dua dari tiga baris baris yang kita butuhkan dalam output. Linefeed ketiga dicetak karena Retina mencetak linefeed trailing secara default.Kita juga bisa menggunakan
n$n$
pada tahap ini, yang kemudian akan mencetak:sumber
Python Repl, 4 byte
Ini adalah solusi Code Golf pertama saya, jadi saya harap ini memenuhi aturan. Dalam interpreter interaktif Python 2 atau 3:
Outputnya adalah anagram input.
Lain:
Dengan Python 2:
Dengan Python 3:
Pembaruan 2017-06-15: Satu lagi:
sumber
Haskell ,
3839 byteCobalah online! Keluaran:
Sunting: +1 byte karena saya sebelumnya lupa tentang baris baru trailing implisit dari
print
.Alternatif: (Jumlah byte yang sama tetapi tidak mengandung ASCII-owl)
Cobalah online!
Keluaran:
sumber
Groovy,
2420 byte-4 Berkat CalculatorFeline, spasi putih tidak diperlukan sama sekali!
Keluaran:
Penjelasan:
Penutupan anonim yang, ketika dipanggil, kembali
{""*""2""}
dua kali (bersambung).sumber
*2
bantalan sebagai di antara tanda kutip:{"""{""*""2""}"""*2}
05AB1E , 10 byte
Cobalah online!
Keluaran:
Penjelasan:
sumber
CJam , 6 byte
Cobalah online!
Cetakan
Penjelasan
sumber
Bash, 36 byte
Ini output
(dan membuat file
f
sebagai efek samping, tapi itu diperbolehkan per meta .)Baik program dan output memiliki baris baru.
Proses pemikiran: Saya pikir cara termudah untuk mengeluarkan string dua kali, selain menetapkannya ke variabel, adalah dengan melakukan
String perlu dikutip karena akan berisi spasi dan
<
karakter, jadi aku punyayang hampir berhasil, kecuali itu tidak menampilkan tanda kutip. Untungnya, Bash mendukung penggabungan string literal dengan hanya menempatkannya di sebelah satu sama lain, jadi menambahkan
"''"
ke herestring dan memasukkan""
ke dalam bagian kutipan tunggal menghasilkan solusi ini.sumber
PHP , 44 byte
Cobalah online!
sumber
CJam , 8 byte
Cobalah online!
Penjelasan
Mirip dengan contoh Python dalam pertanyaan
Outputnya adalah
"2*`2*`"
.sumber
Befunge, 11 byte
Cetakan:
Penjelasan:
sumber
"
. Apa batasan tepatnya itu?"
dianggap membaca sumber sendiri, itu hanya string literal.g
Namun cukup terang-terangan membaca sumbernya sendiri.":1+>:#,_@!
juga berfungsi tetapi tidak lebih pendek.' 2+"8k,@
untuk 9 byteQBIC , 8 byte
Saya baru tahu cara melakukan quine yang tepat di QBIC. Membuat anagram dari itu dilakukan dengan hanya beralih di sekitar karakter dalam string literal. Ada 24 anagram yang mungkin dengan cara ini.
sumber
Befunge-98 , 8 byte
Cobalah online!
sumber
Ohm , 14 byte
Cobalah online!
Keluaran:
Penjelasan
sumber
JavaScript (ES6), 15 byte
Output:
Potongan:
Tampilkan cuplikan kode
sumber
Fisi 2 ,
9 86 byteCobalah online!
Penjelasan
Sebuah atom diciptakan di
R
, yang bergerak ke kanan. Atom ini kemudian menemukan a"
, yang memulai mode pencetakan. Dalam mode pencetakan, semua karakter (hingga pencocokan"
) dicetak. Ini berarti ia mencetak'!+OR
dalam kasus ini. Kemudian, semua yang tersisa adalah pencetakan"
, yang dilakukan oleh karakter yang tersisa.'!
menetapkan massa atom ke kode karakter!
, dan+
menambahkannya ke kode karakter"
. Kemudian, kode karakter dihasilkan olehO
dan atom dihancurkan, mengakhiri program.(Sebenarnya, ini hanyalah rotasi dari quine terpendek)
sumber
R"'!+O
, belum diuji).Mathematica, 2 byte
Keluaran:
Angka yang dimulai dengan titik desimal seperti
.123
ditafsirkan0.123
, sehingga.0
ditafsirkan sebagai0.0
. Karena bagian dari angka setelah titik desimal adalah nol, Mathematica tidak mencetaknya.sumber
.
itu sendiri, tapi saya rasa0
tidak? Angka 0 di luar titik desimal tidak dapat secara waras dilihat sebagai penyandian nol awal sebelum titik desimal, yang terakhir adalah efek samping dari pencetakan pelampung. Jadi di bawah aturan quine lama, tidak ada masalah di sini. (Saya tidak yakin apakah aturan baru ini sudah berlaku.)JavaScript (satu lagi), 11 byte
Dipanggil dengan
f()
, keluaranTampilkan cuplikan kode
sumber
Python 3, 31 byte
sumber
Stax ,
84 byteJalankan dan debug online!
Port langsung dari jawaban ini .
Versi lama, 8 byte
Jalankan dan debug online!
Versi alternatif dengan trik yang cukup murah yang dapat diterapkan ke quines yang tepat di hampir semua bahasa.
Jalankan dan debug online!
Karena
"34bL"34bL
merupakan quine yang tepat di Stax.Namun versi lain, hanya menggunakan string string single-char.
Jalankan dan debug online!
Penjelasan
sumber
05AB1E , 13 byte
Output:
Cobalah online!
sumber