Générateur de cartes de bingo


10

Une carte de Bingo est composée de cinq colonnes de cinq carrés chacune, le carré du milieu étant désigné "GRATUIT". Les nombres ne peuvent pas être dupliqués.

Les cinq colonnes sont remplies avec la plage de nombres suivante:

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

En aussi peu de caractères que possible, sortez une chaîne qui peut être interprétée comme une carte de bingo aléatoire. Par exemple:

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

Cet exemple n'est pas randomisé pour que je puisse montrer que la colonne 1 est remplie avec 1,2,3,4,5. Notez également que l'espace libre n'a reçu aucun traitement spécial car le frontal qui interprète cette chaîne le sautera.

Un autre exemple serait:

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

Dans cet exemple, la sortie se fait par ligne au lieu de par colonne.

Un troisième exemple pourrait être:

01020304051617181920313233343546474849506162636465

Il s'agit de la même sortie que le 1er exemple, sauf en longueur fixe.


Suis-je le seul à n'avoir jamais entendu parler de Bingo mais uniquement de Bullshit Bingo?
Joey

Oui! C'est ça! Mon idée est de proposer une liste de 75 mots ou plus et de remplir la carte avec SELECT * FROM List ORDER BY NEWID ()
Phillip Senn

Réponses:


2

PHP, 86

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

Bienvenue à PPCG, belle première réponse c:
Rod

Merci, je viens de remarquer un peu trop tard que cette question a 5 ans ... xD Je ne sais pas si c'est important
chocochaos

joinest un alias pour ìmplodeet vous pouvez placer l'assignation dans la boucle after. Cela raccourcira votre idée àfor($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 caractères

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

1

Windows PowerShell, 51 54

Je ne sais pas si j'ai bien compris votre tâche.

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

Exemples de sorties:

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

Je ne suis pas sûr d'avoir bien compris le problème ... Pouvez-vous fournir une explication plus détaillée?


La sortie est incorrecte. Vous devez toujours sortir les 25 cases :)
chocochaos

1

R, 63 51 50 49 45 octets

Merci à Billywob pour ses suggestions continues et pour avoir encouragé ma séquence de compétitions.

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


L'approche vectorisée que j'ai essayée est un peu plus courte. cat(sapply(list(15,16:30,31:45,46:60,61:75),sample,5))Edit: peu importe l'impression, ajouté à la catplace
Billywob

@Billywob Merci, c'est une excellente réponse! J'en ai depuis trouvé un qui est encore plus court. (Non vectorisé, malheureusement.)
rturnbull

1
Vous pouvez le faire tourne encore mieux: cat(sapply(split(1:75,ceiling(1:75/15)),sample,5)). Fonctionne en divisant le vecteur 1:75en une liste où chaque élément est un vecteur de longueur 15au lieu d'utiliser list()pour passer des objets sapply.
Billywob

Très agréable! J'ai fait publier votre solution pendant quelques secondes, mais j'ai ensuite compris comment vous surpasser d'un seul octet.
rturnbull

Hah! Encore mieux. Mais je ne pense pas que vous ayez besoin de l' labels = FALSEoption pour cut. Parce que tout ce qui compte, c'est qu'il y ait 5des facteurs répétitifs passés à la fonction de division, indépendamment des noms.
Billywob

0

Clojure - 52 caractères

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

Exemple de sortie (notez qu'il fournit les lignes séparées sous forme de sous-listes):

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

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

Si la sortie en tant que liste si listes est correcte, il existe une solution à 75 octets :

from random import*
print[sample(range(1+i*15,16+i*15),5)for i in range(5)]
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.