Прочитайте кроссворд с изюминкой!


13

Аналогично этому вопросу , но это вариант кроссворда!

Вместо одной буквы на квадрат сетки, вы можете иметь одну или две .

Входные данные:

  • 2d массив, или что-то еще работает на вашем языке.
  • Вы можете принять правильные данные
  • Любой размер массива должен работать

Выход:

  • Массив всех слов
    • Через и вниз
    • Все слова должны быть объединены, т. Е. Связаны в непрерывную цепочку слов (если не вернуть false)
    • Слова должны состоять как минимум из двух квадратов сетки , а не букв

Пример:

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

Возвращает:

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

Пример:

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

Возвращает:

false

Это , поэтому я буду запускать его на Windows 7 с 2,5 ГГц и 16 ГБ оперативной памяти. Если ваш код действительно эзотерический, предоставьте ссылку на компилятор, чтобы я мог его запустить.


9
Добро пожаловать в PPCG!
FlipTack

2
Вы должны заменить часть двух пробелов двумя квадратами сетки .
Габор Фекете

1
Какой размер входного размера будет измерять скорость?
Мартин Эндер

@MartinEnder примеры
epicbob57

@ epicbob57 Это кажется малым, чтобы измерить надежные тайминги. В основном вы будете измерять ввод-вывод и другие накладные расходы.
Мартин Эндер

Ответы:


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 когда подключение возвращает несколько меток. В противном случае возвращает массив допустимых слов.

Я рассчитал это timeit, time.time()используя консольную команду, timeно я не знаю, какую из них использовать или какую разместить здесь.


Я понял, что у меня нет Python 3 ... во всяком случае, я буду тестировать его с помощью time.time ()
epicbob57

Я не могу установить scipy, используя pip ...
epicbob57

ты использовал pip3?
Габор Фекете

пип 9.0.1 (python 3.5)
epicbob57

о, вы на окнах, попробуйте это с правами администратора
Габор Фекете
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.