Tạo một ô chữ độc đáo có thể giải được, không có manh mối


21

Bạn có thể tưởng tượng việc giải câu đố ô chữ New York Times mà không có bất kỳ manh mối nào không? Có thể không phải với tất cả sự sáng tạo và các từ và cụm từ mới xuất hiện trong các ô chữ hiện đại, nhưng với một danh sách từ cố định có một số hy vọng. Trong thử thách này, bạn tạo ra một lưới ô chữ trong đó về mặt lý thuyết là có thể.

Các thách thức

Tối đa hóa số lượng hình vuông màu trắng trong một White-và đen bóng mờ 15x15 lưới câu đố ô chữ, sao cho các ô vuông màu trắng có thể được duy nhất đầy chữ để mỗi bên kia và xuống từ xuất hiện trong danh sách từ Scrabble quốc tế.

Làm rõ lưới xây dựng

Trong các tờ báo của Hoa Kỳ, lưới ô chữ thường được xây dựng sao cho mọi chữ cái đều được "kiểm tra", nghĩa là nó là một phần của cả từ "ngang" và từ "xuống". Ở Anh và các nơi khác (đặc biệt là các ô chữ mật mã ), điều này không nhất thiết phải như vậy: nếu một từ "ngang" hoặc "xuống" sẽ chỉ là một chữ cái, thì nó không cần phải là một từ thực sự (như "A" hoặc "I "). Đối với thử thách này, hãy làm theo các quy tắc thoải mái hơn: các từ đơn không cần xuất hiện trong danh sách từ.

Có nhiều truyền thống khác (ở Mỹ và các nơi khác), không có truyền thống nào cần phải tuân theo trong thử thách này. Ví dụ, các từ chỉ có thể dài hai chữ cái, các từ được phép lặp lại và lưới không cần phải có tính đối xứng (quay).

Điều này thậm chí có thể?

Vâng! Người ta có thể viết một đoạn script ngắn để xác minh rằng giải pháp duy nhất cho lưới trống sau bên trái là lưới được điền ở bên phải:

Lưới 15x15 với bốn chữ 15 chữ cái được gạch chéo ở chữ cái thứ tư và thứ năm

Người ta có thể hiển thị lưới đầy ở định dạng máy tính có thể đọc được như sau:

###CH##########
###YE##########
###AM##########
CYANOCOBALAMINE
HEMOCHROMATOSES
###CH##########
###OR##########
###BO##########
###AM##########
###LA##########
###AT##########
###MO##########
###IS##########
###NE##########
###ES##########

Giải pháp của bạn

Lưới ở trên có 56 ô vuông màu trắng trong tổng số 225 ô vuông trong lưới 15x15. Điều này phục vụ như là một cơ sở cho thách thức này. Các lưới có ít hình vuông màu trắng cũng có thể thú vị vì những lý do khác ngoài điểm số của chúng, ví dụ nếu chúng thỏa mãn một số truyền thống thẩm mỹ được đề cập ở trên.

Vui lòng gửi giải pháp của bạn ở cùng định dạng với đường cơ sở có thể đọc được trên máy tính. Vui lòng bao gồm mã xác minh rằng có một giải pháp duy nhất cho lưới của bạn.

Các đoạn mã thú vị (ví dụ để tìm kiếm không gian của các khả năng) và thảo luận về cách bạn tìm thấy lưới của mình được đánh giá cao.

Danh sách từ

Danh sách từ Scrabble quốc tế trước đây được gọi là SOWPODS và bây giờ được gọi là Collins Scrabble Words (CSW). Nó được sử dụng ở hầu hết các quốc gia (đặc biệt là Hoa Kỳ). Chúng tôi thích sử dụng danh sách này vì nó bao gồm các cách viết tiếng Anh và thường có nhiều từ đáng kể hơn danh sách từ tiếng Mỹ. Có nhiều phiên bản của danh sách này khác nhau một chút. Bạn có thể tìm thấy các phiên bản khác nhau của danh sách này được liên kết từ Wikipedia , trên Github , trong Ngôn ngữ tự nhiên của Peter Norvig và các nơi khác, thường vẫn được gọi là "SOWPODS".

