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


13

Подібно до цього питання , але це варіація кросворду!

Замість однієї літери на квадрат сітки ви можете мати одну або дві .

Вхід:

  • 2d масив або все, що працює на вашій мові.
  • Ви можете припустити дійсні входи
  • Будь-який розмір масиву повинен працювати

Вихід:

  • Масив усіх слів
    • Поперек і вниз
    • Усі слова повинні бути об'єднані разом, тобто пов'язані в нерозривний ланцюжок слів (якщо не повертати помилкові)
    • Слова повинні бути не менше двох квадратних сіток , а не літери

Приклад:

[["",  "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

Пітон 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

ой ви на Windows, спробуйте це з адміністратором привілеїв
Gábor Fekete
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.