Baca teka-teki silang dengan twist!

13

Mirip dengan pertanyaan ini , tetapi ini adalah variasi teka-teki silang!

Alih-alih hanya satu huruf per kotak persegi, Anda dapat memiliki satu atau dua .

Memasukkan:

  • Array 2d, atau apa pun yang berfungsi dalam bahasa Anda.
  • Anda dapat menerima input yang valid
  • Ukuran array apa pun harus berfungsi

Keluaran:

  • Array semua kata
    • Di seberang dan di bawah
    • Semua kata harus digabungkan, yaitu ditautkan dalam rantai kata yang tidak terputus (jika tidak dikembalikan salah)
    • Kata-kata harus paling tidak dua kotak kotak , bukan huruf

Contoh:

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

Pengembalian:

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

Contoh:

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

Pengembalian:

false

Ini adalah , jadi saya akan menjalankan ini pada windows 7 dengan 2.5ghz dan 16gb ram. Jika kode Anda benar-benar esoteris, berikan tautan ke kompiler agar saya benar-benar dapat menjalankannya.

epicbob57
sumber
9
Selamat datang di PPCG!
FlipTack
2
Anda harus mengganti bagian dua spasi dengan dua kotak kisi .
Gábor Fekete
1
Ukuran input ukuran apa yang akan diukur dengan kecepatan?
Martin Ender
@ MartinEnder contoh
epicbob57
@ epicbob57 Tampaknya agak kecil untuk mengukur timing yang andal. Anda sebagian besar akan mengukur I / O dan overhead lainnya.
Martin Ender

Jawaban:

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

Pemakaian:

Function mengambil array dari array string sebagai input:

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

Mengembalikan string falseketika konektivitas mengembalikan banyak label. Mengembalikan array kata yang valid jika tidak.

Saya mengatur waktunya dengan timeit, time.time()dan menggunakan perintah konsol timedan tapi saya tidak tahu yang mana yang akan digunakan atau yang mana untuk posting di sini.

Gábor Fekete
sumber
Saya menyadari bahwa saya tidak memiliki Python 3 ... lagi pula, saya akan mengujinya menggunakan time.time ()
epicbob57
Saya tidak bisa menginstal Scipy menggunakan pip ...
epicbob57
apakah Anda menggunakan pip3?
Gábor Fekete
pip 9.0.1 (python 3.5)
epicbob57
oh Anda berada di windows, coba dengan hak admin
Gábor Fekete