อ่านคำไขว้อย่างรวดเร็ว!


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 กิกะเฮิร์ตซ์และ RAM 16 GB หากรหัสของคุณลึกลับจริงๆให้ลิงค์ไปยังคอมไพเลอร์เพื่อให้ฉันสามารถเรียกใช้จริง


9
ยินดีต้อนรับสู่ PPCG!
FlipTack

2
คุณควรเปลี่ยนสองช่องว่างเป็นส่วนหนึ่งกับสองตารางสี่เหลี่ยม
Gábor Fekete

1
ขนาดของอินพุตขนาดใดที่ความเร็วจะถูกวัดด้วย?
Martin Ender

@ มาร์ตินยกตัวอย่าง
epicbob57

@ epicbob57 ดูเหมือนว่าจะเล็กไปในการวัดการกำหนดเวลาที่เชื่อถือได้ คุณต้องการวัด I / O และค่าใช้จ่ายอื่น ๆ เป็นส่วนใหญ่
Martin Ender

คำตอบ:


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

การใช้งาน:

Function รับอาร์เรย์อาร์เรย์ของสตริงเป็นอินพุต:

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

ส่งคืนสตริงfalseเมื่อการเชื่อมต่อส่งคืนหลายเลเบล ส่งกลับอาร์เรย์ของคำที่ถูกต้องเป็นอย่างอื่น

ฉันหมดเวลาด้วยtimeit, time.time()และการใช้คำสั่งคอนโซลtimeและ แต่ผมไม่ทราบว่าเป็นที่หนึ่งที่จะใช้หรือที่หนึ่งที่จะโพสต์ที่นี่


ฉันรู้ว่าฉันไม่มี Python 3 ... ต่อไปฉันจะทำการทดสอบโดยใช้ time.time ()
epicbob57

ฉันไม่สามารถติดตั้ง scipy โดยใช้ pip ...
epicbob57

คุณใช้ pip3 หรือเปล่า
Gábor Fekete

pip 9.0.1 (python 3.5)
epicbob57

โอ้คุณอยู่บน windows ลองใช้กับสิทธิ์ของผู้ดูแลระบบ
Gábor Fekete
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.