Bir bükülme ile bir bulmaca okuyun!


13

Bu soruya benzer , ancak bu bir bulmaca varyasyonu!

Izgara karesi başına yalnızca bir harf yerine, bir veya iki tane olabilir .

Giriş:

  • 2d dizisi veya dilinizde çalışan her şey.
  • Geçerli girişleri kabul edebilirsiniz
  • Herhangi bir dizi boyutu çalışmalıdır

Çıktı:

  • Tüm kelimelerin bir dizisi
    • Boyunca ve aşağı
    • Tüm kelimeler birleştirilmelidir, yani kesintisiz bir kelime zincirine bağlanmalıdır (yanlış döndürülmezse)
    • Kelimeler en az iki ızgara karesi olmalı , harf değil

Misal:

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

İadeler:

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

Misal:

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

İadeler:

false

Bu , bu yüzden 2.5ghz ve ram 16gb ile windows 7 üzerinde çalışacağız. Kodunuz gerçekten ezoterik ise, gerçekten çalıştırabilmem için derleyiciye bir bağlantı sağlayın.


9
PPCG'ye Hoşgeldiniz!
FlipTack

2
Sen değiştirmelisiniz iki boşluk ile parçasını iki ızgara kareler .
Gábor Fekete

1
Hız hangi boyutta giriş boyutuyla ölçülecek?
Martin Ender

@MartinÖrnekleri inceleyin
epicbob57

@ epicbob57 Bu güvenilir zamanlamaları ölçmek için küçük bir yol gibi görünüyor. Çoğunlukla G / Ç ve diğer ek yükü ölçüyorsunuz.
Martin Ender

Yanıtlar:


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

Kullanımı:

İşlev, bir dizi dizeyi girdi olarak alır:

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

falseBağlantı birden fazla etiket döndürdüğünde dizeyi döndürür. Aksi takdirde geçerli sözcük dizisini döndürür.

Bunu birlikte zaman aşımına timeit, time.time()ve konsol komutunu kullanarak timeve ama bir Kullanılacak bilmiyorsanız veya hangisini buraya göndermek için.


Python 3'üm olmadığını fark ettim ... neyse, ben time.time () kullanarak test edeceğim
epicbob57

Pip kullanarak
scipy

pip3 kullandın mı
Gábor Fekete

pip 9.0.1 (python 3.5)
epicbob57

oh, penceredeyseniz, yönetici ayrıcalıklarıyla deneyin
Gábor Fekete
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.