Tugas
Dalam tantangan ini, tugas Anda adalah menulis beberapa kode yang menampilkan salah satu anagram yang dipilih secara acak dengan distribusi yang seragam tetapi tidak boleh menampilkan sendiri.
Elaborasi
Diberikan tanpa input, program Anda harus menampilkan salah satu anagram kode sumbernya. Program Anda seharusnya tidak pernah mengeluarkan sumbernya sendiri, seperti seharusnya tidak menjadi quine.
Memasukkan
Program Anda tidak boleh mengambil input apa pun. Namun, jika bahasa Anda memerlukan input sebagai kebutuhan, Anda dapat menganggap bahwa itu akan diberikan huruf kecil a
. Anda tidak harus menggunakan input dengan cara apa pun.
Keluaran
Program Anda dapat menampilkan dengan cara apa pun kecuali menulisnya ke variabel. Menulis ke file, konsol, layar, dll. Diperbolehkan. Fungsinya return
juga diizinkan.
Aturan tambahan
Kode sumber program Anda harus memiliki setidaknya 3 karakter (bukan 3 byte).
Kode sumber program Anda harus memiliki setidaknya 3 anagram yang mungkin (tidak termasuk dirinya sendiri). Misalnya,
aab
tidak dihitung sebagai pengiriman yang valid karenaaab
hanya memiliki dua anagram selainaab
(baa
danaba
).Program Anda tidak boleh menghasilkan kesalahan.
Program Anda harus menampilkan anagramnya dengan tepat .
Standar Celah dan aturan Quine standar berlaku.
Contoh
Misalkan kode sumber program Anda abc
. Ini harus secara acak menampilkan salah satu dari yang berikut (dengan distribusi seragam):
acb
bca
bac
cba
cab
Dan, seharusnya tidak pernah keluar abc
.
Kriteria Kemenangan
Ini adalah kode-golf , jadi kode terpendek dalam byte menang! Dalam hal seri, solusi yang diposting sebelumnya menang!
sumber
Jawaban:
Jelly , 15 byte
Hanya untuk memulai sesuatu; ini hampir pasti bisa dikalahkan. Ini pada dasarnya hanyalah kombinasi dari konstruktor quine universal dan fungsi "pilih permutasi acak selain input"; yang terakhir mungkin bisa diperbaiki, yang pertama hampir pasti.
Penjelasan
Konstruktor quine universal
Ini bisa dilihat sebagai quine jika dijalankan dengan sendirinya. Ini juga quine yang tepat oleh sebagian besar definisi yang saya tahu; itu tidak membaca sumbernya sendiri (melainkan mengandung literal yang "eval" ed, dan diberi salinan dirinya sebagai argumen), ia dapat membawa muatan (seperti terlihat di sini!), dan bagian
v
luar string literal dikodekan oleh bagianv
dalam.Pilih anagram acak
Ini benar-benar tidak efisien pada string selama ini, jadi saya belum bisa menguji program secara keseluruhan, tapi saya sudah mengujinya pada string yang lebih pendek dan tampaknya berfungsi dengan benar.
sumber
Q
. Namun saya pikir Anda dapat mengubah ini metode "semua permutasi" dengan sebuah "mengocok" satu menggunakanẊ⁼¿
, menyimpan byte sementara juga memungkinkan untuk bekerja pada TIO.CJam , 17 byte
Ini tidak akan selesai dalam waktu dekat, jadi tidak ada tautan TIO kali ini.
Sebagai pelipur lara, berikut adalah solusi 20 byte yang benar-benar berakhir dengan cepat:
Cobalah online!
Penjelasan
Solusi 20 byte malah mengacak kode sumber hingga berbeda dari aslinya.
sumber
Python 2, 117 byte
Anehnya solusi ini lebih pendek dari yang saya harapkan. Mengacak kode sumber, hingga berbeda dari aslinya.
-2 byte, terima kasih kepada @ mbomb007
-3 byte, terima kasih kepada @Wondercricket
Cobalah online
Ini adalah salah satu quines dasar dalam python, yang telah saya modifikasi
Pembuatan anagram dilakukan dengan modul acak
Di mana R berisi kode sumber
Diperlukan tiga kutipan karena saya dipaksa untuk menyimpan baris-baris yang sebenarnya dalam kode. Lagipula, anagram akan memiliki 3 baris.
sumber
exec s
bukannyaexec(s)
str
kekal, Anda dapat menyimpan byte dengan melakukanL=R
dan menggunakansample
padaL
daripada menggunakanshuffle
padalist
. repl.it . Idenya diambil dari Stackoverflow iniJava 7,
376428426428 byte+52 dan +2 byte untuk dua perbaikan bug .. Saya tidak memeriksa (dengan benar) apakah String yang dihasilkan secara acak sama dengan kode sumber asli. Kemungkinan ini kecil sekali mengingat jumlah karakter yang terlibat, tetapi saya harus memvalidasinya terlepas dari mematuhi aturan tantangan.
Jawaban quine pertama saya di Jawa ..
Coba di sini.
Anda dapat menghapus keduanya
Collections.shuffle(l)
dan menambahkan!
di depan keduanyax.equals(s)
untuk memverifikasi bahwa output memang sama dengan program:Coba di sini.
Penjelasan:
String s
berisi kode sumber yang tidak diformat.%s
digunakan untuk memasukkan String ini ke dalam dirinya sendiri dengans.format(...)
.%c
,%1$c
dan34
digunakan untuk memformat tanda kutip ganda.s.format(s,34,s)
menempatkan semuanya bersama-samaDan bagian kode ini bertanggung jawab untuk mengeluarkan anagram acak:
sumber
05AB1E , 22 byte
Ini membuat daftar yang terlalu besar untuk TIO, jadi tautannya menggunakan string yang lebih kecil, tetapi idenya sama.
Cobalah online!
sumber
Javascript (ES6), 128 byte
Menggunakan sort () mengembalikan acak -1,0, atau 1 untuk mengocok output.
sumber
Bash,
2796 bytefold
membagi kode dalam garis,shuf
mengacak garis, dantr
menyatukan kembali kodememperbaiki masalah itu sendiri, sekarang tidak akan pernah keluar sendiri
Cobalah secara Online!
sumber
$0
tampak seperti pelanggaran "Program Anda tidak boleh mengambil input apa pun."