단서없이 독창적으로 해결할 수있는 낱말 맞추기


21

단서없이 New York Times 크로스 워드 퍼즐을 푸는 것을 상상할 수 있습니까? 어쩌면 현대의 낱말에 나타나는 모든 창의성과 새로운 단어와 문구가 아니라 고정 된 단어 목록이 있으면 희망이 있습니다. 이 과제에서는 이론적으로 가능한 크로스 워드 퍼즐 그리드를 만듭니다.

도전

흰색과 검은 색 음영 15x15 크로스 워드 퍼즐 그리드에서 흰색 사각형의 수를 최대화하여 흰색 사각형에 문자를 고유하게 채울 수 있으므로 모든 글자와 아래 단어가 국제 글자 맞추기 단어 목록에 표시됩니다.

그리드 구성 설명

미국 신문에서 크로스 워드 그리드는 일반적으로 모든 문자가 "체크"되도록 구성됩니다. 즉, " 크로스 "단어와 "다운"단어의 일부입니다. 영국 및 기타 지역 (특히 암호 크로스 워드 )에서는 반드시 그런 것은 아닙니다. "across"또는 "down"단어가 하나의 문자 일 경우 실제 단어 일 필요는 없습니다 (예 : "A"또는 "I "). 이 문제를 해결하려면보다 완화 된 규칙을 따르십시오. 한 글자로 된 단어는 단어 목록에 나타나지 않아도됩니다.

다른 많은 전통 (미국과 다른 곳에서)이 있지만이 도전에서 따를 필요는 없습니다. 예를 들어 단어는 두 글자 만 가능하며 단어를 반복 할 수 있으며 그리드에는 (회전) 대칭이 필요하지 않습니다.

이것도 가능합니까?

예! 왼쪽의 다음 빈 그리드에 대한 고유 한 솔루션이 오른쪽의 채워진 그리드인지 확인하는 간단한 스크립트를 작성할 수 있습니다.

네 글자와 다섯 글자로 된 15 개의 글자로 구성된 15x15 격자

다음과 같이 채워진 그리드를 컴퓨터가 읽을 수있는 형식으로 표시 할 수 있습니다.

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

당신의 솔루션

위의 격자는 15x15 격자에 총 225 개의 사각형 중 56 개의 흰색 사각형이 있습니다. 이것은이 도전에 대한 기준으로 사용됩니다. 흰색 사각형이 적은 격자도 점수 이외의 이유로 흥미로울 수 있습니다 (예 : 위에서 언급 한 미적 전통 중 일부를 만족하는 경우).

위의 컴퓨터가 읽을 수있는 기준과 같은 형식으로 솔루션을 제출하십시오. 그리드에 고유 한 솔루션이 있는지 확인하는 코드를 포함하십시오.

흥미로운 코드 스 니펫 (예 : 가능성의 공간을 검색하기위한 것)과 그리드를 찾은 방법에 대한 토론.

단어 목록

국제 글자 맞추기 단어 목록은 이전에 SOWPODS로 알려졌으며 현재는 이름을 Collins Scrabble Words (CSW)라고합니다. 대부분의 국가에서 사용됩니다 (특히 미국 제외). 영국식 철자를 포함하고 일반적으로 미국 단어 목록보다 단어가 상당히 많기 때문에이 목록을 사용하는 것이 좋습니다. 이 목록에는 약간 다른 판이 여러 개 있습니다. Wikipedia , Github , Peter Norvig의 Natural Language Corpus 및 종종 "SOWPODS"라고도하는 다른 버전의이 목록을 찾을 수 있습니다 .

이 과제는 단어 목록 선택의 광범위한 특성에 매우 민감하지만 세부 사항은 작습니다. 예를 들어, 위의 기준선 예제는 모든 버전의 CSW에서 작동하지만 CHAmerican Scrabble 단어 목록의 단어는 아닙니다. 불일치가 발생하는 경우 최신 버전의 CSW 인 CSW19를 사용하는 것이 좋습니다. (올해 출시 된이 목록을 사용하면이 과제에 대한 답변이 더 오래 유효 할 것으로 예상 할 수 있습니다). 공식 Scrabble 단어 찾기 사이트 에서이 목록을 대화식으로 쿼리 하거나 Board & Card Games Stack Exchange 또는 Reddit의 r / scrabble 에서 이전 버전 및 CSW15를 다운로드 할 수 있습니다.