Thách thức này rất nhạy cảm với tính chất rộng lớn của việc lựa chọn danh sách từ, nhưng ít hơn đối với các chi tiết nhỏ hơn. Ví dụ, ví dụ cơ bản ở trên hoạt động với bất kỳ phiên bản CSW nào, nhưng CHkhông phải là một từ trong danh sách từ Scrabble của Mỹ. Trong trường hợp có sự khác biệt, chúng tôi muốn sử dụng CSW19, phiên bản gần đây nhất của CSW. (Nếu chúng tôi sử dụng danh sách này, được phát hành trong năm nay, chúng tôi có thể mong đợi câu trả lời cho thách thức này sẽ còn hiệu lực lâu hơn). Bạn có thể truy vấn danh sách này một cách tương tác trên trang web tìm từ chính thức của Scrabble hoặc tải xuống (cũng như phiên bản trước đó, CSW15) từ Sàn giao dịch trò chơi Board & Card hoặc Reddit r / scrabble .

Tldr : danh sách từ có thẩm quyền cho thử thách này có sẵn dưới dạng tệp văn bản thuần túy (279.496 từ, mỗi dòng trên một) trên Sàn giao dịch trò chơi thẻ & thẻ .

Thảo luận thêm

Một vấn đề được nêu ra trong một câu trả lời và nhận xét sớm là tại sao các ô chữ hiện có (ví dụ: trong NYT) không trả lời câu hỏi này. Cụ thể, kỷ lục về số lượng ô vuông đen ít nhất (và do đó là số ô vuông trắng lớn nhất) cho ô chữ NYT được công bố đã là bản ghi nổi tiếng nhất trong ô chữ. Tại sao chúng ta không thể sử dụng lưới ghi âm ? Có một vài vấn đề:

  • Nhiều câu trả lời trong ô chữ NYT không xuất hiện trong danh sách từ của chúng tôi. Ví dụ: lưới ghi âm bao gồm PEPCID(tên thương hiệu), APASSAGETOINDIA( tên riêng gồm bốn từ cho phim và tiểu thuyết, được viết không có dấu cách) và STE(viết tắt của "Ste"). Dường như lưới bản ghi không thể giải được bằng các từ Scrabble.

  • Chỉ mở rộng danh sách từ để bao gồm nhiều từ hơn không nhất thiết phải có thách thức này: ngay cả khi tất cả các từ trong lưới bản ghi xuất hiện trong danh sách từ của chúng tôi, giải pháp sẽ không phải là duy nhất nếu không có manh mối. Thường có thể thay đổi một số chữ cái ở cuối câu trả lời trong khi giữ mọi thứ một từ. (Ví dụ, chữ cái dưới cùng bên phải có thể được thay đổi từ a Dthành mộtR .) Thật vậy, đây là một phần của quy trình xây dựng (con người) khi viết ô chữ, cố gắng thu được các từ "tốt hơn".

    Lý do các ô chữ thông thường (thường) có một giải pháp duy nhất là các đầu mối giúp thu hẹp các câu trả lời đúng. Nếu bạn chỉ đơn giản là cố gắng lấp đầy lưới bằng các từ mà không sử dụng manh mối, có khả năng sẽ không có khả năng hoặc nhiều khả năng. Dưới đây là ví dụ về ba lần điền khác nhau (sử dụng danh sách từ cho thử thách này!) Cho cùng một lưới (một cách tương đối thường được sử dụng trong NYT):

