Vous en avez marre que d'autres joueurs annoncent béatement "BINGO" et passent triomphalement devant vous pour réclamer leur prix. Cette fois, ce sera différent. Vous avez soudoyé l'appelant pour vous donner les appels BINGO à l' avance, dans l'ordre où ils seront appelés. Il ne vous reste plus qu'à créer un tableau BINGO qui gagnera le plus tôt possible pour ces appels, vous garantissant une victoire (ou une égalité improbable).
Étant donné une chaîne délimitée ou une liste des appels dans l'ordre, au format BINGO typique (lettres incluses, par exemple B9
ou G68
, voir les règles pour plus d'informations), sortez une matrice ou une liste 2D représentant une carte BINGO optimale pour ces appels. Supposons que l'entrée sera toujours valide.
Règles BINGO:
- Carte 5x5
- Un «BINGO» signifie que votre carte comporte 5 numéros consécutifs parmi ceux qui ont été appelés jusqu'à présent.
- Le carré central est libre (automatiquement compté pour un BINGO) et peut être représenté par un espace, une liste vide
-1
, ou0
. - Les 5 colonnes sont représentées par les lettres
B
,I
,N
,G
,O
respectivement. - La première colonne peut contenir les nombres 1-15, le second 16-30, ... et le cinquième 61-75.
- Les lettres et les chiffres pris pour la saisie peuvent éventuellement être délimités (par quelque chose qui a du sens, comme un
,
ou un espace) ou pris comme un tuple d'un caractère et d'un nombre. - La sortie requiert uniquement des nombres à chaque endroit de la matrice.
- Les carrés qui ne contribueront pas à votre premier BINGO doivent être valides, mais ne doivent pas être optimaux.
- Ceci est le code-golf, le code le plus court gagne
Exemples:
J'utilise ce format d'entrée pour les exemples, car il est plus court. Voir la section ci-dessus pour les formats d'entrée / sortie acceptables.
O61 B2 N36 G47 I16 N35 I21 O64 G48 O73 I30 N33 I17 N43 G46 O72 I19 O71 B14 B7 G50 B1 I22 B8 N40 B13 B6 N37 O70 G55 G58 G52 B3 B4 N34 I28 I29 O65 B11 G51 I23 G56 G59 I27 I25 G54 O66 N45 O67 O75 N42 O62 N31 N38 N41 G57 N39 B9 G60 I20 N32 B15 O63 N44 B10 I26 O68 G53 I18 B12 O69 G49 B5 O74 I24
Possible Output (this has a horizontal BINGO in 3rd row. A diagonal is also possible.):
[[11,25,42,53,68],
[ 6,22,32,57,62],
[ 2,16, 0,47,61],
[ 3,17,37,59,75],
[ 9,19,41,46,70]]
N42 N34 O66 N40 B6 O65 O63 N41 B3 G54 N45 I16 O67 N31 I28 B2 B14 G51 N36 N33 I23 B11 I17 I27 N44 I24 O75 N38 G50 G58 B12 O62 I18 B5 O74 G60 I26 B8 I22 N35 B1 B4 G53 O73 G52 O68 B10 O70 I30 G59 N43 N39 B9 G46 G55 O64 O61 I29 G56 G48 G49 I19 G57 N37 O72 I25 N32 B13 B7 B15 O71 I21 I20 O69 G47
Must be a vertical BINGO in 3rd (N) column (because 4 N's came before one of each B,I,G,O):
[[11,25,42,53,63],
[ 2,22,34,57,65],
[ 6,16, 0,47,66],
[ 3,17,41,54,75],
[ 9,19,40,46,70]]
The 5 columns are represented by the letters B,I,N,G,O, respectively.
Réponses:
Mathematica, 302 octets
Fonction sans nom prenant comme argument une liste de paires ordonnées, comme
{{N,42},{N,34},{O,66},{N,40},...}
(notez que le premier élément de chaque paire ordonnée n'est pas une chaîne mais plutôt un symbole nu), et renvoyant une liste 2D d'entiers, où les sous-listes représentent des colonnes (pas rangées) du plateau de bingo.Sortie pour le premier cas de test:
En général, lorsque le bingo le plus tôt possible se produit en raison d'un numéro appelé dans chacune des lignes B / I / G / O, ces numéros seront alors dans la ligne centrale; sinon, chaque colonne contiendra les quatre plus petits nombres possibles (en tenant compte du nombre déjà utilisé). Par exemple, si le premier cas de test est modifié de sorte que le deuxième numéro appelé soit
B12
plutôt queB2
, alors la première colonne de la carte de sortie sera{1,2,12,3,4}
.Sortie pour le deuxième cas de test:
En général, lorsque le bingo le plus tôt possible se produit en raison de cinq numéros appelés dans une seule colonne (ou quatre appelés dans la colonne N), les quatre colonnes restantes contiennent leurs cinq plus petits numéros possibles dans l'ordre.
Si le deuxième cas de test passe de
{{N,42},{N,34},{O,66},{N,40},...}
à{{O,72},{O,74},{O,66},{N,40},...}
(seules les deux premières entrées ont été modifiées), la sortie est alors:Version quelque peu non golfée:
La première ligne est principalement des définitions pour raccourcir le code, bien que
g
le carré central soit ajouté{N,0}
à l'entrée pour simplifier la recherche de bingo. (Lan
fonction donne les cinq plus petits numéros de bingo légaux de la#
th colonne, indexés à 1. Lao
fonction prend un tuple à 5 et déplace le premier élément pour qu'il soit le troisième.)La
While
boucle des lignes 2-6 trouve le plus petit segment initial de l'entrée qui contient un bingo. (La troisième ligne teste les bingos une dans chaque colonne, tandis que la cinquième ligne teste les bingos une colonne).Pour n'importe quelle fonction
F
, l'opérateurMapIndexed[F,{B,I,N,G,O}]
(à partir de la ligne 7) produit le 5-tuple{F{B,1},F{I,2},F{N,3},F{G,4},F{O,5}}
(enfin, techniquement c'est{F{B,{1}},...}
); nous appliquons une fonctionF
qui crée une colonne de bingo-board à partir de ses deux arguments. Cette fonction, cependant, dépend du type de bingo trouvé: la ligne 8 est vraie lorsque nous avons un bingo à une seule colonne, auquel cas la fonction (ligne 9) utilise les numéros d'entrée appropriés dans la colonne de bingo et les numéros par défaut dans le d'autres colonnes. Dans l'autre cas, la fonction (lignes 10-12) utilise les numéros d'entrée pertinents au centre de chaque colonne et les numéros par défaut ailleurs.la source
Bingo
fonction intégrée?Bingo
n'est pas interdit? <court pour changer la réponse>JavaScript (ES6) 372 octets
Peut probablement encore être joué un peu au golf, mais je ne vois pas comment. Les suggestions sont très appréciées;)
la source