Representasi presisi ganda desimal hanya dapat menjamin keakuratan 15 tempat desimal, sehingga pi diperkirakan sebagai:
3.141592653589793
Anda dapat melihat bahwa digit 3
ada di posisi 1, 10, 16
, digit 1
ada di posisi 2, 4
dll.
Tantangan
Tugas Anda adalah membuat program atau fungsi yang membuat angka ganda acak antara 0 dan 1, dan memetakan nilai-nilai nomor itu ke nilai pi. Anda melakukan ini dengan menempatkan angka-angka yang berbeda di angka acak di posisi digit itu di pi. Jika digit tidak ditemukan di pi, Anda akan melewati itu, dan setiap digit di pi yang tidak ada dalam angka acak akan diwakili oleh x
. Setiap nilai hanya dapat digunakan sekali, mulai dari kiri.
Beberapa contoh mungkin akan memperjelas hal ini. Dalam contoh berikut, angka pertama adalah pi, yang kedua adalah angka acak, dan yang terakhir adalah output yang diinginkan.
3.141592653589793
0.111111111111111
x.1x1xxxxxxxxxxxx
3.141592653589793
0.531000000000000
3.1xx5xxxxxxxxxxx
3.141592653589793
0.123456789123456
3.141592653x8x7xx
3.141592653589793
0.967552381459391
3.14159265358979x
Aturan:
- Fungsi tidak boleh mengambil input apa pun (pengecualian yang mungkin dijelaskan dalam poin-poin 3)
- Keluaran harus terdiri dari hanya string keluaran, dengan baris baru opsional (satu spasi tambahan juga diterima)
- Jika program Anda tidak memiliki nilai Pi bawaan, dan / atau RNG maka Anda dapat meng-hardcode Pi, dan mengambil nomor acak sebagai input. Anda tidak dapat membuat kode angka acak atau mengambil Pi sebagai input.
- Baik nilai hardcoded untuk Pi, dan 15 digit acak (Anda dapat melewati
0.
karena Anda tahu itu akan berada di antara 0 dan 1), akan dimasukkan dalam jumlah byte. - Jika bahasa Anda tidak memiliki ketelitian yang dibutuhkan, Anda dapat menggunakan ketelitian yang lebih rendah di bawah pembatasan berikut
- Digit Pi harus akurat hingga presisi yang Anda miliki
- Anda tidak dapat menampilkan nilai lebih dari yang Anda yakini benar, yaitu Anda tidak dapat menampilkan 15 digit jika presisi hanya memungkinkan 8 desimal akurat.
- Nilai hardcoded dari Pi akan dihitung sebagai 16 byte (Anda tidak perlu titik desimal), bahkan jika program Anda hanya mendukung 8 digit.
- Nilai input untuk angka acak akan dihitung sebagai 15 byte (Anda tidak perlu
0.
. Ini karena bahasa dengan presisi rendah seharusnya tidak memiliki keuntungan yang tidak adil. - Program harus mendukung presisi 5 desimal (setidaknya).
- Sunting: Untuk memvalidasi jawaban: Angka acak harus dicetak entah bagaimana, tetapi operasi ini tidak harus dimasukkan dalam jumlah byte. Jadi misalnya, jika memungkinkan untuk menyisipkan
print r
di akhir skrip, bagian itu tidak akan meningkatkan skor. - Anda tidak dapat mengurangi byte jika itu bagian dari operasi lain yang diperlukan. Yaitu jika kodenya
print pi, r
, maka Anda hanya bisa mengurangi, r
. - Jika Anda harus memasukkan bagian-bagian beberapa tempat dalam kode, harap sertakan kedua versi (yang mencetak nomor acak dan yang tidak dengan komentar seperti:
_p
dan_oNo
diperlukan untuk mencetak nomor acak._p
Lakukan xxx dan_oNo
lakukan yyy._p
dan_oNo
tidak akan dimasukkan dalam hitungan byte.
Kode terpendek dalam byte menang.
Papan peringkat
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
0 < random < 1
atau0 <= random <= 1
?Jawaban:
Pyth, 25 byte
Cobalah online: Demonstrasi atau Tes yang menunjukkan nomor acak
Penjelasan:
sumber
LabVIEW, 53 Primview LabVIEW
Saya mencocokkan Strings dan memasukkan nomor ke string x.xxx "kosong" dan menghapus nomor dari pi sehingga tidak muncul lagi.
nomor acak dan karakter tunggal di sini agak terlihat, apakah itu benar atau apakah saya harus mengulang rekaman?
sumber
Mathematica, 105 atau 147 karakter
Jika angka acak " antara 0 dan 1" berarti
0 <= random <= 1
, yaitu termasuk 0 & 1.(105 karakter)
Kalau tidak, berarti mengambil angka acak " antara 0 dan 1"
0 < random < 1
.Ulangi untuk mendapatkan 15 bilangan bulat acak, tidak semuanya nol. Pilih pelengkap dari rentang 0 hingga 9, yaitu angka-angka dari 0 hingga 9 yang tidak ada dalam daftar acak. Ubah bilangan bulat itu menjadi string dan ganti karakter yang cocok dalam string pi.
(147 karakter)
Digit acak: -
sumber
True
adalah1>0
,RandomInteger
dapat menggunakan notasi infiks{0,9}~RandomInteger~15
. Anda mungkin dapat menyimpan beberapa byte dengan memberikanr
beberapa nilai dan benar-benar menggunakan kondisiWhile
alih - alih menggunakanBreak.
KemudianFor
mungkin menyimpan byte lainWhile
. Meskipun saya tidak melihat mengapa Anda memerlukan loop sama sekali jika Anda menganggap angka acak dalam kisaran[0,1)
.1>0
:-)JavaScript (ES6),
8987 bytePenjelasan
Sunting: String acak sekarang tidak terpotong seperti yang dijelaskan oleh poster.
Loop melalui setiap digit pi dan menghapus digit dari angka acak jika ditemukan, yang lain menggantikan digit dalam pi dengan
x
.Uji
Tes juga menghasilkan angka acak.
Tampilkan cuplikan kode
sumber
Math.random()
menghasilkan sejumlah rentang[0,1)
sehingga bisa0
tetapi tidak pernah1
. OP tidak secara khusus menyatakan apakah kisarannya inklusif atau eksklusif, jadi saya berasumsi bahwa apa pun yang masuk akal baik-baik saja. Ini juga rentang yang digunakan jawaban lain. Namun Anda telah membuat saya sadar bahwa jika itu tepat0
akan gagal karena.
pi tidak akan cocok dan menjadix
. Ini memiliki peluang 1 banding 2 ^ 53 tetapi saya memutuskan untuk memperbaikinya.[0,1]
baik-baik saja (begitu juga(0,1)
).CJam,
4846423836 byteUji di sini.
Dan ini adalah versi yang mencetak π dan nomor acak:
Uji di sini.
Saya tidak memotong angka acak ke 15 tempat desimal, seperti diklarifikasi oleh OP dalam komentar.
Penjelasan
Idenya adalah untuk mengubah setiap karakter dalam representasi string π menjadi sepasang karakter itu dan
x
. Untuk setiap karakter dalam angka acak, kami menukar pasangan pertama yang dimulai dengan karakter itu. Pada akhirnya kami menampilkan karakter kedua dari setiap pasangan.sumber
Lua,
231230 bytePenjelasan
Sayangnya, lua tidak membantu saya sama sekali di sini. math.pi bulatkan digit terakhir pi yang dikembalikan:
Saya harus memotong nomor ini:
Default besar kedua untuk melakukan tantangan ini adalah kurangnya string.replace (). Saat saya melakukan tindakan ini dua kali menggunakan
s:sub(1,l-1)..c..s:sub(l+1)
, saya ingin melakukan fungsi anonim, berpikir itu akan lebih pendek. Bukan, jadi saya menyimpannya dua kali.Alasan saya harus berhati-hati tentang titik, adalah bagaimana lua mengembalikan posisinya. Dalam regex, sebuah titik berarti "karakter apa saja", jadi ketika saya mengevaluasi karakter
.
di loop saya, itu cocok dengan karakter pertama:Anda dapat menguji lua online . Karena saya tidak melakukan seeding pada PRNG, berikut adalah kode yang memungkinkan Anda untuk menjalankan beberapa tes sambil tetap memperhatikan nilai.
sumber
Python 2.7,
117110 byteDiuji pada aplikasi Android QPython terbaru, tetapi harus bekerja di mana saja.
Sunting 1: diubah
str(pi)
menjadi backticks.Untuk pengujian:
sumber
Python, 147 byte
Cukup jelas: fungsi lambda mengubah float ke daftar; kami kemudian mengulangi pi-list yang berusaha menghapus setiap digit dari daftar acak. Jika kita bisa, bagus, tambahkan jawabannya; jika tidak, tambahkan 'x' sebagai gantinya.
sumber
str(t)
hanya memberi Anda 11 digit presisit
,repr(t)
memberi Anda semuat
15 digit.Perl, 70 byte
Dengan komentar:
Versi ini akan mencetak pi, nomor acak, dan hasilnya:
Contoh output:
Saya harap ini baik-baik saja:
9
) akurat.sumber