pengantar
Diberikan visualisasi ini dari lapangan bermain:
(0,0)
+----------------------+(map_width, 0)
| A |
|-----+-----------+----|
| D | W | B |
|-----+-----------+----|
| C |
+----------------------+(map_width, map_height)
(0, map_height)
Seluruh peta permainan yang dimainkan adalah persegi panjang dengan koordinat sudut (0,0) dan (map_width, map_height). Poin yang memenuhi syarat untuk memunculkan musuh adalah Union
Tantangan
Tulis kode yang mengembalikan titik acak (x, y) yang dijamin berada di dalam S. Kode Anda tidak dapat menimbulkan bias tambahan, artinya probabilitas setiap koordinat terdistribusi secara seragam mengingat asumsi bahwa pilihan Anda untuk menghasilkan keacakan (mis. Fungsi | perpustakaan | dev / urandom) tidak bias.
Solusi terpendek dalam byte menang!
Memasukkan
Anda akan diberikan total 6 variabel input integer positif dalam urutan:
map_width, map_height, W_top_left_x, W_top_left_y, W_width, W_height
. Anda dapat mengasumsikan bahwa luas permukaan (dihitung) semua wilayah (A, B, C, D, W) adalah masing-masing> 10, sehingga tidak ada spasi / wilayah kosong.
Input Contoh: 1000, 1000, 100, 100, 600, 400
Input harus mengandung 6 nilai yang diuraikan di atas, tetapi dapat diteruskan dengan jumlah argumen yang lebih sedikit dan dalam urutan apa pun. Misalnya lewat (map_width, map_height)
sebagai tupel python diizinkan. Yang tidak diperbolehkan tentu saja adalah parameter yang dihitung seperti titik kanan bawah W.
Keluaran
2 bilangan bulat yang dihasilkan secara acak (x, y) di mana
ATAU
artinya setidaknya satu dari ekspresi logis di atas harus benar.
Contohnya
Input Output(valid random samples)
1000 1000 100 100 600 400 10 10
1000 1000 100 100 600 400 800 550
1000 1000 100 100 600 400 800 10
1000 1000 100 100 600 400 10 550
Untuk perincian dan batasan input / output, silakan merujuk pada aturan input / output default
2 randomly generated integers (x, y)
Jawaban:
Python 2 ,
114106102101 byteCobalah online!
sumber
[i%w, i/w]
karena rentangw*h/w=h
tetapi x terkait dengan lebar dalam contoh ini bukan ketinggian.a/b
sudah pembagian lantai, jikaa
danb
adalah bilangan bulat (yang ada di sini).R ,
8973 byteCobalah online!
Mengambil input sebagai
width,height,c(X,Y),c(W,H)
.sumber
05AB1E ,
2321201817 byteInput dalam format
[map_width, map_height], [W_top_left_x, W_top_left_y], [W_width, W_height]
.Terima kasih kepada @Grimy untuk -1 byte, dan juga untuk membuat saya sadar saya memperkenalkan bug setelah edit terakhir saya.
Cobalah secara online , hasilkan 10 kemungkinan hasil pada saat yang sama atau verifikasi semua kemungkinan koordinat . (Catatan kecil: Saya telah mengurangi input contoh dengan faktor 10, karena filter dan pilihan acak bawaan cukup lambat untuk daftar besar.)
Penjelasan:
Masukan
map_width, map_height, [W_top_left_x, W_top_left_y], [W_width, W_height]
tersebut disebut sebagai[Wm, Hm], [x, y], [w, h]
berikut:sumber
[map_height, 0]
mungkin sebagai hasil acak tanpa¨
. :)*ݨ¹‰
bisaL`â<
dengan mengambil dua input pertama sebagai[map_height, map_width]
. JugaII
bisaŠ
, kecuali aku melewatkan sesuatu.L`â<
. AdapunII+
untukŠ+
, Anda memang benar bahwa itu akan sama .. Sayangnya saya membuat kesalahan sendiri dan itu seharusnya²³+
bukanII+
, karena akan menggunakan masukan ketiga untuk keduaI
(seperti itu akan mengambil dua kali input ketiga denganŠ
) setelah iterasi pertama dari filter .. Jadi secara implisit terima kasih untuk membuat saya sadar bahwa saya memiliki bug. :)C # (Visual C # Interactive Compiler) , 110 byte
Cobalah online!
sumber
PowerShell ,
8573 byte-12 byte berkat mazzy
Cobalah online!
Jawaban sederhana yang bagus yang menyatukan array yang terbuat dari kisaran nilai untuk setiap dimensi dan kemudian mengambil satu secara acak untuk
x
dany
. Berhasil menggunakan kembali sebagian besar kode dengan terlebih dahulu memprosesx
, lalu menimpa$x
dengan$y
dan menjalankannya lagi.sumber
Julia ,
767167 byteCobalah online!
sumber
Jelly , 11 byte
Cobalah online!
Tautan diad yang mengambil dua argumen,
[map_width, map_height], [W_width, W_height]
danW_left, W_top
dan mengembalikan titik yang dipilih secara acak memenuhi persyaratan.Penjelasan
sumber
Python 2 , 100 byte
Masukan harus dalam bentuk
((map_width, W_top_left_x, W_width),(map_height, W_top_left_y, W_height))
Output diberikan dalam bentuk:
[[x],[y]]
Cobalah online!
Output acak diperoleh dari contoh input:
sumber
Java (OpenJDK 8) , 100 byte
Cobalah online!
Digunakan
java.awt.Rectangle
sebagai pemegang beberapa parameter. Secara alami, itu menggunakanint
bidang, dan bukanfloat
ataudouble
.sumber
Rectangle#contains
builtin! : DBahasa Wolfram (Mathematica) ,
846860 byteCobalah online!
Ambil input sebagai
{map_width, map_height}, {W_width, W_height}, {W_top_left_x, W_top_left_y}
.sumber
Arang ,
5543 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Masukkan ukuran peta. (Jika mereka yang terakhir, saya bisa memasukkan ketinggian sebaris untuk penghematan 1 byte.)
Masukkan persegi panjang bagian dalam. (Jika saya bisa memasukkan dalam urutan
left, width, top, height
maka saya bisa menggunakanF²⊞υE²N
untuk penghematan 3-byte.)Buat daftar semua koordinat di lapangan.
Saring entri di mana kedua koordinat berada di dalam persegi panjang.
Cetak elemen acak dari yang tersisa.
sumber
Perl 5
-ap
, 84 byteCobalah online!
sumber
Scala , 172 byte
Keserampangan? Kena kau.
Implementasi yang menyenangkan yang bisa saya pikirkan.
Cara kerjanya : Menghasilkan pasangan acak di peta. Jika berada di kotak bagian dalam, coba lagi.
Cobalah online!
sumber
J ,
54474539 byteCobalah online!
Ambil input sebagai kisi 3 x 2 seperti:
0?@{[
(-1&{)~
(<*/@,0<:[)
persegi panjang interior yang sama bergeser2{[
. Kalau tidak, kembalikan titik acak asli yang tidak tergeser.{~&1
Pendekatan lain, 45 byte
Cobalah online!
Yang ini secara konsep lebih sederhana, dan tidak repot dengan perulangan. Sebagai gantinya, kami membuat matriks dari semua angka 0 hingga (wxh), menggesernya dengan titik awal bagian dalam, mengambil hanya titik-titik dalam subgrid (0, 0) ke (bagian dalam, inner h), menghapusnya dari keseluruhan kisi setelah meratakan keduanya, pilih satu secara acak dari sisanya, dan ubah bilangan bulat kembali ke titik menggunakan divmod
<.@% , |~
sumber