Gian lận tối ưu tại BINGO


12

Bạn phát ốm vì những người chơi khác thông báo "BINGO" và bước đi đắc thắng trước bạn để nhận giải thưởng của họ. Lần này sẽ khác. Bạn đã hối lộ người gọi để cung cấp cho bạn các cuộc gọi BINGO trước thời hạn, theo thứ tự họ sẽ được gọi. Bây giờ bạn chỉ cần tạo một bảng BINGO sẽ giành chiến thắng sớm nhất có thể cho các cuộc gọi đó, đảm bảo cho bạn một chiến thắng (hoặc một trận hòa không chắc chắn).

Đưa ra một chuỗi phân tách hoặc danh sách các cuộc gọi theo thứ tự, theo định dạng BINGO điển hình (bao gồm các chữ cái, ví dụ B9, hoặc G68xem các quy tắc để biết thêm thông tin), xuất ra một danh sách ma trận hoặc 2D đại diện cho bảng BINGO tối ưu cho các cuộc gọi đó. Giả sử đầu vào sẽ luôn hợp lệ.

Quy tắc BINGO:

  • Bảng 5x5
  • "BINGO" là khi thẻ của bạn có 5 số liên tiếp từ các số được gọi cho đến nay.
  • Quảng trường trung tâm là miễn phí (tự động được tính vào BINGO) và có thể được biểu thị bằng khoảng trắng, danh sách trống -1hoặc 0.
  • Các cột 5 được đại diện bởi các chữ cái B, I, N, G, O, tương ứng.
  • Cột đầu tiên có thể chứa các số 1-15, 16-30 thứ hai, ... và thứ năm 61-75.
  • Các chữ cái và số được lấy cho đầu vào có thể tùy ý được phân định (bởi một cái gì đó có ý nghĩa, như một ,hoặc khoảng trắng) hoặc được lấy dưới dạng một bộ ký tự và một số.
  • Đầu ra chỉ yêu cầu số ở mỗi nơi trong ma trận.
  • Các hình vuông sẽ không đóng góp cho BINGO sớm của bạn phải hợp lệ, nhưng không phải là tối ưu.
  • Đây là môn đánh gôn, chơi mã ngắn nhất

Ví dụ:

Tôi đang sử dụng định dạng đầu vào này cho các ví dụ, vì nó ngắn hơn. Xem phần trên để biết các định dạng đầu vào / đầu ra chấp nhận được.

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

Bạn nói rằng các chữ cái được bao gồm. Có ý nghĩa gì?
Màu xanh

1
@muddyfish Theo quy tắc BINGO :The 5 columns are represented by the letters B,I,N,G,O, respectively.
JungHwan Min

Câu trả lời:


4

Toán học, 302 byte