Lưới ô chữ NYT phổ biến nhất, được điền theo ba cách khác nhau với các từ Scrabble.

  • Một vấn đề khác được nêu ra trong các ý kiến ​​là một số lượng không tin rằng câu hỏi này là một thách thức mã hóa . Có lẽ nó không rõ ràng ngay lập tức, nhưng thật khó để tìm thấy một câu trả lời hợp lệ duy nhất cho thách thức này . Tìm đường cơ sở ở trên liên quan đến nhiều chương trình tìm kiếm được chế tạo đặc biệt không được đảm bảo để tìm câu trả lời. Cá nhân tôi thậm chí không biết một cách chung để giải quyết một lưới tùy ý, nếu bạn muốn câu trả lời trong thời gian hợp lý. Các chương trình xây dựng ô chữ hiện có có thể giúp ích, nhưng tôi cho rằng (có lẽ không chính xác) rằng chúng không thực sự tìm kiếm đầy đủ các khả năng. (Tôi đã sử dụng một chương trình như vậy cho ba lưới bên cạnh nhau; điều này hoạt động vì lưới cụ thể đó cho phép nhiều giải pháp.)

2
Meta post liên quan đến loại câu hỏi chung này: codegolf.meta.stackexchange.com/questions/18117/iêu
A. Rex

3
1. Bỏ tùy chọn thẩm mỹ (" Grids with fewer white squares may also be interesting for reasons other than their score, for example if they satisfy some of the aesthetic traditions mentioned above.") - tương tự như việc tránh các phần thưởng trong môn đánh gôn, tôi muốn thử thách về mã chỉ là một điều. Điều này có nghĩa là tất cả các câu trả lời có thể được so sánh như cho thích. Nó cũng làm cho nó rõ ràng khách quan, sẽ giúp mở lại phiếu bầu.
trichoplax

4
2. Chọn một danh sách từ duy nhất và nhấn mạnh vào nó cho tất cả các câu trả lời. Tldr đề cập đến một danh sách từ có thẩm quyền, nhưng cuộc thảo luận trước có thể khiến mọi người nghĩ rằng họ có thể chọn bất kỳ từ nào được đề cập. Nó có thể giúp giữ các yêu cầu nghiêm ngặt ở gần đầu bài và để làm rõ rằng các chi tiết khác không phải là một phần của đặc điểm kỹ thuật của thử thách. Lý tưởng nhất, bỏ qua bất cứ điều gì thừa thãi đến thông số kỹ thuật để giữ cho bài đăng ngắn và ngay lập tức không mơ hồ.
trichoplax

2
3. Làm cho việc bao gồm mã được sử dụng để tìm giải pháp là một yêu cầu cho câu trả lời hợp lệ.
trichoplax

3
Đây là loại thách thức có thể có lợi từ một phòng trò chuyện để mọi người thảo luận về các phương pháp tiếp cận. Nếu bạn thiết lập một phòng trò chuyện và liên kết với nó từ cuối thông số kỹ thuật, bạn có thể đăng thảo luận ở đó dưới dạng bài đăng ban đầu và đề cập đến điều này trong thử thách cho những người muốn biết thêm.
trichoplax

Câu trả lời:


9

180 ô vuông trắng

Lưới trống Dung dịch

Chiến lược của tôi chỉ đơn giản là tìm một hình chữ nhật nhỏ hơn không có hình vuông màu đen, sao cho nó có thể được điền vào một cách độc đáo. Tất cả các 2×khình chữ nhật có nhiều giải pháp. Đối với 3×khình chữ nhật, có nhiều giải pháp cho ktừ 3 ​​đến 14, nhưng có một giải pháp chính xác cho k=15.

Sau đó tôi lắp 4 hình chữ nhật như vậy vào lưới. Điều này có nghĩa là mỗi từ xuất hiện 4 lần trong giải pháp, thường được tán thành khi xây dựng ô chữ, nhưng OK cho thử thách này. Mặt khác, giải pháp này có cả đối xứng trái / phải và từ trên xuống.

Lưới máy tính có thể đọc được:

HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES
###############
HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES
###############
HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES
###############
HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES

Đây là mã R tôi đã sử dụng để tìm tất cả các giải pháp cho một kích thước lưới nhất định. Vòng lặp trên tất cả các bộ ba từ 15 chữ cái là quá chậm. Thay vào đó, tôi cố gắng điền vào hình chữ nhật bằng

  • đặt hai cột đầu tiên (hai từ 3 chữ cái)
  • sau đó lặp qua tất cả các từ 15 chữ cái bắt đầu bằng hai chữ cái đầu tiên hiện đã được giải quyết.
  • đối với mỗi lựa chọn có thể có của các từ 15 chữ cái, sau đó tôi xác minh xem tất cả các từ 3 chữ cái được tạo có trong từ điển hay không.

