Bingokartengenerator

10

Eine Bingokarte besteht aus fünf Spalten mit jeweils fünf Feldern, wobei das mittlere Feld mit "KOSTENLOS" gekennzeichnet ist. Zahlen können nicht dupliziert werden.

Die fünf Spalten sind mit dem folgenden Zahlenbereich gefüllt:

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

Geben Sie in möglichst wenigen Zeichen eine Zeichenfolge aus, die als zufällige Bingokarte interpretiert werden kann. Zum Beispiel:

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

Dieses Beispiel ist nicht randomisiert, damit ich zeigen kann, dass Spalte 1 mit 1,2,3,4,5 gefüllt ist. Beachten Sie auch, dass der freie Speicherplatz keiner besonderen Behandlung unterzogen wurde, da das Front-End, das diese Zeichenfolge interpretiert, diese überspringt.

Ein anderes Beispiel wäre:

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

In diesem Beispiel erfolgt die Ausgabe nach Zeilen und nicht nach Spalten.

Ein drittes Beispiel könnte sein:

01020304051617181920313233343546474849506162636465

Dies ist die gleiche Ausgabe wie im ersten Beispiel, außer in fester Länge.

Phillip Senn
quelle
Bin ich der einzige, der noch nie von Bingo gehört hat, sondern nur von Bullshit Bingo?
Joey
Ja! Das ist es! Meine Idee ist es, eine Liste mit 75 oder mehr Wörtern zu erstellen und die Karte mit SELECT * FROM List ORDER BY NEWID () zu füllen
Phillip Senn

Antworten:

2

PHP, 86

for($o=[];25>$i=count($o);){$n=rand(1,15)+($i-$i%5)*3;$o[$n]=$n;}echo implode(",",$o);
Chocochaos
quelle
Willkommen bei PPCG, schöne erste Antwort c:
Rod
Danke, ich habe gerade etwas zu spät bemerkt, dass diese Frage 5 Jahre alt ist ... xD Ich
bin
joinist ein Alias ​​für ìmplodeund Sie können die Zuordnung in die After-Schleife setzen. Dies wird Ihre Idee verkürzen auffor($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 Zeichen

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

Windows PowerShell, 51 54

Ich bin mir jedoch nicht sicher, ob ich Ihre Aufgabe richtig verstanden habe.

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

Beispielausgaben:

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

Ich bin mir nicht sicher, ob ich das Problem richtig verstanden habe ... Können Sie eine detailliertere Erklärung geben?

Alberto Fernández
quelle
Die Ausgabe ist falsch. Sie müssen immer alle 25 Quadrate ausgeben :)
Chocochaos
1

R, 63 51 50 49 45 Bytes

Vielen Dank an Billywob für die laufenden Vorschläge und die Förderung meiner Wettbewerbssträhne.

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
quelle
Der vektorisierte Ansatz, den ich ausprobiert habe, ist etwas kürzer. cat(sapply(list(15,16:30,31:45,46:60,61:75),sample,5))Bearbeiten: cat
egal
@ Billywob Danke, das ist eine tolle Antwort! Ich habe seitdem eine gefunden, die noch kürzer ist. (Leider nicht vektorisiert.)
Rturnbull
1
Kurven können Sie noch besser machen : cat(sapply(split(1:75,ceiling(1:75/15)),sample,5)). Teilt den Vektor 1:75in eine Liste auf, in der jedes Element ein Vektor der Länge ist, 15anstatt list()Objekte zu übergeben sapply.
Billywob
Sehr schön! Ich hatte Ihre Lösung für ein paar Sekunden veröffentlicht, aber dann habe ich herausgefunden, wie ich Sie um ein einzelnes Byte überlisten kann.
Rturnbull
Hah! Noch besser. Aber ich glaube nicht, dass Sie die labels = FALSEOption dafür brauchen cut. Denn alles, was zählt, ist, dass sich 5wiederholende Faktoren an die Split-Funktion übergeben werden, unabhängig von den Namen.
Billywob
0

Clojure - 52 Zeichen

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

Beispielausgabe (beachten Sie, dass die separaten Zeilen als Unterlisten bereitgestellt werden):

((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
quelle
0

Python 2, 84 Bytes

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

Wenn die Ausgabe als Liste, wenn Listen in Ordnung ist, gibt es eine 75-Byte- Lösung:

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