Przeczytaj krzyżówkę z niespodzianką!

13

Podobne do tego pytania , ale jest to wariant krzyżówki!

Zamiast tylko jednej litery na kwadrat siatki, możesz mieć jedną lub dwie .

Wejście:

  • Tablica 2D lub cokolwiek, co działa w Twoim języku.
  • Możesz założyć prawidłowe dane wejściowe
  • Każdy rozmiar tablicy musi działać

Wynik:

  • Tablica wszystkich słów
    • W poprzek i w dół
    • Wszystkie słowa muszą być ze sobą połączone, tzn. Połączone w nieprzerwany łańcuch słów (jeśli nie zwróci false)
    • Słowa muszą mieć co najmniej dwa kwadraty siatki , a nie litery

Przykład:

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

Zwroty:

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

Przykład:

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

Zwroty:

false

Jest to , więc będę go uruchamiał w systemie Windows 7 z 2,5 GHz i 16 GB pamięci RAM. Jeśli twój kod jest naprawdę ezoteryczny, podaj link do kompilatora, abym mógł go uruchomić.

epicbob57
źródło
9
Witamy w PPCG!
FlipTack,
2
Należy wymienić dwie przestrzenie część z dwóch kwadratów siatki .
Gábor Fekete,
1
Jaki rozmiar wejściowy będzie mierzyć prędkość?
Martin Ender,
@MartinEnder the przykłady
epicbob57
@ epicbob57 To wydaje się zbyt mały, aby zmierzyć wiarygodne czasy. Będziesz głównie mierzył I / O i inne koszty ogólne.
Martin Ender,

Odpowiedzi:

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

Stosowanie:

Funkcja przyjmuje jako tablicę tablicę ciągów znaków:

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

Zwraca ciąg, falsegdy łączność zwraca wiele etykiet. W przeciwnym razie zwraca tablicę poprawnych słów.

I timed go timeit, time.time()a za pomocą polecenia konsoli timei ale nie wiem który z nich korzystać lub które z nich zamieszczać tutaj.

Gábor Fekete
źródło
Uświadomiłem sobie, że nie mam Python 3 ... w każdym razie przetestuję go za pomocą time.time ()
epicbob57
Nie mogę zainstalować scipy przy użyciu pip ...
epicbob57
czy używałeś pip3?
Gábor Fekete,
pip 9.0.1 (python 3.5)
epicbob57
och, jesteś w systemie Windows, wypróbuj go z uprawnieniami administratora
Gábor Fekete,