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.