Đọc một ô chữ với một twist!


13

Tương tự như câu hỏi này , nhưng đây là một biến thể của ô chữ!

Thay vì chỉ có một chữ cái trên mỗi ô vuông, bạn có thể có một hoặc hai .

Đầu vào:

  • Một mảng 2d, hoặc bất cứ điều gì hoạt động trong ngôn ngữ của bạn.
  • Bạn có thể giả sử đầu vào hợp lệ
  • Bất kỳ kích thước mảng phải làm việc

Đầu ra:

  • Một mảng của tất cả các từ
    • Trên và xuống
    • Tất cả các từ phải được nối với nhau, nghĩa là được liên kết trong một chuỗi từ không bị gián đoạn (nếu không trả về sai)
    • Các từ phải có ít nhất hai ô vuông , không phải chữ cái

Thí dụ:

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

Trả về:

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

Thí dụ:

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

Trả về:

false

Đây là , vì vậy tôi sẽ chạy mã này trên windows 7 với 2.5ghz và 16gb ram. Nếu mã của bạn thực sự bí truyền, hãy cung cấp một liên kết đến trình biên dịch để tôi thực sự có thể chạy nó.


9
Chào mừng đến với PPCG!
FlipTack

2
Bạn nên thay thế hai phần không gian bằng hai ô vuông .
Gábor Fekete

1
Kích thước đầu vào sẽ được đo với tốc độ nào?
Martin Ender

@MartinEnder các ví dụ
epicbob57

@ epicbob57 Đó có vẻ là cách nhỏ để đo thời gian đáng tin cậy. Bạn chủ yếu là đo I / O và các chi phí khác.
Martin Ender

Câu trả lời:


1

Con trăn 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

Sử dụng:

Hàm lấy một mảng các chuỗi của chuỗi làm đầu vào:

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

Trả về chuỗi falsekhi kết nối trả về nhiều nhãn. Trả về mảng các từ hợp lệ khác.

Tôi đã hẹn giờ với nó timeit, time.time()và sử dụng lệnh console timevà nhưng tôi không biết nên sử dụng cái nào hoặc cái nào để đăng ở đây.


Tôi nhận ra rằng tôi không có Python 3 ... dù sao, tôi sẽ thử nghiệm nó bằng time.time ()
epicbob57

Tôi dường như không thể cài đặt scipy bằng pip ...
epicbob57

bạn đã sử dụng pip3?
Gábor Fekete

pip 9.0.1 (python 3.5)
epicbob57

oh bạn đang ở trên windows, hãy thử nó với quản trị viên riêng
Gábor Fekete
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.