クロスワードをひねりながら読んでください!


13

この質問に似ていますが、これはクロスワードのバリエーションです!

グリッドの正方形ごとに1文字だけではなく、1 または 2つのを使用できます。

入力:

  • 2次元配列、またはあなたの言語で機能するもの。
  • 有効な入力を想定できます
  • 任意の配列サイズが機能する必要があります

出力:

  • すべての単語の配列
    • 前後
    • すべての単語を結合する必要があります。つまり、切れ目のない単語のチェーンでリンクします(falseを返さない場合)
    • 単語は、文字ではなく、少なくとも2つのグリッド正方形でなければなりません

例:

[["",  "wo", "r",  "k"],
[ "",   "r",  "",   ""],
[ "he", "l",  "lo", ""],
[ "",   "d",  "ad", ""]]

戻り値:

["work", "world", "hello", "load", "dad"]

例:

[["he", "ll", "o"],
[ "",   "",   ""],
[ "wo", "r",  "ld"]]

戻り値:

false

これはので、2.5ghzと16GBのRAMを搭載したWindows 7で実行します。コードが本当に難解な場合は、実際に実行できるようにコンパイラへのリンクを提供してください。


9
PPCGへようこそ!
FlipTack 16

2
2つのスペースの部分を2つのグリッドの正方形に置き換える必要があります
ガボールフェケテ

1
どのサイズの入力サイズで速度が測定されますか?
マーティンエンダー

例@MartinEnder
epicbob57

@ epicbob57それは信頼できるタイミングを測定するために小さくする方法のようです。ほとんどの場合、I / Oおよびその他のオーバーヘッドを測定します。
マーティンエンダー

回答:


1

Python 3

import numpy
from scipy.ndimage import measurements

def crosswords(arr):
    M=numpy.asarray(arr)
    # check connectivity
    if measurements.label(numpy.where(M!='',1,0))[-1] != 1:
        return 'false'

    words = []
    def get_words(mat):
        for r in mat:
            word,counter='',0
            for c in r:
                if c=='':
                    if counter>1:
                        words.append(word)
                    word, counter = '', 0
                else:
                    word, counter = word+c, counter+1
            if counter > 1:
                words.append(word)
    get_words(M)
    # transpose M
    get_words(M.T)
    return words

使用法:

関数は、入力として文字列の配列の配列を受け取ります。

crosswords( [["", "wo", "r", "k"], [ "", "r", "", ""], [ "he", "l", "lo", ""], [ "", "d", "ad", ""]])

false接続が複数のラベルを返すときに文字列を返します。それ以外の場合、有効な単語の配列を返します。

私はそれをタイミングtimeittime.time()およびコンソールコマンドを使用timeしてますが、私はここに投稿するために使用する1またはどちらかわかりません。


私はとにかく、私は()time.timeを使用して、それをテストすることがあります... Pythonの3持っていないことに気づいた
epicbob57に

私は、scipyのダウンロード使用してピップをインストールするように見えることはできません...
epicbob57

pip3を使用しましたか?
ガボールフェケテ

pip 9.0.1(python 3.5)
epicbob57

ああ、あなたは、窓の上にある管理priviligesでそれを試してみてください
ガーボルFekete
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.