Ví dụ, đối với giải pháp cuối cùng, các mã đầu tiên đưa vào HOPEVO, sau đó hoàn thành HETERNORMATIVE, OVEROPINIONATEDPOSSESSEDNESSES, và cuối cùng xác nhận tất cả các từ 3 chữ ( HOP, EVO, TES, ERS, ROE, OPS, NIS, ONE, RID, MON, ANE, TAS, ITS, VEE, EDS).

Mã R

library(fastmatch)
f = "scrabble-wordlist.txt"
d = read.table(f, skip=2, as.is=T, na.strings=NULL)

d$l = apply(d, 2, nchar)
d3 = d[d$l==3, 1]

sp = function(s) strsplit(s, "")[[1]]
cm = function(v) paste0(v, collapse="")
d3s = sapply(d3, sp)

f3 = function(l){
  m = matrix("", 3, l)

  md = sapply(d[d$l == l, 1], sp)
  nf = 0

  a1 = seq(1, 3*l, by=3); a2 = a1 + 1; a3 = a1 + 2

  for(i in 1:ncol(d3s)){
    m[, 1] = d3s[, i]

    id1 = as.matrix(md[, md[1, ] == m[1, 1]])
    id2 = as.matrix(md[, md[1, ] == m[2, 1]])
    id3 = as.matrix(md[, md[1, ] == m[3, 1]])

    if(any(ncol(id1) == 0, ncol(id2) == 0, ncol(id3) == 0)) next

    for(j in 1:ncol(d3s)){
      m[, 2] = d3s[, j]

      jd1 = as.matrix(id1[, id1[2, ] == m[1, 2]])
      jd2 = as.matrix(id2[, id2[2, ] == m[2, 2]])
      jd3 = as.matrix(id3[, id3[2, ] == m[3, 2]])

      if(any(ncol(jd1) == 0, ncol(jd2) == 0, ncol(jd3) == 0)) next

      for(k1 in 1:ncol(jd1)){
        m[1, ] = jd1[, k1]

        for(k2 in 1:ncol(jd2)){
          m[2, ] = jd2[, k2]

          for(k3 in 1:ncol(jd3)){
            m[3, ] = jd3[, k3]

            w = paste0(m[a1], m[a2], m[a3])
            if(all(w %fin% d3)){
              nf = nf + 1
              print(m)
            }
            if(nf >= 2){
              print(c(l, nf))
              return()
            }
          }
        }
      }
    }
  }

  return(nf)
}

Gọi là f3(15). Mất vài giờ trên máy tính cá nhân của tôi.


@downvoter Bạn có thể bình luận?
Robin Ryder

Câu trả lời của tôi cũng bị đánh giá thấp. 🤷
A. Rex

1

182 hình vuông màu trắng

Bốn vùng 3x15 được kết nối bởi một vài hình vuông màu trắng.

Lấy cảm hứng từ câu trả lời của Robin Ryder , tôi đã cố gắng chen vào một vài hình vuông màu trắng nữa. Tôi tin rằng giải pháp này là duy nhất và tôi sẽ sớm đăng mã xác minh phù hợp.

Lưới máy tính có thể đọc được:

HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES
B##############
INCOMMUNICATIVE
NEUROANATOMICAL
DETERMINATENESS
###############
HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES
B##############
INCOMMUNICATIVE
NEUROANATOMICAL
DETERMINATENESS

184 kể từ khi monot có thể được hoàn thành độc đáo với monocot
Jonathan Allan

... làm cho "có thể ..." vì tôi chưa xác minh nó sẽ không phá vỡ tính độc đáo trên bảng!
Jonathan Allan

Tôi tò mò muốn xem mã xác minh của bạn. Tất cả những nỗ lực của tôi để xác minh lưới của bạn rất chậm.
Robin Ryder
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.