Generator kartu bingo


10

Kartu Bingo masing-masing terdiri dari lima kolom dengan lima kotak, dengan alun-alun tengah ditetapkan "GRATIS". Angka tidak dapat diduplikasi.

Lima kolom diisi dengan kisaran angka berikut:

  • B: 1-15
  • I: 16-30
  • N: 31-45
  • G: 46-60
  • O: 61-75

Dalam karakter sesedikit mungkin, output string yang dapat diartikan sebagai kartu Bingo acak. Sebagai contoh:

1,2,3,4,5,16,17,18,19,20,31,32,33,34,35,46,47,48,49,50,61,62,63,64,65,65

Contoh ini tidak diacak sehingga saya dapat menunjukkan bahwa kolom 1 diisi dengan 1,2,3,4,5. Perhatikan juga bahwa ruang kosong belum diberi perlakuan khusus karena front-end yang mengartikan string ini akan melewatinya.

Contoh lain adalah:

1,16,31,46,61,2,17,32,47,62 ...

Dalam contoh ini, output adalah dengan baris, bukan oleh kolom.

Contoh ketiga mungkin:

01020304051617181920313233343546474849506162636465

Ini adalah output yang sama dengan contoh pertama kecuali dalam panjang tetap.


Apakah saya satu-satunya yang belum pernah mendengar tentang Bingo tetapi hanya omong kosong Bingo?
Joey

Iya! Itu dia! Ide saya adalah membuat daftar 75 kata atau lebih dan mengisi kartu dengan SELECT * FROM List ORDER BY NEWID ()
Phillip Senn

Jawaban:


2

PHP, 86

for($o=[];25>$i=count($o);){$n=rand(1,15)+($i-$i%5)*3;$o[$n]=$n;}echo implode(",",$o);

Selamat datang di PPCG, jawaban pertama yang bagus c:
Rod

Terima kasih, saya baru menyadari sedikit terlambat bahwa pertanyaan ini berusia 5 tahun ... xD Tidak yakin apakah itu penting
chocochaos

joinadalah alias untuk ìmplodedan Anda dapat menempatkan tugas di loop setelah. Ini akan mempersingkat ide Anda menjadifor($o=[];25>$i=count($o);$o[$n]=$n)$n=rand(1,15)+($i-$i%5)*3;echo join(",",$o);
Jörg Hülsermann

1

Ruby 1.9, 48 karakter

$><<(0..4).map{|i|[*1..75][15*i,15].sample 5}*?,

1

Windows PowerShell, 51 54

Saya tidak yakin apakah saya memahami tugas Anda dengan benar.

(0..4|%{($x=15*$_+1)..($x+14)|random -c 5})-join','

Output sampel:

5,9,1,7,13,26,18,23,17,22,37,33,34,41,44,50,53,59,60,58,73,72,64,69,66
14,10,13,5,1,24,29,26,17,30,34,33,43,41,38,59,50,60,49,56,71,61,72,70,68
3,11,4,5,13,27,16,25,26,22,43,34,42,32,38,51,52,49,58,54,61,70,73,71,62
1,9,13,12,4,23,25,20,26,22,40,33,35,44,37,55,47,52,59,53,74,70,75,64,69
8,6,7,1,9,16,21,23,18,17,35,41,37,38,34,60,50,57,51,59,66,75,73,74,71
11,6,13,4,1,29,27,24,22,18,40,35,41,32,43,51,54,57,58,53,74,71,69,66,64

1

PHP 106

<?$z=1;for($i=0;$i<5;$i++){for($j=0;$j<rand(1,5);$j++){$o[]=rand($z,$z+15);}$z+=15;}echo implode(",", $o);

Saya tidak yakin saya mengerti masalahnya dengan benar ... Bisakah Anda memberikan penjelasan yang lebih rinci?


Outputnya salah. Anda selalu perlu menampilkan semua 25 kotak :)
chocochaos

1

R, 63 51 50 49 45 byte

Terima kasih kepada Billywob untuk saran yang terus-menerus dan mendorong daya saing saya.

cat(sapply(split(n<-1:75,cut(n,5)),sample,5))

5 14 15 3 1 20 30 28 18 27 32 45 42 43 41 49 54 50 56 47 68 66 64 73 71


Pendekatan vektor yang saya coba sedikit lebih pendek. cat(sapply(list(15,16:30,31:45,46:60,61:75),sample,5))Sunting: apalagi pencetakan, ditambahkan catsebagai gantinya
Billywob

@Billywob Terima kasih, itu jawaban yang bagus! Sejak itu saya menemukan satu yang bahkan lebih pendek. (Sayangnya, tidak di
vektor

1
Ternyata Anda dapat melakukan bahkan lebih baik: cat(sapply(split(1:75,ceiling(1:75/15)),sample,5)). Bekerja dengan memisahkan vektor 1:75ke dalam daftar di mana setiap elemen adalah vektor dengan panjang 15alih-alih menggunakan list()untuk meneruskan objek sapply.
Billywob

Sangat bagus! Saya punya solusi Anda diposting selama beberapa detik, tetapi kemudian saya menemukan cara untuk mengalahkan Anda dengan satu byte.
rturnbull

Hah! Bahkan lebih baik. Tapi saya tidak berpikir Anda perlu labels = FALSEopsi untuk cut. Karena semua yang penting adalah bahwa ada 5faktor berulang yang diteruskan ke fungsi split, terlepas dari nama.
Billywob

0

Clojure - 52 karakter

(map #(take 5(shuffle %))(partition 15(range 1 76)))

Contoh output (perhatikan bahwa ini menyediakan baris terpisah sebagai sub-daftar):

((4 1 12 10 2) (25 23 21 16 27) (39 33 45 44 43) (48 53 59 54 47) (73 71 61 64 63))

0

Python 2, 84 byte

from random import*
print sum([sample(range(1+i*15,16+i*15),5)for i in range(5)],[])

Jika output sebagai daftar jika daftar tidak masalah ada solusi 75 byte :

from random import*
print[sample(range(1+i*15,16+i*15),5)for i in range(5)]
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.