Bingo kart üreticisi


10

Bir Bingo kartı, orta kare "ÜCRETSİZ" olarak adlandırılan, her biri beş kareden oluşan beş sütundur. Sayılar çoğaltılamaz.

Beş sütun aşağıdaki sayı aralıklarıyla doldurulur:

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

Mümkün olduğunca az karakterde, rastgele Bingo kartı olarak yorumlanabilecek bir dize çıktılayın. Örneğin:

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

Bu örnek, sütun 1'in 1,2,3,4,5 ile doldurulduğunu gösterebilmem için rastgele değildir. Ayrıca, boş alana herhangi bir özel işlem verilmediğini unutmayın, çünkü bu dizeyi yorumlayan ön uç onu atlayacaktır.

Başka bir örnek:

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

Bu örnekte, çıktı sütun yerine satır olarak verilmiştir.

Üçüncü bir örnek şunlar olabilir:

01020304051617181920313233343546474849506162636465

Bu, sabit uzunluk hariç 1. örnekle aynı çıktıdır.


Bingo'yu daha önce hiç duymamış, sadece Bullshit Bingo'nun yerine geçen tek ben miyim?
Joey

Evet! Bu kadar! Benim fikrim Listesi SİPARİŞ İLE NewID () DAN * 75 veya daha fazla kelime listesi ile gelip ve SELECT ile kart doldurmak için ise
Phillip Senn

Yanıtlar:


2

PHP, 86

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

PPCG'ye hoş geldiniz, güzel ilk cevap c:
Rod

Teşekkürler, sadece bu sorunun 5 yaşında olduğunu biraz geç fark ettim ... xD Yine de önemli olup olmadığından emin değilim
chocochaos

joiniçin bir takma ìmplodeaddır ve değerlendirmeyi after loop'a koyabilirsiniz. Bu, fikrinizi kısaltacakfor($o=[];25>$i=count($o);$o[$n]=$n)$n=rand(1,15)+($i-$i%5)*3;echo join(",",$o);
Jörg Hülsermann

1

Yakut 1.9, 48 karakter

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

1

Windows PowerShell, 51 54

Yine de görevinizi doğru anladığımdan emin değilim.

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

Örnek çıktılar:

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

Sorunu doğru anladığımdan emin değilim ... Daha ayrıntılı bir açıklama yapabilir misiniz?


Çıktı yanlış. Her zaman 25 karenin çıktısını almanız gerekir :)
chocochaos

1

R, 63 51 50 49 45 bayt

Billywob'a süregelen öneriler ve rekabetçi çizgimi teşvik ettiği için teşekkürler.

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


Denediğim vektörize yaklaşım biraz daha kısadır. cat(sapply(list(15,16:30,31:45,46:60,61:75),sample,5))Düzenleme: baskı aldırma, catbunun yerine eklendi
Billywob

@Billywob Teşekkürler, bu harika bir cevap! O zamandan beri daha kısa bir tane buldum. (Ne yazık ki vectorized değil.)
rturnbull

1
Daha da iyi yapabilirsin cat(sapply(split(1:75,ceiling(1:75/15)),sample,5)). 1:75Vektörü, nesneleri aktarmak için 15kullanmak yerine her öğenin bir uzunluk vektörü olduğu bir listeye bölerek çalışır . list()sapply
Billywob

Çok hoş! Çözümünüzü birkaç saniyeliğine yayınladım, ama sonra sizi tek bir baytla nasıl aşacağınızı anladım.
rturnbull

Hah! Daha iyi. Ama bu labels = FALSEseçeneğe ihtiyacın olduğunu düşünmüyorum cut. Çünkü önemli 5olan isimlerden bağımsız olarak split fonksiyonuna tekrarlanan faktörler olmasıdır.
Billywob

0

Clojure - 52 karakter

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

Örnek çıktı (ayrı satırları alt listeler olarak sağladığını unutmayın):

((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 bayt

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

Listeler halinde liste çıktısı uygunsa 75 baytlık bir çözüm vardır:

from random import*
print[sample(range(1+i*15,16+i*15),5)for i in range(5)]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.