Leggi un cruciverba con una svolta!


13

Simile a questa domanda , ma questa è una variazione di parole crociate!

Invece di una sola lettera per quadrato della griglia, puoi averne una o due .

Ingresso:

  • Un array 2d o qualunque cosa funzioni nella tua lingua.
  • Puoi assumere input validi
  • Qualsiasi dimensione dell'array deve funzionare

Produzione:

  • Una matrice di tutte le parole
    • Attraverso e giù
    • Tutte le parole devono essere unite, cioè collegate in una catena ininterrotta di parole (se non restituiscono false)
    • Le parole devono essere almeno due quadrati della griglia , non lettere

Esempio:

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

Ritorna:

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

Esempio:

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

Ritorna:

false

Questo è , quindi lo eseguirò su Windows 7 con 2,5 Ghz e 16 GB di RAM. Se il tuo codice è veramente esoterico, fornisci un link al compilatore in modo che io possa effettivamente eseguirlo.


9
Benvenuti in PPCG!
FlipTack

2
È necessario sostituire la parte dei due spazi con due quadrati della griglia .
Gábor Fekete,

1
Con quale dimensione verrà misurata la velocità in ingresso?
Martin Ender,

@MartinInserisci gli esempi
epicbob57

@ epicbob57 Questo sembra un modo per misurare i tempi affidabili. Misureresti principalmente I / O e altre spese generali.
Martin Ender,

Risposte:


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

Uso:

La funzione accetta una matrice di array di stringhe come input:

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

Restituisce la stringa falsequando la connettività restituisce più etichette. Restituisce una serie di parole valide in caso contrario.

L'ho cronometrato con timeit, time.time()e usando il comando console timee ma non so quale usare o quale pubblicare qui.


Mi sono reso conto che non ho Python 3 ... comunque, lo proverò usando time.time ()
epicbob57

Non riesco a installare scipy usando pip ...
epicbob57

hai usato pip3?
Gábor Fekete,

pip 9.0.1 (python 3.5)
epicbob57

oh sei su windows, provalo con i privilegi di amministratore
Gábor Fekete,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.