Máy phát thẻ Bingo


10

Một thẻ Bingo là năm cột gồm năm hình vuông, mỗi ô vuông ở giữa được chỉ định là "MIỄN PHÍ". Số không thể trùng lặp.

Năm cột được điền với dãy số sau:

  • B: 1-15
  • Tôi: 16-30
  • N: 31-45
  • G: 46-60
  • Ô: 61-75

Trong càng ít ký tự càng tốt, xuất ra một chuỗi có thể được hiểu là thẻ Bingo ngẫu nhiên. Ví dụ:

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

Ví dụ này không ngẫu nhiên để tôi có thể chỉ ra rằng cột 1 được điền với 1,2,3,4,5. Cũng lưu ý rằng không gian trống đã không được xử lý đặc biệt bởi vì giao diện người dùng diễn giải chuỗi này sẽ bỏ qua nó.

Một ví dụ khác là:

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

Trong ví dụ này, đầu ra là theo hàng thay vì theo cột.

Một ví dụ thứ ba có thể là:

01020304051617181920313233343546474849506162636465

Đây là đầu ra giống như ví dụ đầu tiên ngoại trừ chiều dài cố định.


Tôi có phải là người duy nhất chưa bao giờ nghe nói về Bingo mà thay vào đó chỉ là Bingo Bullshit?
Joey

Đúng! Đó là nó! Ý tưởng của tôi là đưa ra một danh sách gồm 75 từ trở lên và điền vào thẻ với CHỌN * TỪ danh sách ĐẶT HÀNG THEO NEWID ()
Phillip Senn

Câu trả lời:


2

PHP, 86

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

Chào mừng bạn đến với PPCG, câu trả lời đầu tiên rất hay c:
Rod

Cảm ơn, tôi chỉ nhận thấy một chút quá muộn rằng câu hỏi này đã 5 tuổi ... xD Không chắc nó có quan trọng hay không
chocochaos

joinlà một bí danh cho ìmplodevà bạn có thể đặt các xác nhận vào vòng lặp sau. Điều này sẽ rút ngắn ý tưởng của bạn thànhfor($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 ký tự

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

1

Windows PowerShell, 51 54

Tôi không chắc chắn liệu tôi có hiểu đúng nhiệm vụ của bạn không.

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

Đầu ra mẫu:

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);

Tôi không chắc là tôi đã hiểu chính xác vấn đề ... Bạn có thể giải thích chi tiết hơn không?


Đầu ra không chính xác. Bạn luôn cần xuất tất cả 25 ô vuông :)
chocochaos

1

R, 63 51 50 49 45 byte

Cảm ơn Billywob vì những gợi ý liên tục và khuyến khích sự cạnh tranh của tôi.

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


Cách tiếp cận véc tơ tôi đã thử là ngắn hơn một chút. cat(sapply(list(15,16:30,31:45,46:60,61:75),sample,5))Chỉnh sửa: đừng cat
bận

@Billywob Cảm ơn, đó là một câu trả lời tuyệt vời! Tôi đã tìm thấy một cái thậm chí còn ngắn hơn. (Không được vector hóa, thật không may.)
rturnbull

1
Biến bạn có thể làm tốt hơn nữa : cat(sapply(split(1:75,ceiling(1:75/15)),sample,5)). Hoạt động bằng cách chia vectơ 1:75thành một danh sách trong đó mỗi phần tử là một vectơ có độ dài 15thay vì sử dụng list()để truyền các đối tượng đến sapply.
Billywob

Rất đẹp! Tôi đã có giải pháp của bạn được đăng trong vài giây, nhưng sau đó tôi đã tìm ra cách vượt qua bạn bằng một byte.
rturnbull

Hừ! Thậm chí còn tốt hơn. Nhưng tôi không nghĩ rằng bạn cần labels = FALSEtùy chọn cho cut. Bởi vì tất cả những gì quan trọng là có 5các yếu tố lặp lại được truyền cho hàm phân tách, bất kể tên.
Billywob

0

Clojure - 52 ký tự

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

Ví dụ đầu ra (lưu ý rằng nó cung cấp các hàng riêng biệt dưới dạng danh sách phụ):

((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)],[])

Nếu đầu ra là danh sách nếu danh sách ổn, có một giải pháp 75 byte :

from random import*
print[sample(range(1+i*15,16+i*15),5)for i in range(5)]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.