Generator kart Bingo


10

Karta Bingo składa się z pięciu kolumn po pięć kwadratów każda, a środkowy kwadrat oznaczony jest jako „DARMOWY”. Liczby nie mogą się powielać.

Pięć kolumn jest wypełnionych następującym zakresem liczb:

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

W jak najmniejszej liczbie znaków wypisz ciąg znaków, który można interpretować jako losową kartę Bingo. Na przykład:

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

Ten przykład nie jest losowy, więc mogę pokazać, że kolumna 1 jest wypełniona 1,2,3,4,5. Zauważ też, że wolne miejsce nie zostało specjalnie potraktowane, ponieważ interfejs, który interpretuje ten ciąg, pominie go.

Innym przykładem może być:

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

W tym przykładzie dane wyjściowe są według wiersza zamiast według kolumny.

Trzecim przykładem może być:

01020304051617181920313233343546474849506162636465

Jest to ten sam wynik jak w pierwszym przykładzie, z wyjątkiem stałej długości.


Czy jestem jedynym, który nigdy nie słyszał o Bingo, ale zamiast o Bullshit Bingo?
Joey,

Tak! Otóż ​​to! Moim pomysłem jest stworzenie listy zawierającej 75 lub więcej słów i wypełnienie karty WYBIERZ * Z LISTY ZAMÓW PRZEZ NEWID ()
Phillip Senn

Odpowiedzi:


2

PHP, 86

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

Witamy w PPCG, fajna pierwsza odpowiedź c:
Rod

Dzięki, właśnie zauważyłem trochę za późno, że to pytanie ma 5 lat ... xD Nie jestem pewien, czy to ma znaczenie
chocochaos

joinjest aliasem dla ìmplodei możesz umieścić przypisanie w pętli końcowej. for($o=[];25>$i=count($o);$o[$n]=$n)$n=rand(1,15)+($i-$i%5)*3;echo join(",",$o);
Skróci

1

Ruby 1.9, 48 znaków

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

1

Windows PowerShell, 51 54

Nie jestem jednak pewien, czy poprawnie zrozumiałem twoje zadanie.

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

Przykładowe wyniki:

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

Nie jestem pewien, czy poprawnie zrozumiałem problem ... Czy możesz podać bardziej szczegółowe wyjaśnienie?


Dane wyjściowe są niepoprawne. Zawsze musisz
wypisać

1

R, 63 51 50 49 45 bajtów

Dzięki Billywob za bieżące sugestie i zachęcanie do mojej rywalizacji.

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


Wektoryzowane podejście, które wypróbowałem, jest nieco krótsze. cat(sapply(list(15,16:30,31:45,46:60,61:75),sample,5))Edycja: nie cat
wspominając

@Billywob Dzięki, to świetna odpowiedź! Od tamtej pory znalazłem jeszcze krótszy. (Niestety nie wektoryzowane.)
rturnbull

1
Okazuje można zrobić jeszcze lepiej: cat(sapply(split(1:75,ceiling(1:75/15)),sample,5)). Działa poprzez podzielenie wektora 1:75na listę, w której każdy element jest wektorem długości 15zamiast używania list()do przekazywania obiektów sapply.
Billywob,

Bardzo dobrze! Wysłałem twoje rozwiązanie na kilka sekund, ale potem wymyśliłem, jak cię obezwładnić jednym bajtem.
rturnbull

Hah! Nawet lepiej. Ale nie sądzę, że potrzebujesz takiej labels = FALSEopcji cut. Ponieważ wszystko, co się liczy, to 5powtarzające się czynniki przekazywane do funkcji podziału, niezależnie od nazw.
Billywob,

0

Clojure - 52 znaki

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

Przykładowe dane wyjściowe (należy pamiętać, że zawiera osobne wiersze jako listy podrzędne):

((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 bajtów

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

Jeśli dane wyjściowe jako lista, jeśli listy są w porządku, istnieje rozwiązanie 75 bajtów :

from random import*
print[sample(range(1+i*15,16+i*15),5)for i in range(5)]
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.