Tldr :이 챌린지에 대한 권위있는 단어 목록은 보드 및 카드 게임 스택 교환 에서 일반 텍스트 파일 (한 줄에 하나씩 279,496 단어)로 제공됩니다 .

심도 깊은 논의

조기 답변과 의견에서 제기 된 한 가지 문제는 기존 크로스 워드 (예 : NYT)가이 질문에 답변하지 않는 이유입니다. 특히, 게시 된 NYT 낱말에 대해 가장 적은 수의 검은 사각형 (따라서 가장 많은 수의 흰색 사각형)에 대한 기록이 이미 낱말에서 가장 유명한 기록입니다. 레코드 그리드를 사용할 수없는 이유는 무엇 입니까? 몇 가지 문제가 있습니다.

  • NYT 낱말의 많은 답변이 우리의 단어 목록에 나타나지 않습니다. 예를 들어, 레코드 그리드에는 PEPCID(브랜드 이름), APASSAGETOINDIA(공백없이 작성된 영화 및 소설에 대한 4 단어의 적절한 이름) 및 STE( "Sainte"의 약어)가 포함됩니다. 스크래블 단어로 레코드 그리드를 해결할 수없는 것 같습니다.

  • 단어 목록을 확장하여 더 많은 단어를 포함한다고해서 반드시이 도전에 도움이되는 것은 아닙니다. 레코드 그리드의 모든 단어가 단어 목록에 나타나더라도 단서 가없는 해결책은 고유 하지 않습니다 . 모든 것을 한 단어로 유지하면서 답변 끝에서 일부 글자를 변경하는 것이 종종 가능합니다. (예를 들어, 오른쪽 아래 - 대부분의 편지가 변경 될 수 DR.), 크로스 워드 작성 "더 나은"단어를 취득 할 때 실제로, 이것은 (인간) 건설 과정의 일부입니다.

    일반적인 크로스 워드 (일반적으로)가 독특한 해결책을 갖는 이유는 단서가 정답을 좁히는 데 도움이되기 때문입니다. 단서 사용 하지 않고 단어로 그리드를 채우려 고하면 가능성이 없거나 가능성이 많을 수 있습니다. 다음은 동일한 그리드 (NYT에서 비교적 자주 사용되는)에 대한 세 가지 다른 채우기 (이 챌린지에 단어 목록 사용)의 예입니다.

가장 일반적인 NYT 크로스 워드 그리드는 글자 맞추기 단어로 세 가지 다른 방식으로 채워집니다.

  • 이 의견에서 제기 된 또 다른 이슈는이 질문이 코딩 문제 라는 약간의 불신입니다 . 아마도 분명하지는 않지만, 이 도전에 대한 하나의 유효한 답변을 찾기조차 어렵습니다 . 위의 기준선을 찾는 데는 답을 찾을 수없는 특수하게 조작 된 여러 검색 프로그램이 포함되었습니다. 합리적인 시간에 답변을 원한다면 임의의 그리드를 해결하는 일반적인 방법을 개인적으로조차 알지 못합니다 . 기존의 크로스 워드 구성 프로그램이 도움이 될 수 있지만 실제로는 가능성을 전체적으로 검색하지는 않는다고 생각합니다. (위의 3 개의 나란히 그리드에 이러한 프로그램을 사용했습니다.이 그리드는 많은 솔루션을 허용하기 때문에 효과적이었습니다.)

2
이 일반적인 유형의 질문과 관련된 메타 게시물 : codegolf.meta.stackexchange.com/questions/18117/…
A. Rex

3
1. 심미적 옵션 ( " 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.")을 삭제합니다 . 코드 골프에서 보너스를 피하는 것과 마찬가지로 코드 도전은 한 가지에 불과합니다. 이것은 모든 답을 좋아하는 것처럼 비교할 수 있음을 의미합니다. 그것은 또한 객관성을 분명히하여 재개 표에 도움이 될 것입니다.
trichoplax

