Semua orang tahu game kapal penyapu ranjau tua yang dikirimkan dengan Windows XP. Ini adalah kotak sederhana dengan matriks sel 9x9 yang berisi angka (menunjukkan berapa banyak ranjau yang berdekatan) atau tambang.
Tantangannya adalah untuk menghasilkan grid 9x9 acak dengan 10 bom yang diberikan seed integer (hingga int mesin / bahasa terbesar Anda) dengan poin brownies jika Anda menerapkan PRNG sendiri
contoh output: sel berisi angka 0-8 atau * untuk tambang
*101*1000
110111000
123210000
1***10000
123210011
00000002*
00000114*
000112*3*
0001*2121
Kode terpendek dalam byte menang .. aturan standar dll, dll.
code-golf
random
minesweeper
Harun
sumber
sumber
Jawaban:
Dyalog APL, 40 byte
⎕rl←1⋄(1,¨a)⍕¨{⍉3+/0,⍵,0}⍣2⊢a←9 9⍴9≥?⍨81
(mengasumsikan
⎕io←0
)yang
1
di⎕rl←1
adalah benihdari kanan ke kiri:
?⍨81
sama dengan81?81
- permutasi acak9≥
menghasilkan bitmask yang mengandung sepuluh 1s pada posisi acak, sisanya adalah 0sa←9 9⍴
membentuk kembali ke kotak 9-oleh-9 dan menyebutnya "a"{ }⍣2
lakukan hal berikut dua kali:⍉3+/0,⍵,0
jumlah jendela geser 3 kolom (asumsikan 0s di luar), lalu transpos(1,¨a)⍕¨
adalah format (konversikan ke string) masing-masing. Argumen kiri untuk⍕
menentukan jumlah karakter dan karakter fraksional dalam hasil. Jika⍕
tidak dapat memformat sesuai dengan spesifikasi itu output a*
- kebetulan beruntung untuk masalah ini.a
akan menjadi 1 di mana ranjau sedang - mencoba memasukkan bagian utuh dan fraksional menjadi arang tunggal tidak mungkin, sehingga akan muncul sebagai*
s.sumber
⎕io←0
asumsi itu? Saya tidak terbiasa dengan Dyalog APL ...⎕io
(" Indeks Asal ") ke 0 menjadikannya berbasis 0 dan mengubah beberapa primitif sesuai, misalnya⍳3
akan0 1 2
, tidak1 2 3
. Itu bisa dilakukan secara terprogram (⎕io←0
) atau dari preferensi di GUI. Memiliki pilihan ini adalah kesalahan 50 tahun yang masih membelah komunitas APL kecil saat ini.MATLAB,
9493 byteContoh run (baris pertama setelah kode adalah input yang diketik oleh pengguna):
Penjelasan
mengambil bilangan bulat dan menggunakannya sebagai benih. (Ini berfungsi dalam versi MATLAB modern. Versi lama mungkin memerlukan sintaks yang berbeda.)
menugaskan logis
0
, ataufalse
(diperoleh dengan meniadakan secara logis1
) ke entri(9,9)
matriksx
. Sisa dari entri secara otomatis diinisialisasi ke logis0
juga.menugaskan
1
(secara otomatis dilemparkan ke logis1
, atautrue
) untuk10
dari81
entrix
, dipilih secara acak tanpa penggantian. Entri-entri ini adalah yang mengandung bom.adalah singkatan dari
conv2(+x,ones(3),'same')
. Ini menggabungkan matriksx
(yang perlu dilemparkan kedouble
, menggunakan+
) dengan lingkungan 3 × 3 yang berisi1
. Ini menghitung berapa banyak bom yang berdekatan dengan setiap entri. Untuk entri yang berisi bom itu termasuk bom itu, tetapi nilainya di sana akan ditimpa nanti.menambahkan 48 ke nilai, untuk mengkonversi dari angka ke kode ASCII. Menggabungkan dengan matriks kosong melemparkan kode ASCII ini ke karakter.
menugaskan 42 (kode ASCII untuk
'*'
) ke posisi bom. Posisi-posisi ini diberikan olehx
, yang di sini digunakan sebagai indeks logis.menampilkan hasilnya.
sumber
Javascript (ES6), 204 atau 198 byte
PRNG Khusus (204 byte)
Kode ini menggunakan generator kongruensial linier dengan pengganda
22695477
dan selisih1
(ini adalah implementasi Borland C / C ++).Karena efisiensi PRNG yang buruk selama fase pemanasannya, saya harus meletakkan satu bom per baris (bukan 10 di awal atau 10 di akhir array yang tidak diacak). Jadi, hanya ada 9 bom. Saya mungkin mencoba memperbaikinya nanti.
Juga, harus ada cara yang lebih sederhana / lebih pendek untuk memproses cek 'out of board'
(x=p%9-(n+=p)%9)*x-64
tapi saya tidak bisa mengetahuinya sekarang.Menggunakan Math.random () (198 byte)
Ini termasuk 10 tambang seperti yang diminta.
Demo
sumber
'**********'+'0'
sama dengan'**********'+0
; yang menyimpan dua byte pada versi 198-byte.'0'
seharusnya diulang dan0.repeat()
tidak akan berhasil....('**********'+0).repeat(71)
. Maaf.Python 2,
269266264 byteCobalah di ideone.com
Disimpan 2 byte berkat Aaron.
Kemungkinan besar masih bisa bermain golf.
Penjelasan
random
diimpor untuk menggunakanseed
seed PRNG dansample
memilih sepuluh lokasi bom secara acak.m
adalah matriks 9 x 9 yang menyimpan papan. Untuk masing-masing lokasi bom, entri terkait dim
disetel ke-9
dan semua entri tetangga bertambah. Cara ini padam
akhirnya berisi jumlah bom yang berdekatan untuk sel-sel non-bom dan angka negatif untuk sel-sel bom. Finalprint
cetakan seluruh papan dengan iterasi melalui semua jalurl
dim
dan semua selc
dil
.sumber
sample()
for a in z:
blok (hanya python 2.x)R, 187 Bytes
Cobalah di Ideone
Penjelasan:
set.seed()
ambil biji cst.x
adalah indeks untuk matriks 11 * 11y
adalah indeks dari matriks 9 * 9 dalam matriks 11 * 11z
adalah indeks bomx=x*0
inisialisasi nilai matriksLoop menambahkan 1 ke x dalam kasus bom yang berdekatan.
sumber
JavaScript ES6, 244 byte
sumber
`
karakter.Ruby ,
181194183 +1 + 1 = 184 byteLupa benar-benar mengatur benih, wah. Menggunakan
-n
bendera.Cobalah online!
sumber
Python 2 , 172 byte
Cobalah online!
sumber