Minesweeper adalah gim logika yang ditemukan di sebagian besar OS. Tujuan dari permainan ini adalah untuk menentukan di mana tambang berada di kotak, diberi angka yang menunjukkan jumlah tambang di sekitar tempat itu.
Dengan ukuran kotak, dan satu set ranjau, buat kisi Minesweeper untuk set ranjau itu.
Input: Dua bilangan bulat yang menunjukkan ukuran kisi, dan jumlah bilangan bulat yang tidak ditentukan yang menunjukkan posisi tambang. Posisi akan diberikan sebagai (posisi kolom, posisi baris), dan indeks akan dimulai pada baris 1.
Output: Kotak Minesweeper. Jika tidak ada ranjau di sekitar blok, cetak a x
. Untuk setiap baris baru, cetak baris baru. Keluarkan semua tambang sebagai tanda bintang *
. Jangan meninggalkan spasi kosong di antara nilai-nilai di baris saat mencetak.
Kasus uji:
Input "5 5 1 3 3 5 2 4":
xxxxx
11xxx
*21xx
2*21x
12*1x
Input "3 4 3 1 1 4 2 3 3 2":
x2*
13*
2*2
*21
Kode terpendek menang.
sumber
5 5 1
tidak akan pernah disahkan?Jawaban:
GolfScript
122 98 94 93 91 88 87 85 82 81 8071Demo online:
Test Case 1: tautan
Test Case 2: tautan
sumber
!!{a}{b}if
menggunakan satu karakter lebih dari yang diperlukan.'*'
dapat diganti dengan42
karena Anda memasukkannya ke dalam array dan kemudian meringkas array. Demikian pula Anda dapat menggunakan kode ASCII untuk karakter output lain dan menyimpan karakter denganor
untuk menangani kasus khusus.!!{a}{b}if
benar-benar bodoh. :) Lucu apa kesalahan tingkat tinggi yang dapat Anda lakukan sambil berkonsentrasi pada detail. Saya tidak tahu apa yang Anda maksud dengan menggunakanor
.,,
Anda memiliki nomor. Anda ingin mengonversinya ke string yang sesuai (atau kode ASCII) kecuali 0, dalam hal ini Anda ingin x. Kode ASCII untuk digit berurutan dan dijalankan dari 48.x
adalah ASCII 120, yaitu 72 + 48. Jadi, Anda dapat melakukan72or 48+
dan menyimpan karakter melalui pendekatan berbasis string..48 120if+
, tetapior
trik Anda lebih pendek dua karakter.J,
1241161121018786858483827976757268 karakterMenemukan apa yang saya cari - cara untuk menghilangkan ruang (
1":
) - dan akhirnya saya kompetitif. Sekarang saya hanya perlu mencari tahu masalah set tambang yang kosong.Mengambil input dari keyboard.
Edit
Versi baru memanfaatkan efek samping
1":
- angka yang lebih besar dari 9 diganti oleh*
.sumber
0
, bukanx
; 2. Gagal jika set ranjau kosong (mis:10 10
- harus mencetak papan 10x10 kosong, tetapi kembali|length error
)x
hanya mewakili spasi. Saya tidak memperhatikan bahwa itu telah berubah. Hmm, tidak pernah menyangka bahwa set ranjau akan kosong ... Saya harus bekerja pada itu.Mathematica - 247 karakter
Contoh:
Keluaran:
ChessboardDistance
menghitung seberapa jauh masing-masing sel dari tambang, di mana 1 berkorespondensi dengan "di sebelah tambang". AngkaCount
1 menghasilkan angka sel. Kemudian ranjau (*) dimasukkan ke dalam array.sumber
Mathematica ,
140139137Menulis itu dalam bentuk yang lebih mudah dibaca:
sumber
ListCorrelate[BoxMatrix@1, %, 2, 0]
keajaibannya.ListCorrelate
secara efektif overlay kernel (BoxMatrix@1
) pada setiap posisi di grid, mengalikan, dan memberikan jumlahnya. (ping saya di mma chat jika Anda ingin sebuah ilustrasi) - Komentar Anda mengingatkan saya bahwaListConvolve
harus bekerja di sini juga karena itu adalah semacam mirror imageListCorrelate
dan kernel saya simetris. Itu akan menyelamatkan saya karakter. :-)2
dalam##2
. Saya akan memperbaikinya sekarang. ps: Bagaimana Anda bisa mengetahui hal ini setelah sekian lama?VBA - 298 karakter
Melewatkan kesalahan dengan
On Error Resume Next
menyelamatkan saya beberapa karakter, tetapi ini masih tidak sebagus beberapa jawaban lainnya. : - /sumber
Python,
192182180 karakterSaya dapat menyimpan beberapa jika input dipisahkan dengan koma. Maka baris pertama adalah
d=input()
dan panjangnya 171 karakter.Memiliki tambang mengoordinasikan berbasis 0 daripada berbasis 1 juga akan membantu. Harganya 8 karakter untuk diatasi.
Versi tidak disatukan:
sumber
Scala, 280 karakter
sumber
C ++ - 454 karakter
Ini lebih buruk daripada jawaban VBA saya, yang mungkin berarti saya tidak tahu apa yang saya lakukan di C ++. Namun, saya mencoba membangun apa yang saya ketahui tentang C ++, jadi ini dia. Jika ada yang punya saran untuk perbaikan, saya akan berterima kasih untuk mendengarnya!
sumber
return 0
. Dan Anda bisa#include<cstdio>
,#include<cstdlib>
. Anda bahkan dapat menghapus dua ini termasuk !. Terlebih lagi,using name.....
terlalu lama, Anda bisa menggunakannyastd::cin, std::cout, std::string
.std::
panggilan yang akan membuatnya lebih berharga (saya pikir satu lagistring
akan melakukannya ). Terima kasih atas info tentang#include
dialognya juga. Saya bukan ahli C ++. ;-)C # (691 Karakter)
Versi Non-golf:
sumber
K, 175
.
sumber
ECMAScript 2019 (Javascript Modern) - 116 byte
versi tanpa ungolfed
solusi ini tidak sepenuhnya mematuhi format input / output tetapi menunjukkan algoritma yang ringkas.
contoh: https://gist.github.com/missinglink/ee02084cfb523665e8c9d34c24f01537
sumber
brainfuck ,
1001896 bytesCobalah online! atau coba versi lama dengan input integer
Satu hari pemrograman dan tiga hari perbaikan bug ^^
Ini menggunakan beberapa bagian dari kode Game Of Life saya. Alih-alih menghitung sel hidup, ini malah menghitung bom. Karena input sebagai titik kode diizinkan oleh aturan umum, ini menggunakan input bukan bilangan bulat "yang dapat dibaca".
sumber
Ini adalah awal dari solusi Brainfuck. Itu harus cukup mudah dibaca dengan indentasi dan menumpuk komentar (
@
menunjukkan penunjuk tumpukan):Namun itu masih jauh dari lengkap dan saya mulai ragu apakah pendekatan saya optimal. Sejauh ini hanya mempertimbangkan dua karakter input pertama dan mencetak tabel Xs. Misalnya "43" akan memberi Anda:
Saya akan senang melihat apakah orang lain memiliki apa yang diperlukan dan mampu menyelesaikan masalah ini di Brainfuck.
sumber