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.


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

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}*?,

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

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?


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


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

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)]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.