ビンゴカードジェネレーター


10

ビンゴカードは、5つの正方形がそれぞれ5列に並んでいて、中央の正方形は「無料」と指定されています。番号は重複できません。

5つの列には、次の範囲の数値が入力されます。

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

できるだけ少ない文字数で、ランダムなビンゴカードとして解釈できる文字列を出力します。例えば:

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 ...

この例では、出力は列ごとではなく行ごとです。

3番目の例は次のようになります。

01020304051617181920313233343546474849506162636465

これは、固定長であることを除いて、最初の例と同じ出力です。


私がビンゴについて聞いたことがないのは私だけですか?
Joey、

はい!それでおしまい!私のアイデアは、75以上の単語のリストを考え出し、カードにSELECT * FROM List ORDER BY NEWID()を入力することです
Phillip Senn

回答:


2

PHP、86

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

PPCGへようこそ、素晴らしい最初の回答c:
Rod

おかげで、私はこの質問には5歳であることをあまりにも少し遅れに気づいた... xDでわからないことがが重要ならば
chocochaos

join別名であるìmplode、あなたはループの後にassigmentを置くことができます。これはにあなたのアイデアを短縮しますfor($o=[];25>$i=count($o);$o[$n]=$n)$n=rand(1,15)+($i-$i%5)*3;echo join(",",$o);
イェルクHülsermann


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

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

問題を正しく理解したかわかりません...詳細な説明はありますか?


出力が正しくありません。常に25の正方形すべてを出力する必要があります:)
chocochaos

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 2016年

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)]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.