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.

Phillip Senn
sumber
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);
chocochaos
sumber
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}*?,
Ventero
sumber
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
Joey
sumber
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?

Alberto Fernández
sumber
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

rturnbull
sumber
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))
mikera
sumber
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)]
Karl Napf
sumber