Keluarkan satu karakter acak untuk setiap karakter kode sumber (seperti yang diilustrasikan di bawah). Probabilitas setiap karakter adalah frekuensi dalam kode sumber asli. Dengan demikian output akan menjadi kode sumber palsu yang menyerupai quine.
Spesifikasi
- Batasan
- Batasan quine standar berlaku. Tidak ada program atau fungsi kosong. Juga tidak membaca sumber Anda sendiri.
- Keluaran
- Jumlah karakter yang dihasilkan harus persis jumlah karakter dalam kode sumber
- Setiap karakter keluaran harus dipilih secara acak
- Probabilitas memilih karakter apa pun sama dengan
(occurrences in source) / (length of source)
- Ini berarti bahwa bahkan solusi unary perlu 'secara acak' memilih 1dengan probabilitas
1
. Yang mengatakan bahwa output tidak dapat dikodekan dengan keras.
- Kemenangan
- Ini adalah kode golf, byte paling sedikit menang
Contoh
Program Frequency Probability Possible Output
------- --------- ----------- ---------------
a@!@ a - 1 a - 25% @@a@
! - 1 ! - 25%
@ - 2 @ - 50%
Program Frequency Probability Possible Output
------- --------- ----------- ---------------
caBaDBcDaBDB a - 3 a - 25% aaaBBBBccDDD
B - 4 B - 33%
c - 2 c - 17%
D - 3 D - 25%
Jawaban:
CJam , 14 byte
Cobalah online!
Penjelasan
Setiap karakter muncul tepat dua kali, sehingga probabilitas karakter harus sama.
sumber
Jelly , 13 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Perl, 59 byte
Saya menggunakan quine yang ada sebagai dasar dan memodifikasinya untuk mencetak karakter acak dari konten sumber.
Pemakaian
Simpan sebagai
faux-source-code.pl
dan jalankan menggunakan:Menghasilkan sesuatu seperti berikut:
Dalam tes singkat, ~ 3% dari hasil program
eval
berhasil. Saya tidak yakin apa yang dikatakan tentang Perl ...sumber
eval
! Yang bagus! ;-)'
atauq//
,q{}
dll)!Japt , 22 byte
Uji secara online!
Bagaimana itu bekerja
sumber
Pyth, 16 Bytes
coba online!
Berisi masing-masing char dua kali karena itu probabilitasnya sama seperti jika masing-masing hanya ada di sana sekali.
sumber
PHP,
71140110124140120 bytejalankan bersama
php -d
ord
(probabilitas yang sama seolah-olah saya akan menggandakan string dan menambahkan dua tanda kutip);
Mungkin bisa bermain golf lebih jauh, tetapi upaya saya di eval mana sia-sia sejauh ini.
Saya mungkin tidak akan masuk lebih dalam di sini.
sumber
The probability of each character is its frequency in the original source code.
Saya mungkin salah, tetapi sepertinya entri ini tidak memenuhi persyaratan ini.syntax error, unexpected '<'
. Tapi saya tidak terbiasa dengan PHP, bagaimana saya menguji ini?php
atauphp-cgi
tanpa flag. Mungkin Anda bisa menggunakan heredoc.<?
untuk digunakan bersama-d
.Python 2, 88 byte
Semua manfaat aktual dalam mencapai sejauh ini adalah mbomb007 - terima kasih atas bantuan Anda (dan petunjuk tentang backslash)
sumber
n
panjang karakter), Anda perlu mencetakn
karakter acak. Dimana probabilitas simbolc
yang dipilih sama dengan(number of times c occurs in your solution) / n
.exec("""s = 'from random import choice; print "".join([choice(s) for c in s])'; exec(s)""")
join
.s='''from random import*;print"".join(choice(s)for c in s+"s='';''exec s''")''';exec s
. Saya berharap saya memikirkan hal itu.Ruby, 47 byte
Ini didasarkan pada standar
eval
quine:Ini byte lebih panjang dari quine terpendek, tetapi biasanya pilihan yang lebih baik untuk quine umum, karena setiap perhitungan yang dilakukan pada string kode sumber tidak perlu diduplikasi. Sedangkan di quine biasa, setiap perhitungan tambahan harus masuk ke dalam dan di luar string utama, itu hanya diperlukan di dalam string utama untuk jenis quine ini.
Adapun apa kode sebenarnya: setelah mendapatkan string yang mewakili seluruh kode sumber, kami cukup memilih karakter acak (dengan memilih indeks acak) 47 kali dan mencetak setiap karakter secara terpisah.
sumber
Bahasa Wolfram / Mathematica, 109 Bytes
keluaran sampel:
Oh tanda kurung itu.
sumber
Jelly, 44 byte
Saya harap saya telah menafsirkan semua aturan dengan benar (saya tidak cukup yakin apa yang "membawa payload" hal yang di meta atau jika itu bahkan relevan dengan tantangan ini).
Uji di TryItOnline
Ini membangun string untuk memilih karakter. String awal memiliki semua karakter yang digunakan kecuali tanda kutip buka dan tutup. Kemudian menggandakan string itu dan merangkai salah satu dari masing-masing kutipan buka dan tutup dari ordinals (maka kebutuhan untuk menggandakan karakter lain). Terakhir itu berulang kali memilih karakter acak dari string yang dikomposisikan ke panjang program.
sumber
Pyke, 35 byte
Coba di sini!
Untuk memeriksa: hapus final
H
dan string yang dihasilkan berisi jumlah yang tepat dari setiap karakter (dengan tambahanH
)Ini TIDAK menggunakan quine umum atau bahkan quine sama sekali. Itu bergantung pada mampu membuat string yang berisi semua karakter di sumber. Ini harus dapat melakukannya untuk kode apapun tetapi masing-masing karakter logaritmik meningkatkan ukuran kode. Satu-satunya frekuensi karakter yang diizinkan dalam sumber adalah 2 atau 7
sumber
Ruby,
8167 byteMenyelamatkan banyak byte dengan mencuri beberapa trik dari solusi Martin
Saya tidak menyadari bahwa Anda harus memilih secara acak setiap waktu; Saya pikir shuffle akan melakukan trik. Ini mungkin bisa golf, tapi itu yang terpendek yang bisa saya dapatkan.
Quine Ruby standar dengan beberapa modifikasi sehingga mencetak string yang dikocok. Aku sedih karena butuh lima belas menit untuk mencari tahu format pemformatan sebelum aku sadar bahwa aku secara tidak sadar mencuri itu.
Saya pikir pengocokan tali dapat diperpendek tetapi saya tidak tahu caranya; Saya juga mungkin bisa mengubah format menjadi lebih pendek setelah saya memikirkannya. Bantuan akan dihargai.
Cobalah online!
sumber
64.times{$><<"64.times{$><<.inspect[rand 32]}".inspect[rand 32]}
eval r="47.times{$><<('eval r=%p'%r)[rand 47]}"
C, 125 byte
C, 60 byte untuk golf tetapi tidak mengambil kode quine string
Sedangkan untuk menghitung karakter, solusi saya membutuhkan 86:
sumber
f
mengambil string dan mencetak ke output standar: string dapat berupa urutan karakter apa pun.rand()%LENGTH_OF_STRING
mengambil karakter sesuai dengan probabilitas karakter tersebut dengan distribusi normal yang disediakan olehrand()
. Mungkin, saya tidak mengertiquine
pendekatan untuk C ....s
hanya perlu mengandungchar*s="";
. Saya pikir sesuatu seperti inichar*s="char*s=l,i;f(){l=i=strlen(s);while(i--)putchar(s[rand()%l]);};+''"+'""'
akan melakukannya (tetapi saya tidak terbiasa dengan C).JavaScript, 128 byte
Catatan: hanya berfungsi di Firefox karena penggunaan
uneval
.Sampel berjalan:
sumber
gtraoan
yang hampir mengerang kurasa ..."
ada kemungkinan muncul?Python 3,
134132 byteSaya menggunakan setiap karakter dalam kode sumber saya dalam string beberapa kali dengan benar, kemudian mengalikan string dengan dua untuk memasukkan dirinya sendiri. Program ini mencetak karakter acak dari string itu untuk setiap karakter dalam kode (panjangnya adalah hard-coded.)
Cobalah online
Saya menghindari serangan balik seperti wabah. Segera setelah kode berisi
\n
atau\"
, Anda memiliki masalah, karena string belum mengandung garis miring terbalik, jadi Anda harus menambahkannya juga, tetapi dalam string terpisah dikalikan dengan angka yang lebih tinggi, karena dibutuhkan dua garis miring terbalik untuk mewakili satu (\\
).Contoh output:
Harus saya katakan, ini mengingatkan saya pada FlogScript.
sumber
PowerShell v2 +, 175 byte
Quines di PowerShell mengisap, karena pembatas string pengganti
{}
juga loop masing menunjukkan dan yang lainnya, sehingga Anda perlu menggunakan banyak darichar
s di-f
operator, yang bloats kode.Mirip-ish dengan jawaban Quine on Every Line saya . Pada dasarnya kita loop dari
0
ke174
dan setiap iterasi menghitung ulang quine$d
, melemparkannya sebagaichar
-array, dan mengeluarkanRandom
elemen yang dipilih secara seragam dari input. Menurut definisi, ini memberikan probabilitas(occurrences in source) / (length of source)
sesuai kebutuhan. Karakter-karakter tersebut dienkapsulasi dalam parens dan-join
disatukan kembali menjadi string.Contoh
(Ya, itu adalah baris baru dalam output - ketika string yang mengandung baris baru adalah
char
-array'd,`n
diperlakukan sebagai karakter, karenachar
-array hanya array kode byte, sehingga juga memiliki 1/175 kemungkinan terpilih.)sumber
Dyalog APL , 20 byte
f←{
...}
tentukan f sebagai(,⎕CR'f')
listified (,
) C haracter (table) R epresentation (⎕CR
) of f ('f'
)[?⍴⍨20]
diindeks dengan ([
...]
) random-up-to (?
) repeat-itself-times (⍴⍨
) sebanyak dua puluhMari kita jalankan (dengan argumen dummy) beberapa kali:
Baik, tetapi apakah distribusinya benar? Mari kita jalankan di 10.000 argumen dummy dan lihat berapa kali setiap karakter muncul:
Jelas,
f
dan'
terjadi dua kali lebih sering dari karakter lain, sama seperti dalam kode sumber asli.Bagaimana kami melakukannya?
⍳1E4
menghasilkan 10.000 bilangan bulat pertamaf¨
berjalan f pada masing-masing angka-angka itu∊
meratakan semua pseudo-quines menjadi string 200.000 karakter tunggal⌸
adalah fungsi tingkat tinggi yang untuk setiap karakter unik di data sisi kanan, mengumpankan fungsi sisi kiri elemen unik sebagai argumen kiri dan indeks di mana karakter tersebut muncul sebagai argumen kanan. Fungsi sisi kiri adalah⍺
argumen-kiri, yaitu karakter unik,
diikuti oleh1E¯4×
1 × 10⁻⁴ kali⍴⍵
bentuk argumen-kanan (indeks kemunculan), yaitu berapa kali itu terjadiAkhirnya,
⌸
letakkan semuanya dalam sebuah tabel.sumber
C #,
277280268 byte.Tidak Disatukan:
Cukup yakin ini berfungsi dengan benar.
Output sampel:
sumber
(new Random()).Next(0,134)]
bekerja? Ini akan menghemat beberapa byte.C, 136 byte
Contoh output:
Program ini menghasilkan 136 karakter secara acak.
Seluruh kode sumber (kurang "tanda kutip) terkandung dalam sebuah string. Program ini menentukan probabilitas mengeluarkan tanda kutip sebagai 2/136, jika tidak, mengeluarkan salah satu dari 67 karakter lainnya secara acak.
Ada dua kemunculan setiap karakter dalam string dalam program. Probabilitas mengeluarkan karakter dari string adalah 134/136. Probabilitas memilih karakter tertentu dalam string adalah 1/67. Jadi peluang menghasilkan karakter dalam string adalah 134/136 * 1/67 = 2/136. Ada dua kemunculan setiap karakter string dalam program, sehingga ada 1/136 probabilitas menghasilkan karakter untuk setiap kemunculan dalam program.
Urutan simbol di dalam string tidak masalah.
sumber