手がかりのないユニークに解けるクロスワードを作成します…


21

ニューヨークタイムズのクロスワードパズルを手がかりなく解くことを想像できますか?おそらく、すべての創造性と新しいクロスワードに登場する新しい単語やフレーズではなく、単語リストを固定することでいくつかの希望があります。この課題では、理論上可能なクロスワードパズルグリッドを作成します。

チャレンジ

白と黒の陰影の付いた15x15クロスワードパズルグリッド内の白い四角の数を最大化して、白い四角に文字を一意に入力して、スクラブルの国際的な単語リストにすべての上下の単語が表示されるようにします。

グリッド構築の説明

米国の新聞では、クロスワードグリッドは通常、すべての文字が「チェック」されるように構築されます。つまり、「クロス」ワードと「ダウン」ワードの両方の一部です。英国およびその他の地域(特に不可解なクロスワード)では、これは必ずしも当てはまりません。「横切る」または「下」の単語が1文字だけの場合、実際の単語(「A」や「I ")。この課題では、より緩和されたルールに従います。1文字の単語は単語リストに表示する必要はありません。

他にもさまざまな伝統があり(米国およびその他の地域)、この挑戦​​で従う必要はありません。たとえば、単語の長さは2文字のみで、単語の繰り返しが許可されているため、グリッドは(回転)対称である必要はありません。

これも可能ですか?

はい!短いスクリプトを記述して、左側の次の空白グリッドに対する一意のソリューションが右側の塗りつぶされたグリッドであることを確認できます。

4文字と5文字で交差する4つの15文字の単語を含む15x15グリッド

次のように、コンピュータが読み取り可能な形式で塗りつぶされたグリッドを表示できます。

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

あなたのソリューション

上のグリッドには、15x15グリッドの合計225個の正方形のうち56個の白い正方形があります。これは、この課題のベースラインとして機能します。また、白い正方形の数が少ないグリッドは、スコア以外の理由で、たとえば上記の美的伝統のいくつかを満たしている場合に興味深いかもしれません。

上記のコンピューター読み取り可能なベースラインと同じ形式でソリューションを送信してください。グリッドに独自のソリューションがあることを確認するコードを含めてください。

興味深いコードスニペット(たとえば、可能性のあるスペースを検索するため)や、グリッドを見つけた方法についての議論を歓迎します。

単語リスト

国際的なスクラブルワードリストは、以前はSOWPODSとして知られており、現在はコリンズスクラブルワード(CSW)と呼ばれています。ほとんどの国(特に米国を除く)で使用されています。このリストには、英国の綴りが含まれており、一般的にアメリカの単語リストよりもかなり多くの単語があるため、このリストを使用することを好みます。このリストには、わずかに異なる複数のエディションがあります。このリストのさまざまなバージョンは、WikipediaGithubPeter NorvigのNatural Language Corpusなどでリンクされており、多くの場合「SOWPODS」と呼ばれています。

この課題は、単語リストの選択の幅広い性質に非常に敏感ですが、小さな詳細にはそれほど敏感ではありません。たとえば、上記のベースラインの例はどのエディションのCSWでも機能しますCHが、アメリカのスクラブルの単語リストには含まれていません。矛盾がある場合は、CSWの最新版であるCSW19を使用することをお勧めします。(今年リリースされたこのリストを使用すると、この課題に対する回答がより長く有効であると期待できます)。このリストは、公式のScrabbleワードファインダーサイトで対話形式でクエリするか、Board&Card Games Stack ExchangeまたはRedditのr / scrabbleから(前のバージョンのCSW15と同様に)ダウンロードできます。

Tldr:このチャレンジの信頼できる単語リストは、Board&Card Games Stack Exchangeでプレーンテキストファイル(279,496単語、1行に1つ)として入手できます。

さらなる議論

初期の回答とコメントで提起された問題の1つは、既存のクロスワード(NYTなど)がこの質問に答えない理由です。具体的には、公開されたNYTクロスワードの最小数の黒い正方形(したがって、最大数の白い正方形)のレコードは、クロスワードで最も有名なレコードです。レコードグリッドを使用できないのはなぜですか?いくつかの問題があります。

  • NYTクロスワードの回答の多くは、単語リストに載っていません。たとえば、レコードグリッドには、PEPCID(ブランド名)、APASSAGETOINDIA(スペースなしで記述された映画と小説の4単語の固有名)、およびSTE(「Sainte」の略語)が含まれます。レコードグリッドはスクラブルの単語では解決できないようです。

  • 単語リストを拡張して単語を追加するだけでは、必ずしもこの課題に役立ちません。レコードグリッド内のすべての単語が単語リストに表示されたとしても、解決策は手がかりがないと一意ではありません。多くの場合、すべての単語を保持しながら、回答の最後にある文字を変更することが可能です。(たとえば、右下の文字はa DからR。に変更できます。)実際、これは、クロスワードを作成して「より良い」単語を取得しようとする(人間の)構築プロセスの一部です。

    通常のクロスワードが(通常)独自の解決策を持っている理由は、手がかりが正しい答えを絞り込むのに役立つからです。手がかりを使わずに単にグリッドを単語で埋めようとすると、可能性がないか、多くの可能性がある可能性があります。同じグリッド(NYTで比較的頻繁に使用されるもの)の3つの異なる塗りつぶし(このチャレンジの単語リストを使用)の例を次に示します。

最も一般的なNYTクロスワードグリッド。スクラブルワードで3つの異なる方法で埋められます。

  • コメントで提起された別の問題はこの質問がコーディング挑戦であるという不信のある量です。すぐには明確ではないかもしれませんが、この課題に対する有効な答えを1つも見つけることは困難です。上記のベースラインの検索には、答えを見つけることが保証されていない複数の特別に作成された検索プログラムが含まれていました。あなたが妥当な時間内に答えを望むなら、私は個人的に任意のグリッドを解く一般的な方法さえ知りません。既存のクロスワード構築プログラムは役立ちますが、可能性の完全な検索は実際には行わないと仮定します(おそらく間違っています)。(上記の3つの並列グリッドにこのようなプログラムを使用しました。これは、特定のグリッドが多くのソリューションを可能にするため機能しました。)

2
:質問のこの一般的なタイプに関連するメタポストcodegolf.meta.stackexchange.com/questions/18117/...
A.レックス

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.")を落とす-コードゴルフでボーナスを回避するのと同様に、コードチャレンジは1つだけであると思います。これは、すべての回答を同じように比較できることを意味します。また、明確に客観的になり、投票の再開に役立ちます。
trichoplax

4
2.単一の単語リストを選択し、すべての回答に対してそれを主張します。tldrは権威ある単語リストに言及していますが、事前の議論により、人々は言及されたもののいずれかを選択できると考えるようになります。厳密な要件を投稿の最上部近くに維持し、他の詳細が課題の仕様の一部ではないことを非常に明確にすることが役立つ場合があります。理想的には、仕様に不要なものはすべて省略して、投稿を短く、すぐに明確にします。
trichoplax

2
3.ソリューションを見つけるために使用されるコードを含めることを有効な回答の要件にします。
trichoplax

3
これは、人々がアプローチを議論するためのチャットルームの恩恵を受ける可能性のある種類の課題です。チャットルームを設定し、仕様の最後からチャットルームにリンクする場合は、最初の投稿としてそこにディスカッションを投稿し、詳細を知りたい人のためのチャレンジでこれに言及することができます。
trichoplax

回答:


9

180個の白い四角

空白のグリッド 溶液

私の戦略は、黒い四角形のない小さな四角形を見つけて、一意に塗りつぶすことでした。すべて2×k長方形には複数のソリューションがあります。以下のために3×k長方形のための複数の解決策が存在するk3〜14が、しかしのために正確に一つの解決策がありますk=15

次に、グリッドにこのような4つの長方形をはめ込みます。これは、各単語がソリューションに4回出現することを意味します。これは通常、クロスワードの構築では眉をひそめますが、この課題には問題ありません。一方、このソリューションには左右対称と上下対称の両方があります!

コンピューターが読み取り可能なグリッド:

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

これは、特定のグリッドサイズのすべてのソリューションを見つけるために使用したRコードです。15文字の単語のすべてのトリプルをループするのは遅すぎます。代わりに、私は長方形を

  • 最初の2列(2文字の3文字の単語)の設定
  • 次に、最初に解決された最初の2文字から始まる15文字すべての単語をループします。
  • 15文字の単語を選択するたびに、生成された3文字の単語がすべて辞書にあるかどうかを確認します。

例えば、最終的な溶液のために、コードが最初に入れHOPそしてEVO、その後に完了しHETERNORMATIVEOVEROPINIONATEDそしてPOSSESSEDNESSES、最終的にすべての3文字の単語を検証し(HOPEVOTESERSROEOPSNISONERIDMONANETASITSVEEEDS)。

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.レックス

1

182個の白い正方形

数個の白い正方形で接続された4つの3x15領域。

ロビン・ライダーの答えに触発、私はさらに数個の白い四角を絞ろうとしました。このソリューションは独自のものであると考えており、それに応じてすぐに確認コードを投稿します。

コンピューターが読み取り可能なグリッド:

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

184モノコットでユニークに完成できるので
ジョナサンアラン

...その「多分...」を確認してください。
ジョナサンアラン

確認コードをご覧ください。あなたのグリッドを検証する私の試みはすべて非常に遅いです。
ロビンライダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.