Tantangan
Pekerja pabrik biasanya pekerja keras. Namun, pekerjaan mereka sekarang sering diganti dengan mesin.
Anda harus menulis program yang menggunakan angka sebagai input. Ini akan mencetak pabrik 10 pekerja 10 kali. Setiap kali, setiap pekerja memiliki 1/input
peluang untuk 'dipecat' dan digantikan oleh mesin.
Memasukkan
Integer, berasal dari STDIN atau panggilan fungsi.
Keluaran
10 kasus pabrik, masing-masing dengan pekerja biasanya lebih banyak dipecat.
Format keluaran - cara mencetak pabrik
Sebuah pabrik terlihat seperti ini:
|0000000000|
atau |0000011001|
Sebuah pipa mewakili dinding, 0 mewakili pekerja, dan 1 mewakili mesin, sehingga cetakan pertama dari pabrik akan selalu |0000000000|
.
Contoh
Input: 10
Keluaran:
|0000000000| //always start off with this
|0000000010| //a 1/10 chance means that this worker lost his job
|0000010010|
|0010010010|
|1010010010|
|1010110010|
|1010110011|
|1010111011|
|1010111111|
|1110111111|
Input: 5
Keluaran:
|0000000000| //always start here
|0000001001| //a 1/5 chance means that 2 workers got fired
|1000101001|
|1000101111|
|1101101111|
|1111111111| //after achieving all machinery, the machines continue to be printed
|1111111111|
|1111111111|
|1111111111|
|1111111111|
CATATAN
Jumlah pekerja yang dipecat adalah ACAK - dalam contoh saya untuk 1/5 chance
selalu ada 2 pekerja dipecat tetapi program Anda harus melakukan ini secara acak - kadang-kadang 1 dan kadang-kadang 3 - mereka hanya memiliki 1/5 peluang dipecat.
Jawaban:
Japt
-R
,2221201918 byteCobalah
Penjelasan
sumber
R ,
9289 byteCobalah online!
Tidak Disatukan:
sumber
replicate
danfor
loop tanpa keberhasilan, namun dengan tips AndaDo-while loops
, saya akhirnya baru menyadari betapa{
berpotensi penyalahgunaan ini. Saya telah memperluas penyalahgunaan ini ke contoh denganfor()
solusi 92 byte. Mungkin Anda sudah menyadari implikasi{
pelecehan ketika Anda menulis posting tip itu, tetapi saya baru menyadarinya. tio.run/##K/r/…"for"
hampir selalu tidak lebih baik dari itufor
, dan kadang - kadang lebih buruk !pmax
bisa digunakan. Inilah poin saya sebelumnya tentang{
operator. tio.run/##PZDBasNADETv@xVDfKhNjcGHXAKl5OJTT2l/…JavaScript (ES6), 84 byte
Cobalah online!
Versi rekursif, 88 byte
Cobalah online!
Bagaimana?
Kita mulai dengan k = s = '5000000000' .
Pada setiap iterasi:
Kami memaksa masing-masing karakter saya dari s ke nomor, menghitung i modulo 5 - sehingga terkemuka 5 diperlakukan seperti 0 - dan secara acak melakukan bitwise OR dengan 1 dengan probabilitas yang diharapkan 1 / n , kecuali pada iterasi pertama .
Counter k bergeser ke kanan sebanyak 3 bit. Kami menghentikan rekursi segera setelah k = 0 , yang memberikan 10 iterasi.
Penting untuk dicatat bahwa 5000000000 sedikit lebih besar dari bilangan bulat 32-bit, sehingga secara implisit dikonversi menjadi 5000000000 & 0xFFFFFFFF = 705032704 tepat sebelum pergeseran bitwise pertama terjadi. Maka langkah-langkah berikut:
sumber
APL (Dyalog) , 37 byte
Cobalah online!
Bagaimana?
10⍴0
- mulai dengan 10 nol.⎕←' '~⍨⍕'|'⍵'|'
- setiap kali mencetak array yang diformat,?10⍴⍺
- Menghasilkan array acak dengan nilai mulai1
input,⍺=
- perbandingan elemen-bijaksana dengan input. harus menandai1
/ input elemen, memberikan masing-masing a1
/ input setiap kali,⍵+
- tambahkan ke array,×
- signum. nol tetap nol, apa pun yang lebih besar dari satu kembali ke satu.⍣10
- ulangi 10 kali.sumber
Retina , 30 byte
Cobalah online!
Saya bersenang-senang dengan keacakan di Retina ^^
Penjelasan
Tahap pertama mengatur string yang akan kita kerjakan:
Ini menggantikan seluruh input dengan
|
, baris baru, dan kemudian 10 baris yang berisi sebanyak0
kata input. Karakter pertama pada setiap baris akan mewakili pekerja pabrik.Tahap berikut berarti:
Baris pertama dari string yang bekerja hanya berisi a
|
, yang akan menjadi karakter pertama yang dicetak oleh setiap iterasi dari loop (menjadi karakter pertama dari baris pertama), dan juga akan dicetak pada akhir setiap iterasi (menjadi yang pertama karakter seluruh string). Penggantian tidak akan memiliki efek apa pun pada saluran ini karena tidak mengandung digit apa pun.Setiap baris lainnya berisi
n
angka, sehingga ada 1 yangn
berpeluang mengubah karakter pertama dari garis (yang merupakan satu-satunya yang bermakna) menjadi a1
.sumber
PowerShell ,
828069 byteCobalah online!
Mengambil input
$x
. Menciptakan array dari semua nol, menyimpannya ke dalam$a
dan kemudian loop berkali-kali. Nyaman, pabrik hanya selebar itu layak iterasi. Setiap iterasi, kami output pabrik kami saat ini"|$(-join$a)|"
, kemudian loop melalui setiap elemen$a
.Di dalam kita memilih elemen saat ini
$_
yang telah-b
ditentukanor
dengan baik1
berdasarkanRandom
peluang berdasarkan pada input$x
. Misalnya, untuk input10
,Get-Random -max 10
akan berkisar antara0
dan9
dan0
sekitar 1/10 dari waktu. Jadi dengan!(...)
membungkusnyaRandom
, kita akan mendapatkan1
kira - kira1/input
jumlah waktu, dan1-1/input
jumlah lain dari waktu yang akan kita dapatkan$_
. Ya, ini kadang-kadang berarti bahwa kami menimpa1
dengan yang lain1
, tapi itu tidak masalah.Array yang dihasilkan kemudian disimpan kembali ke
$a
untuk putaran berikutnya. Semua string yang dihasilkan ditinggalkan di jalur pipa, dan implisitWrite-Output
pada penyelesaian program memberi kita baris baru secara gratis.-2 byte berkat Veskah.
-11 byte berkat ASCII saja.
sumber
$a
ketika kita sudah mengulanginya? lol Dan itu trik yang pintar dengan-bor
. Terima kasih!Perl 6 , 58 byte
Cobalah online!
+(1 > $_ * rand)
menghasilkan bit tunggal dengan frekuensi1
s yang diperlukan .xx 10
mereplikasi ekspresi itu sepuluh kali untuk menghasilkan instance pabrik tunggal sebagai daftar bit, dan[~]
bergabung dengan daftar itu menjadi string tunggal.xx 9
mereplikasi ekspresi yang menghasilkan string pabrik sembilan kali, dan kemudian[\~|]
melakukan pengurangan segitiga (yang beberapa bahasa lain menyebutnya "pemindaian") dengan stringwise atau operator~|
, sehingga pekerja yang dipecat dalam iterasi sebelumnya tetap dipecat dalam yang kemudian.sumber
for
. Mengalahkan solusi berbasis nomor yang{say "|{.join}|"for [\<<+|>>] (?$++X*!<<^$_).roll(10)xx 10}
saya kerjakan dengan dua byte. Dengan[\Z+|]
itu akan menjadi 56 byte tetapi ini tidak berhasil karena suatu alasan.$_*rand
dengan.rand
. Cara saya mengartikan aturan, mengembalikan daftar string "pabrik" juga harus OK.Python 2 ,
104103 byteCobalah online!
sumber
Jelly , 22 byte
Program lengkap yang menerima integer sebagai input baris perintah dan mencetak output ke STDOUT.
(Sebagai tautan monadik, ia mengembalikan daftar karakter dan bilangan bulat.)
Cobalah online!
Bagaimana?
Secara efektif memutuskan pada setiap tahap jika setiap pekerja (termasuk mesin apa pun) kehilangan pekerjaan mereka (dengan peluang satu di N), namun mesin diganti oleh mesin (menggunakan logis-OR).
sumber
MATL , 26 byte
Cobalah online!
(Panjang) penjelasan
Contoh konten tumpukan ditampilkan di sepanjang jalan. Pada setiap langkah, isi tumpukan ditampilkan dari bawah ke atas.
sumber
JavaScript (Node.js) ,
1059390 byteCobalah online!
+2 byte untuk meletakkan array di dalam fungsi, terima kasih kepada @Shaggy untuk menunjukkannya
Cobalah online!
sumber
w
perlu dinyatakan dalam fungsi Anda.C (gcc) ,
110106 byte-4 byte dari @ceilingcat
Cobalah online!
Iterasi melalui daftar karakter untuk setiap putaran penggantian.
Tidak Disatukan:
sumber
SmileBASIC, 75 byte
sumber
Perl 5 , 44 byte
Cobalah online!
sumber
05AB1E , 22 byte
Cobalah online!
Seharusnya ada lebih banyak ruang untuk bermain golf.
TÅ0
- Dorong daftar 10 nol.TF...
- Lakukan ini 10 kali:DJ
- Gandakan item saat ini dan bergabunglah.'|.ø=
- Kelilingi dengan dua|
s dan cetak ke STDOUT.ITи
- Ulangi input 10 kali.€L€Ω
- Dan untuk setiap kejadian, dapatkan elemen acak [1 ... N] . (Mungkin ada built-in untuk ini yang belum saya lihat)Θ
- Dorong 05AB1E truthified ™. Untuk masing-masing, periksa apakah sama dengan 1 .s...~
- Logis ATAU hasil dari item saat ini.sumber
JavaScript, 83 byte
Tampilkan cuplikan kode
sumber
Java 10,
153152131 byte-18 byte berkat @ OlivierGrégoire , dan -3 lebih banyak byte dengan mengonversi Java 8 ke Java 10.
Penjelasan:
Cobalah online.
sumber
var
denganString
untuk Java 9 dan di bawah dan untuk tambahan 3 byte. Saya pada dasarnya menggabungkan dua loop yang Anda miliki.Arang ,
302927 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Dorong string 10
0
detik ke daftar kosongu
.Ulangi perintah berikutnya 10 kali.
Untuk setiap karakter string terakhir, ulangi
n-1
kali, tambahkan1
, dan pilih karakter acak dari string. Ini memberi1/n
peluang untuk mengubah karakter menjadi1
. Hasilnya didorong keu
.Peta di atas daftar string, mengelilingi masing-masing dengan
|
, kemudian secara implisit mencetak masing-masing pada barisnya sendiri.sumber
Python 3 , 132 byte
Cobalah online!
sumber
APL + WIN,
30 4035 byteKetinggalan sedikit tentang tanpa spasi; (- diperbaiki & terima kasih kepada Uriel untuk -3 byte
Meminta input layar nomor
Penjelasan yang mirip dengan Uriel:
sumber
9 10⍴?90⍴5
→?9 10⍴5
. Anda juga perlu menghilangkan spasiVBA, 144 byte
Diindentasi untuk membaca lebih mudah:
Mengambil keuntungan dari 2 poin: Array VBA akan default ke Basis 0 (begitu
w(9)
juga denganw(0 to 9)
) dan membuat Array sebagai Long akan secara otomatis menginisialisasinya menjadi 0.(Mengganggu, 20 byte memformat otomatis yang ditambahkan VBA tetapi tidak benar-benar diperlukan - 19 spasi dan satu semi-colon)
sumber
Saya belum melihat jawaban untuk Ruby, jadi:
Ruby , 92 byte
Cobalah online!
sumber
rand(n)<1
alih-alihrand(n)==0
, dan simpan beberapa dengan menggunakan{..}
alih-alihdo..end
, misalnyax.times{puts'|'+z...}
Ruby, 67 byte
Saya pikir saya telah menipu beberapa hal di sini. Pertama-tama, fungsi ini mencetak output dengan tanda kutip di sekitar setiap baris, misalnya:
Jika ini tidak dapat diterima (mengingat bahwa ini adalah ascii-art , mungkin itulah masalahnya), berikut adalah solusi yang mencetak tanpa tanda kutip untuk 70 byte :
Penjelasan:
sumber
PHP,
7170 bytepenggabungan loop disimpan 5 byte (lagi):
Jalankan sebagai pipa dengan
-nR
atau coba online .edit 1: format tetap dan output pertama (tidak ada perubahan dalam jumlah byte berkat golf tambahan)
edit 2: Golfed satu byte lagi: Setelah pencetakan terakhir, tidak ada lagi kebutuhan untuk menembakkan siapa pun.
sumber
C # (Visual C # Interactive Compiler) , 131 byte
Hei, setidaknya aku terikat dengan Jawa.
Cobalah online!
sumber