(b=Prepend;i=1;n=15#&@@#-15+Range@5&;g=#~b~{N,0};o={#2,#3,#,##4}&@@#&;While[(l=Length@Union[t=(k=Take)[#&@@@g,i]])<5&&Max[#2&@@@Tally@t]<5,i++];If[l<5,m=#&@@Commonest@t;If[m===#,o[g~k~i/.{m,x_}->x/.{_,_}->Nothing],n@#2]&,o@DeleteDuplicates@b[n@#2,<|#->#2&@@@Reverse@g|>@#]~k~5&]~MapIndexed~{B,I,N,G,O})&

Hàm không tên được lấy làm đối số của nó một danh sách các cặp được sắp xếp, chẳng hạn như {{N,42},{N,34},{O,66},{N,40},...}(lưu ý rằng phần tử đầu tiên trong mỗi cặp được sắp xếp không phải là một chuỗi mà là một biểu tượng trần trụi) và trả về một danh sách các số nguyên 2D, trong đó danh sách con đại diện cho các cột (không phải hàng) của bảng bingo.

Đầu ra cho trường hợp thử nghiệm đầu tiên:

{{1,3,2,4,5},{17,18,16,19,20},{31,32,0,33,34},{46,48,47,49,50},{62,63,61,64,65}}

Nói chung, khi lô tô sớm nhất có thể xảy ra do một số được gọi trong mỗi hàng B / I / G / O, thì những số đó sẽ nằm ở hàng giữa; mỗi cột sẽ chứa bốn số nhỏ nhất có thể (lấy số đã sử dụng vào tài khoản). Ví dụ: nếu trường hợp thử nghiệm đầu tiên được thay đổi để số thứ hai được gọi là B12thay vìB2 , thì cột đầu tiên của bảng đầu ra sẽ là {1,2,12,3,4}.

Đầu ra cho trường hợp thử nghiệm thứ hai:

{{1,2,3,4,5},{16,17,18,19,20},{42,34,0,40,41},{46,47,48,49,50},{61,62,63,64,65}}

Nói chung, khi lô tô sớm nhất có thể xảy ra do năm số được gọi trong một cột (hoặc bốn được gọi trong cột N), thì bốn cột còn lại chứa năm số nhỏ nhất có thể theo thứ tự.

Nếu trường hợp thử nghiệm thứ hai được thay đổi từ {{N,42},{N,34},{O,66},{N,40},...}thành {{O,72},{O,74},{O,66},{N,40},...}(chỉ hai mục đầu tiên thay đổi), thì đầu ra là:

{{1,2,3,4,5},{16,17,18,19,20},{31,32,33,34,35},{46,47,48,49,50},{74,66,72,65,63}}

Một số phiên bản không linh hoạt:

(b=Prepend;i=1;n=15First[#]-15+Range[5]&;g=b[#,{N,0}];o={#2,#3,#,##4}&@@#&;
While[
    (l=Length[Union[t=(k=Take)[Apply[#&,g,{1}],i]]])<5
  &&
    Max[Apply[#2&,Tally[t],{1}]]<5,
  i++];
MapIndexed[
  If[l<5,
    m=First[Commonest[t]];If[m===#,o[k[g,i]/.{m,x_}->x/.{_,_}->Nothing],n[#2]]&,
    k[
      o[DeleteDuplicates[b[n[#2],Association[Apply[#->#2&,Reverse[g],{1}]][#]]]]
    ,5]&
  ],{B,I,N,G,O}
])&

Dòng đầu tiên chủ yếu là các định nghĩa để rút ngắn mã, mặc dù đặt gtrước hình vuông trung tâm {N,0}vào đầu vào để đơn giản hóa việc tìm kiếm lô tô. ( nHàm này cung cấp năm số lô tô hợp pháp nhỏ nhất trong #cột thứ 1, được lập chỉ mục 1. oHàm này lấy 5-tuple và di chuyển phần tử đầu tiên để nó trở thành số thứ ba.)

Các Whilevòng lặp trong dòng 2-6 thấy phân khúc ban đầu nhỏ nhất của các đầu vào có chứa một bingo. (Các thử nghiệm dòng thứ ba cho các bingos một trong mỗi cột, trong khi các dòng thứ năm kiểm tra các bingos cột đơn).

Đối với bất kỳ chức năng nào F, toán tử MapIndexed[F,{B,I,N,G,O}](bắt đầu trong dòng 7) tạo ra 5-tuple {F{B,1},F{I,2},F{N,3},F{G,4},F{O,5}}(tốt, về mặt kỹ thuật là nó {F{B,{1}},...}); chúng tôi áp dụng một hàm Ftạo ra một cột bingo trong hai đối số của nó. Tuy nhiên, chức năng đó phụ thuộc vào loại bingo được tìm thấy: dòng 8 là đúng khi chúng ta có một lô tô một cột, trong trường hợp đó, hàm (dòng 9) sử dụng các số đầu vào có liên quan trong cột bingo và các số mặc định trong các cột khác. Trong trường hợp khác, hàm (dòng 10-12) sử dụng các số đầu vào có liên quan ở trung tâm của mỗi cột và các số mặc định ở nơi khác.


2
Cái gì, không có Bingochức năng tích hợp?
mbomb007

Nhà chờ, tích hợp Bingokhông được phép? <chạy để thay đổi câu trả lời>
Greg Martin

3

JavaScript (ES6) 372 byte

Có lẽ vẫn có thể chơi golf một chút, nhưng tôi không thấy thế nào. Gợi ý được đánh giá cao;)

A=a=>[1,2,3,4,5].map(x=>x+15*a),F=a=>{b=[[],[],[i=0],[],[]],a.replace(/[^0-9 ]/g,"").split` `.some(x=>{b[--x/15|(c=0)].push(++x);return b.some((x,i)=>(d=x.length)>4||d==1&i-2&&++c>3)});for(e=[A(0),A(1),A(2),A(3),A(4)];i<5;a=b[i][0],b[i][0]=b[i][2],b[i++][2]=a)for(j=0;j<5&b[i].length<5;j++)b[i][j]<i*15+5?e[i].splice(e[i].indexOf(b[i][j]),1):b[i][j]=e[i].shift();return b}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.