4
2. 하나의 단어 목록을 선택하고 모든 답변을 요구하십시오. tldr은 권위있는 단어 목록을 언급하지만 사전에 논의하면 사람들이 언급 한 것을 선택할 수 있다고 생각하게 할 수 있습니다. 엄격한 요구 사항을 게시물 상단 근처에 유지하고 다른 세부 사항이 과제 사양의 일부가 아님을 분명히하는 것이 도움이 될 수 있습니다. 이상적으로는 게시물을 짧고 즉각적으로 명확하게 유지하기 위해 사양에 불필요한 것을 생략하십시오.
trichoplax

2
3. 솔루션을 찾는 데 사용되는 코드를 포함시켜 올바른 답변을 요구합니다.
trichoplax

3
이것은 사람들이 접근 방법을 논의하기 위해 대화방에서 도움을받을 수있는 일종의 도전입니다. 대화방을 설정하고 사양 끝에서 대화방에 연결하면 토론을 초기 게시물로 게시하고 더 많은 것을 알고 싶은 사람들에게 도전에 대해 언급 할 수 있습니다.
trichoplax

답변:


9

180 개의 흰색 사각형

빈 격자 해결책

내 전략은 단순히 검은 사각형이없는 작은 사각형을 찾아서 고유하게 채울 수 있도록하는 것이 었습니다. 모든 2×k사각형에는 여러 솔루션이 있습니다. 를 들어 3×k사각형, 여러 솔루션이 있습니다 k세 사이 (14)는,하지만 정확히 하나 개의 솔루션은 거기에있다 k=15.

그런 다음 그리드에 4 개의 사각형을 맞 춥니 다. 이것은 각 단어가 솔루션에 4 번 나타나며, 이는 일반적으로 크로스 워드 구성에서 눈살을 찌푸리게하지만이 도전에는 적합합니다. 다른 한편으로,이 솔루션은 왼쪽 / 오른쪽과 위쪽 / 아래쪽 대칭을 모두 가지고 있습니다!

컴퓨터 판독 가능 그리드 :

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

주어진 격자 크기에 대한 모든 솔루션을 찾는 데 사용한 R 코드는 다음과 같습니다. 15 글자 단어의 모든 삼중 반복이 너무 느립니다. 대신, 나는 직사각형을 채우려 고합니다.

  • 처음 두 열 설정 (2 개의 3 글자 단어)
  • 그런 다음 이제 정착 된 처음 두 글자로 시작하는 15 자 단어를 모두 반복합니다.
  • 15 글자 단어를 선택할 때마다 생성 된 모든 3 글자 단어가 사전에 있는지 확인합니다.

예를 들어, 최종 솔루션, 코드가 처음에 넣어 HOP하고 EVO, 다음으로 완성 HETERNORMATIVE, OVEROPINIONATED그리고 POSSESSEDNESSES모든 3 글자로 된 단어를, 그리고 마지막으로 확인 ( HOP, EVO, TES, ERS, ROE, OPS, NIS, ONE, RID, MON, ANE, TAS, ITS, VEE, EDS).

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

이라고합니다 f3(15). 개인용 컴퓨터에서 몇 시간을 보냈습니다.


@downvoter 댓글을 주시겠습니까?
로빈 라이더

내 답변도 다운 보트되었습니다. 🤷
A. Rex

1

182 개의 흰색 사각형

몇 개의 흰색 사각형으로 연결된 4 개의 3x15 영역.

Robin Ryder의 답변 에서 영감을 얻어 몇 개의 흰색 사각형을 더 쥐어 짜려고했습니다. 이 솔루션은 독특하다고 생각하며 곧 인증 코드를 게시 할 것입니다.

컴퓨터 판독 가능 그리드 :

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

mon? cot 님이 monocot (으)로 고유하게 완료 할 수있는 이후 184
Jonathan Allan

... 아무것도 확인하지 않았기 때문에 "아마도 ..."라고 확인하십시오.
Jonathan Allan

인증 코드가 궁금합니다. 그리드를 확인하려는 모든 시도는 엄청나게 느립니다.
로빈 라이더
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.