宾果卡生成器


10

宾果卡由5列组成,每列5个正方形,中间的正方形表示为“ FREE”。数字不能重复。

这五列中填充了以下数字范围:

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

用尽可能少的字符输出一个可以解释为随机Bingo卡的字符串。例如:

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

此示例不是随机的,因此我可以显示第1列填充有1,2,3,4,5。另请注意,未对可用空间进行任何特殊处理,因为解释此字符串的前端将跳过它。

另一个示例是:

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

在此示例中,输出按行而不是按列。

第三个示例可能是:

01020304051617181920313233343546474849506162636465

除固定长度外,此输出与第一个示例相同。


我是唯一一个从未听说过Bingo的人,而是仅是Bullshit Bingo的人吗?
乔伊,

是! 而已!我的想法是提出75个或更多单词的列表,并使用SELECT * FROM List ORDER BY NEWID()
菲利普·森

Answers:


2

PHP,86

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

欢迎使用PPCG,这是一个不错的第一答案:
Rod

谢谢,我只是有点晚了才注意到这个问题
已有

join是的别名ìmplode,您可以将附件放入after循环中。这将缩短你的想法for($o=[];25>$i=count($o);$o[$n]=$n)$n=rand(1,15)+($i-$i%5)*3;echo join(",",$o);
约尔格Hülsermann

1

Ruby 1.9,48个字符

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

1

Windows PowerShell,51 54

不过,我不确定我是否正确理解您的任务。

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

样本输出:

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

R,63 51 50 49 45字节

感谢Billywob不断提出的建议,并鼓励我取得连胜。

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


我尝试的矢量化方法要短一些。cat(sapply(list(15,16:30,31:45,46:60,61:75),sample,5))编辑:没关系打印,cat而是添加了
Billywob

@Billywob谢谢,这是一个很好的答案!从那以后,我发现了一个更短的。(不幸的是,没有向量化)
rturnbull

1
轮到您可以做得更好:cat(sapply(split(1:75,ceiling(1:75/15)),sample,5))。通过将向量1:75拆分为列表进行工作,其中每个元素都是长度向量,15而不是list()用于将对象传递给sapply
Billywob

非常好!我将您的解决方案发布了几秒钟,但后来我想出了如何使您胜任一个字节。
rturnbull

哈哈!更好。但我认为您不需要的labels = FALSE选择cut。因为最重要的是,有5重复因素传递给split函数,而不管名称如何。
Billywob

0

Clojure-52个字符

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

输出示例(请注意,它提供了单独的行作为子列表):

((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字节

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

如果将列表作为列表输出,则可以使用75字节的解决方案:

from random import*
print[sample(range(1+i*15,16+i*15),5)for i in range(5)]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.