function answersUrl(a){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(a,b){return"https://api.stackexchange.com/2.2/answers/"+b.join(";")+"/comments?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(a){answers.push.apply(answers,a.items),answers_hash=[],answer_ids=[],a.items.forEach(function(a){a.comments=[];var b=+a.share_link.match(/\d+/);answer_ids.push(b),answers_hash[b]=a}),a.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(a){a.items.forEach(function(a){a.owner.user_id===OVERRIDE_USER&&answers_hash[a.post_id].comments.push(a)}),a.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(a){return a.owner.display_name}function process(){var a=[];answers.forEach(function(b){var c=b.body;b.comments.forEach(function(a){OVERRIDE_REG.test(a.body)&&(c="<h1>"+a.body.replace(OVERRIDE_REG,"")+"</h1>")});var d=c.match(SCORE_REG);d?a.push({user:getAuthorName(b),size:+d[2],language:d[1],link:b.share_link}):console.log(c)}),a.sort(function(a,b){var c=a.size,d=b.size;return c-d});var b={},c=1,d=null,e=1;a.forEach(function(a){a.size!=d&&(e=c),d=a.size,++c;var f=jQuery("#answer-template").html();f=f.replace("{{PLACE}}",e+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link),f=jQuery(f),jQuery("#answers").append(f);var g=a.language;g=jQuery("<a>"+g+"</a>").text(),b[g]=b[g]||{lang:a.language,lang_raw:g,user:a.user,size:a.size,link:a.link}});var f=[];for(var g in b)b.hasOwnProperty(g)&&f.push(b[g]);f.sort(function(a,b){return a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase()?1:a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase()?-1:0});for(var h=0;h<f.length;++h){var i=jQuery("#language-template").html(),g=f[h];i=i.replace("{{LANGUAGE}}",g.lang).replace("{{NAME}}",g.user).replace("{{SIZE}}",g.size).replace("{{LINK}}",g.link),i=jQuery(i),jQuery("#languages").append(i)}}var QUESTION_ID=101638,ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",OVERRIDE_USER=34718,answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:400px;float:left}table thead{font-weight:800}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"><div id="language-list"> <h2>Shortest Solution by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table></div><div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table></div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table><table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table>
Jawaban:
WinDbg, 1 byte
Wow! Tidak pernah mengharapkan solusi 1 byte dari WinDbg!
#
mencari pola pembongkaran, tetapi karena tidak ada parameter, sepertinya hanya mengembalikan instruksi perakitan berikutnya dalam dump / proses apa pun yang Anda lampirkan. Tidak yakin logika pengaturan alamat awal, tetapi itu benar.Output sampel:
sumber
Java 7,
333027 byteKarena jawa
sumber
toString
di versi sebelumnya tapi kemudian tipe kembalinyaString
lebih panjang dariint
. Simpan byte! :]hashCode()
adalah singkatan di sinithis.hashCode()
, jadi itu hanya berfungsi sebagai metode instance, bukan metode statis. Dalam hal ini, Anda memerlukan kode tambahan untuk membuat objek di pemanggil. Itu relevan di sini karena itu adalah kode untuk membuat objek yang bertanggung jawab atas nondeterminisme.()->hashCode()
selama 14 byte. Katakan saja;)MATLAB, 3 byte
why
memberikan jawaban untuk hampir semua pertanyaan. Beberapa contoh:Ini lebih pendek dari
rand
fungsi apa pun yang dapat saya pikirkan.sumber
R, 1 byte
Output kode sumber fungsi dan alamat penunjuk memori yang berubah dengan setiap (kembali) awal R.
sumber
Hah? , 0 byte
Program kosong masih menghasilkan output. Baris terakhir dari juru bahasa Python yang dieksekusi:
Pada akhir program, juru bahasa Python akan mencetak
...
, maka itu akan membuat / membuka file teks yang disebutNotes.txt
dan menulis string yang berisi waktu saat ini di depan.sumber
Labirin , 5 byte
Baik cetak
0
atau tidak sama sekali (masing-masing 50%).Cobalah online!
Ada kasus yang sangat spesifik di mana Labyrinth menunjukkan perilaku acak:
Jika semua kondisi tersebut terpenuhi, arah IP bergerak dipilih (seragam) secara acak. Ceri di atas adalah bahwa ketiga kondisi tersebut tidak mungkin dipenuhi dalam aliran kontrol reguler, yang berarti kecuali Anda memodifikasi kode sumber saat runtime.
(Ini mungkin tampak agak sewenang-wenang, tapi itu sebenarnya perilaku paling konsisten yang bisa saya temukan untuk kondisi ini, karena biasanya arah IP selalu tergantung pada arah sebelumnya, tetangga-tetangganya, dan tanda bagian atas tumpukan, dan ini sepertinya cara yang elegan untuk memasukkan sumber keacakan dalam bahasa.)
Dengan bantuan instruksi rotasi kode sumber (
<^>v
) dimungkinkan untuk membawa IP ke dalam situasi ini. Salah satu contohnya terlihat di atas. IP awalnya menunjuk ke timur dan mulai di atas. Thev
berputar kolom saat ini sehingga kita mendapatkan:IP bergerak bersama dengan rotasi ini sehingga masih berada di
v
, menunjuk ke timur. Semua kondisi terpenuhi sekarang, sehingga IP akan naik atau turun secara acak. Jika naik, program akan segera berakhir. Jika turun, ia mencetak nol, memutar kolom lagi, dan kemudian berakhir.Ada tiga program lain yang memanfaatkan ini (satu yang juga mencetak
0
, satu yang mencetak00
dan satu yang mencetak000
):(Sebenarnya ada lebih banyak dari tiga program lain, karena Anda juga dapat menggunakan
.
alih-alih!
mencetak nol byte, atau menggantinya"
dengan berbagai macam perintah, tetapi saya yakin semuanya bekerja pada dasarnya sama.)sumber
Befunge (-93 dan -98), 3 byte
The
?
mengirimkan eksekusi dalam arah acak. Jika naik atau turun, itu kembali ke loop?
dan rerolls. Jika dibiarkan ke kiri, program membungkus ke@
dan dengan demikian keluar tanpa mencetak apa pun. Jika berjalan dengan benar, ia mencetak0
(output yang dihasilkan oleh.
ketika tumpukan kosong) dan kemudian keluar pada@
.sumber
.
dalam program yang saya gunakan untuk pengujian, tetapi entah bagaimana menjadi,
ketika saya menyalinnya ke PPCG. Tetap.Minecraft,
54 byteDigunakan dengan mengetik ke konsol server atau blok perintah dan memberikannya kekuatan. Dapat dijalankan dari antarmuka obrolan dengan menambahkan a
/
.Biasanya ini tidak apa-apa, tetapi jika ada pemain dengan nama pengguna "8" di server, mereka akan diberikan izin operator. Perhatikan bahwa sementara Minecraft biasanya membutuhkan nama pengguna sepanjang 3 karakter, beberapa akun dengan panjang nama yang lebih pendek dibuat sebelum pembatasan ini.
Versi yang dapat ditunjukkan sebagai non-deterministik tanpa salah satu nama pengguna ini atau risiko memberikan izin operator pengguna ada di sini:
Menampilkan pesan untuk semua orang, pesan tersebut menjadi nama pengguna pemain acak. Itu
op
perintah saja mengambil string literal, tidak ada script yang mengembalikan sebuah string.The
me
perintah tidak akan benar-benar bekerja untuk contoh pertama, itu akan menampilkan"<your-username> 8"
. Saat dijalankan dari blok perintah, itu tidak akan bersifat deterministik karena semua blok perintah memiliki "nama pengguna" yang sama tetapi menjalankannya dari antarmuka obrolan akan memerlukan/
satu byte tambahan.sumber
/
tidak termasuk dalam hitungan byte?help
dalam blok perintah, yaitu 4 byte (dan tidak memerlukan game bajakan).sh + procps, 1 byte
Ini adalah solusi terpendek yang saya ketahui yang berfungsi melalui pemanggilan ke executable eksternal.
procps
adalah paket yang bertanggung jawab untuk melaporkan informasi tentang keadaan sistem saat ini (ps
dan teman-teman), dan diinstal pada sebagian besar distribusi Linux secara default;w
adalah perintah dengan nama terpendek di dalamnya, dan mengembalikan informasi tentang pengguna yang masuk, tetapi juga beberapa informasi nondeterministik seperti waktu aktif.sumber
Menginformasikan 7, 6 byte
Ini bukan program Inform 7 yang valid, karena "x" atau "y" belum didefinisikan. Jadi ini melempar kesalahan.
Namun, beberapa pesan kesalahan Inform 7 — termasuk yang ini — diacak. Jadi teks yang dicetaknya secara teknis non-deterministik.
Beberapa kemungkinan keluaran meliputi:
sumber
JavaScript, 4 byte
Fungsi yang mengembalikan tanggal / waktu saat ini. Saya pikir ini adalah yang terpendek yang akan ...
Penjelasan
Karena ini tampaknya menyebabkan banyak kebingungan mengapa itu valid, saya akan mencoba menjelaskan.
Dalam JavaScript, entri fungsi valid jika dapat ditetapkan ke variabel dan disebut seperti fungsi. Misalnya, fungsi ini adalah entri yang valid:
Karena itu adalah fungsi yang dapat ditugaskan ke variabel seperti:
Dan kemudian jalankan dengan
f()
sebanyak yang diperlukan. Setiap kali, ia mengembalikan string tanggal / waktu saat ini, yang telah dikuasai non-deterministik oleh OP.Fungsi panah ES6 ini juga valid:
Itu dapat ditugaskan dengan
f=_=>Date()
, lalu jalankan denganf()
seperti yang lain.Sekarang, inilah entri lain yang valid:
Mengapa? Karena sama seperti dua entri lainnya, ia dapat ditugaskan dengan
f=Date
dan kemudian dipanggil denganf()
, mengembalikan hal yang persis sama dengan dua entri lainnya. Cobalah:Tampilkan cuplikan kode
sumber
Date()
untuk memanggil fungsi?Date
adalah fungsi yang, ketika dipanggil tanpa input, menghasilkan tanggal / waktu saat ini._=>Date()
adalah entri yang jelas valid yang melakukan hal yang persis sama, begituDate
juga entri yang valid.Date
untuk konsol JavaScript browser saya menghasilkan output deterministik, selalu menghasilkan ini:function Date() { [native code] }
. Anda mungkin berartiDate()
, 6 byte.Bash (procps-ng), 2 byte
$$
juga merupakan solusi.sumber
w
lebih pendek dan juga berasal dari procps.Python 2, 11 byte
sumber
id(0)
. :)Pyth, 2 byte
Penjelasan:
Itu bahwa, ketika
O
memiliki0
sebagai argumennya, itu hanya mengembalikan float acak antara0
dan1
, eksklusif.Mari kita lakukan hanya untuk itu!
Juga, tampaknya ini bisa agak retro (terima kasih kepada 34718 / mbomb007):
Pyth, 2 byte
Penjelasan:
Coba versi boooooooooooooooring ini sebagai gantinya
>:(
sumber
PowerShell,
42 byte(dicoret 4 masih terlihat seperti 4 )
Ini adalah alias untuk
Get-Process
yang akan menampilkan daftar proses saat ini sebagai tabel, termasuk pegangan, memori pribadi, waktu CPU, dll.Jalankan melalui sesuatu seperti berikut:
sumber
Zsh, 5 byte
Mencetak PID.
sumber
Commodore 64 Basic, 4 byte
Substitusi PETSCII:
|
=SHIFT+Y
Itu halaman nol dari Commodore 64 adalah area dari 256 byte memori yang dapat diakses lebih cepat dari sisa RAM. Akibatnya, program (seperti penerjemah BASIC) menggunakannya untuk data yang sering diakses, dan CPU sendiri menyimpan beberapa keadaan internalnya di sini. Konten dapat berubah tanpa pemberitahuan.
Program BASIC di atas, ungolfed, adalah
1 SYS 0
, yaitu. transfer eksekusi ke lokasi memori 0. Ini mulai menjalankan halaman nol sebagai kode. Biasanya, ketika penerjemah BASIC mulai menjalankan program, 16 byte pertama adalahjadi
SYS 0
akan menjalankan yang berikut iniHasil keseluruhan adalah untuk output BASIC
READY.
prompt dan mengembalikan kontrol kepada pengguna. Namun, lokasi memori 0x00 adalah register arah I / O CPU, dan lokasi memori 0x01 adalah register alamat I / O CPU. Jika Anda telah melakukan sesuatu yang mengubah ini sebelum menjalankan program, hasilnya bisa tidak dapat diprediksi, mulai dari mengeluarkan sampah hingga mengunci komputer (0x22 yang biasanya terdapat di lokasi memori 0x07, jika dijalankan sebagai instruksi, adalahHALT
opcode yang tidak berdokumen ) .Atau, program yang lebih andal dan tak terduga adalah empat byte
Mencetak waktu yang telah berlalu, dalam jiffies (1/60 detik), sejak sistem dinyalakan.
sumber
05AB1E , 2 byte
Cobalah online!
Output mikrodetik saat ini dari jam internal mesin yang mengeksekusi.
Atau Anda bisa melakukan sesuatu seperti ini ...
05AB1E , 3 byte
Cobalah online!
Menghasilkan alfabet huruf kecil acak acak.
Atau ini juga berfungsi:
Cobalah online!
Menghasilkan huruf acak dari alfabet.
Atau ini juga berfungsi, dan lebih keren:
05AB1E , 9 byte
Cobalah online!
Keluaran secara acak salah satu dari ini:
sumber
BrainfuckX dan skrip kecil (dll) polyglot - 2 byte
? - Acak nilai dalam sel saat ini
. - Kirim sel saat ini ke stdout
sumber
C,
2521 byteBerkat pseudonym117 karena telah menghemat 4 byte.
Dikompilasi dengan
gcc -o test lol.c
(ya saya cukup orisinal dengan nama file saya ...), dan dijalankan bersama./test
.Itu tidak apa yang dikatakannya: mencetak karakter yang sesuai dengan alamat memori
i
, yang didefinisikan pada saat runtime, jadi itu harus non-deterministik.sumber
&
nilai variabel pada stack tidak didefinisikan? 2. Anda memiliki jumlah yang konstan di stack, jadi apakah alamat memorinyai
konstan?i
menjadi apa yang biasa disebutargc
, jadi Anda benar, itu akan selalu menjadi 1 kecuali ada lebih banyak argumen. Aku tidak percaya aku tidak ingat itu. Saya masih tidak yakin mengapa lokasi berubah, tetapi jika berhasil berfungsi.putchar
denganreturn
main(){printf("%d");}
Python 2, 29 byte
Sayangnya bukan pertama kali menulis kode pada smartphone.
sumber
Perl, 5 byte
Menghasilkan ID proses dan baris baru.
sumber
Ruby , 3 byte
Cobalah online!
Mencetak ID proses.
sumber
Pyke, 1 byte
Coba di sini!
Output waktu saat ini
sumber
C89 dengan GCC / Dentang, 20 byte
Solusi C lainnya hanya segfault setiap kali dibangun dengan GCC atau Dentang. Tapi ini.
Yang terlihat seperti:
Cukup banyak sampah yang tidak patut dicetak tetapi tidak deterministik!
sumber
puts
ing alamatnya memberi 1, dan ketika n adalah 2,puts
ing alamatnya memberikan 2). Menambahkan 1 ke alamat n, yang harus mengarah ke lebar 4-byteint
, memberikan alamat sampah dengan nilai sampah yang tersimpan di sana dengan jumlah byte yang sangat pasti hingga byte NUL berikutnya. Perilaku ini direproduksi antara GCC dan Dentang dan benar-benar di luar saya. Saya pikir saya akan bertanya di StackOverflow.n
masih diinisialisasi dengan apa yang biasa disebutargc
yang ada0
dalam kasus uji umum Anda, jadi dengan&n
,puts
mendapat pointer yang cukup deterministik ke byte '\ 0' menghasilkan string kosong (dengan asumsi ukuran pointer == ukuran integer dan semua itu) .&n+1
namun adalah alamat dari apa yang biasanya disebutargv
(setidaknya pada ABI yang meneruskan parameter pada tumpukan dalam urutan terbalik, bukan dengan register, dan dengan tumpukan yang tumbuh dari alamat tinggi ke rendah), yang, dengan asumsi ASLR, harus menjadi penunjuk yang berbeda setiap waktu.PHP, 12 byte
Menghasilkan ID unik
583f4da627ee3
berdasarkan waktu saat ini dalam mikrodetik. ↑sumber
<?=time();
<- 10 byte.uniqid()
adalah 1'000'000 kali lebih tidak pasti daripadatime()
;)Groovy, 9 byte
{print{}}
Output:
Script1$_run_closure1@2c8ec01c
Karena output alamat memori dari penutupan itu adalah non-deterministik.
sumber
groovy Script1.groovy
, saya mendapatkan error:Ambiguous expression could be either a parameterless closure expression or an isolated open code block;
. Bagaimana saya menggunakan ini?Emotinomicon, 15 byte
Penjelasan:
sumber
Borland C pada Windows, 12 byte
Saya menulis ulang karena mereka mengatakan mungkin untuk menggunakan satu fungsi. Compiler belum memeriksa argumennya jadi kompilasi; tetapi menempatkan melihat satu alamat 'tidak ada' yang tahu dan mulai mencetak apa alamat itu sampai menemukan byte 0x00. Bisa saja tidak ok jika alamat itu kehabisan memori yang disediakan untuk program tetapi di sini mencetak sesuatu
sumber
argv
, karena kompiler mungkin akan memanggil printf dengan arg kedua utama masih dalam register itu. Itulah yang terjadi dengan penargetan gcc6.2 Linux: Lihat sumber + asm pada explorer compiler Godbolt : main tidak menyentuh RSI sebelumnyacall printf
.argv
ada di tumpukan, tetapi tidak di bagian paling atas. Alamatnya dipengaruhi oleh tumpukan ASLR, jadi itu berfungsi. Ini akan bekerja dengan kurang baik-m32
. Anda mungkin selalu mendapatkan nol, karenamain
harus menjaga agar stack tetap selaras sehingga slot stack di atas string format mungkin memori stack baru yang belum pernah disentuh (dan mungkin selalu nol, karena kernel menghindari info kebocoran oleh zeroing pages sebagai gantinya memberikan halaman ruang pengguna yang penuh dengan data lama).Bahasa Bayi , 0 byte
Saya tidak mengirimkan ini pada awalnya karena saya pikir itu setelah pertanyaan. Saya salah; bahasa memang memiliki juru bahasa yang dibuat pada waktunya. Ini juga mungkin solusi 0-byte paling tidak curang yang pernah saya lihat (mengingat bahwa program 0-byte ditentukan untuk melakukan persis apa yang diminta oleh program, dan bukan untuk tujuan menyontek pada tantangan golf).
Bahasa Bayi ditentukan untuk mengabaikan program yang diberikannya dan melakukan sesuatu secara acak. (Penerjemah yang ditautkan pada halaman Esolang menghasilkan program BF hukum acak dan menjalankannya.) Itu sepertinya sangat cocok untuk tantangan ini.
sumber