빙고 카드 생성기


10

빙고 카드는 각각 5 개의 사각형으로 이루어진 5 개의 열로 구성되며 중간 사각형은 "FREE"로 지정됩니다. 숫자는 복제 할 수 없습니다.

5 개의 열은 다음과 같은 숫자 범위로 채워집니다.

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

가능한 적은 문자로 무작위 빙고 카드로 해석 될 수있는 문자열을 출력하십시오. 예를 들면 다음과 같습니다.

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

이 예제는 무작위 화되지 않으므로 열 1에 1,2,3,4,5가 채워져 있음을 보여줄 수 있습니다. 또한이 문자열을 해석하는 프론트 엔드가이를 생략하므로 여유 공간에 특별한 처리가 제공되지 않았습니다.

다른 예는 다음과 같습니다.

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

이 예에서 출력은 열이 아니라 행이됩니다.

세 번째 예는 다음과 같습니다.

01020304051617181920313233343546474849506162636465

고정 길이를 제외하고 첫 번째 예와 동일한 출력입니다.


나는 빙고에 대해 들어 본 적이없고 헛소리 빙고에 대해서만 들어 본 적이 있습니까?
Joey

예! 그게 다야! 내 생각은 목록 ORDER BY NEWID () * FROM 75 개 이상의 단어의 목록을 마련하고 SELECT와 함께 카드를 채우는 것입니다
필립 SENN

답변:


2

PHP, 86

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

PPCG에 오신 것을 환영합니다. 첫 답변 c :
Rod

고마워, 나는 단지이 질문이 5 살이라는 것을 너무 늦게 알아 차렸다 ... xD 비록 그것이 중요하다면 확실하지 않다
chocochaos

join의 별칭이며 ìmplode이후 루프에 어설 션을 넣을 수 있습니다. 이렇게하면 아이디어가 for($o=[];25>$i=count($o);$o[$n]=$n)$n=rand(1,15)+($i-$i%5)*3;echo join(",",$o);
줄어 듭니다.

1

루비 1.9, 48 자

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

1

Windows PowerShell, 51 54

그래도 귀하의 작업을 올바르게 이해했는지 확실하지 않습니다.

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

샘플 출력 :

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

문제를 올바르게 이해했는지 잘 모르겠습니다. 자세한 설명을 제공 할 수 있습니까?


출력이 잘못되었습니다. 당신은 항상 모든 25 사각형을 출력해야합니다 :)
chocochaos

1

R, 63 51 50 49 45 바이트

지속적인 제안과 경쟁에 대한 격려를 해준 Billywob에게 감사드립니다.

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


내가 시도한 벡터화 된 접근법은 조금 짧습니다. cat(sapply(list(15,16:30,31:45,46:60,61:75),sample,5))편집 : 인쇄를 신경 쓰지 cat말고 대신 추가하십시오
Billywob

@Billywob 감사합니다. 좋은 답변입니다! 나는 그보다 더 짧은 것을 발견했습니다. (불행히도 벡터화되지 않음)
rturnbull

1
더 잘할 수 있습니다 : cat(sapply(split(1:75,ceiling(1:75/15)),sample,5)). 벡터 1:75를 객체로 전달하는 15대신 각 요소가 길이가 벡터 인 목록으로 분할하여 작동 list()합니다 sapply.
Billywob

아주 좋아요! 몇 초 동안 솔루션을 게시했지만 단일 바이트로 당신을 보내는 방법을 알아 냈습니다.
rturnbull

하! 더 좋습니다. 하지만에 대한 labels = FALSE옵션 이 필요하다고 생각하지 않습니다 cut. 중요한 것은 5이름에 관계없이 split 함수에 전달되는 반복 요소 가 있다는 것 입니다.
Billywob

0

클로저-52 자

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

출력 예 (별도의 행을 하위 목록으로 제공함) :

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

파이썬 2, 84 바이트

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

목록으로 출력이 목록이면 괜찮은 경우 75 바이트 솔루션이 있습니다.

from random import*
print[sample(range(1+i*15,16+i*15),5)for i in range(5)]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.