Generatore di carte da bingo


10

Una carta Bingo è composta da cinque colonne di cinque quadrati ciascuna, con il quadrato centrale indicato come "GRATUITO". I numeri non possono essere duplicati.

Le cinque colonne sono popolate con il seguente intervallo di numeri:

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

Nel minor numero di caratteri possibile, genera una stringa che può essere interpretata come una carta Bingo randomizzata. Per esempio:

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

Questo esempio non è randomizzato, quindi posso mostrare che la colonna 1 è popolata con 1,2,3,4,5. Si noti inoltre che allo spazio libero non è stato assegnato alcun trattamento speciale poiché il front-end che interpreta questa stringa lo salterà.

Un altro esempio potrebbe essere:

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

In questo esempio, l'output è per riga anziché per colonna.

Un terzo esempio potrebbe essere:

01020304051617181920313233343546474849506162636465

Questo è lo stesso output del primo esempio, tranne in lunghezza fissa.


Sono l'unico che non ha mai sentito parlare di Bingo ma invece solo di Bullshit Bingo?
— Joey,

Sì! Questo è tutto! La mia idea è quella di elaborare un elenco di 75 o più parole e popolare la scheda con SELEZIONA * DA Elenco ORDINA PER NEWID ()
— Phillip Senn,

Risposte:


2

PHP, 86

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

Benvenuti in PPCG, bella prima risposta c:
— Rod,

Grazie, ho notato un po 'troppo tardi che questa domanda ha 5 anni ... xD Non sono sicuro che sia importante
— chocochaos,

joinè un alias per ìmplodee puoi inserire l'assigment nel ciclo successivo. Questo accorcerà la tua idea difor($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 caratteri

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

1

Windows PowerShell, 51 54

Tuttavia, non sono sicuro di aver compreso correttamente il tuo compito.

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

Output di esempio:

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

Non sono sicuro di aver compreso correttamente il problema ... Puoi fornire una spiegazione più dettagliata?


L'output è errato. Devi sempre produrre tutti i 25 quadrati :)
— chocochaos,

1

R, 63 51 50 49 45 byte

Grazie a Billywob per i suggerimenti continui e per aver incoraggiato la mia serie competitiva.

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'approccio vettoriale che ho provato è un po 'più breve. cat(sapply(list(15,16:30,31:45,46:60,61:75),sample,5))Modifica: non importa la stampa, ha aggiunto catinvece
— Billywob,

@Billywob Grazie, è un'ottima risposta! Da allora ne ho trovato uno ancora più corto. (Non vettorializzato, sfortunatamente.)
— rturnbull,

1
Giri si può fare ancora meglio: cat(sapply(split(1:75,ceiling(1:75/15)),sample,5)). Funziona suddividendo il vettore 1:75in un elenco in cui ogni elemento è un vettore di lunghezza 15anziché utilizzare list()per passare oggetti sapply.
— Billywob,

Molto bella! Ho avuto la tua soluzione pubblicata per alcuni secondi, ma poi ho capito come superarti di un singolo byte.
— rturnbull,

Hah! Anche meglio. Ma non penso che tu abbia bisogno labels = FALSEdell'opzione per cut. Perché tutto ciò che conta è che ci sono 5fattori ripetuti passati alla funzione di divisione, indipendentemente dai nomi.
— Billywob,

0

Clojure - 52 caratteri

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

Esempio di output (si noti che fornisce le righe separate come sotto-elenchi):

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

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

Se l'output come elenco se l'elenco è corretto, esiste una soluzione da 75 byte :

from random import*
print[sample(range(1+i*15,16+i*15),5)for i in range(5)]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.