第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何從字母矩陣中找到可能的單詞列表[Boggle Solver]

如何從字母矩陣中找到可能的單詞列表[Boggle Solver]

如何從字母矩陣中找到可能的單詞列表[Boggle Solver]最近我一直在我的iPhone上玩一款名為Scramble的游戲。有些人可能認(rèn)為這個(gè)游戲是Boggle。基本上,當(dāng)游戲開始時(shí)你得到一個(gè)像這樣的字母矩陣:F X I EA M L OE W B XA S T U游戲的目標(biāo)是盡可能多地找到可以通過將字母鏈接在一起形成的單詞。你可以從任何字母開始,并且它周圍的所有字母都是公平的游戲,然后一旦你繼續(xù)下一個(gè)字母,圍繞那個(gè)字母的所有字母都是公平的游戲,除了以前使用的任何字母。因此在上面的網(wǎng)格,例如,我能想出的話LOB,TUX,SEA,F(xiàn)AME,等詞必須至少有3個(gè)字符,并且不超過N×N個(gè)字符以上,這將是本場(chǎng)比賽16,但可以在一些實(shí)現(xiàn)改變。雖然這個(gè)游戲很有趣且令人上癮,但我顯然不是很擅長(zhǎng)它而且我想通過制作一個(gè)可以給我最好的單詞的程序來(lái)作弊(單詞越長(zhǎng),得分就越多)。(來(lái)源:boggled.org)遺憾的是,我不熟悉算法或效率等等。我第一次嘗試使用字典,如這一個(gè)(?2.3MB),并確實(shí)試圖以配合字典條目組合線性搜索。這需要很長(zhǎng)時(shí)間才能找到可能的單詞,而且由于每輪只有2分鐘,所以根本就不夠。我很想知道Stackoverflowers是否可以提供更有效的解決方案。我主要是在尋找使用Big 3 Ps的解決方案:Python,PHP和Perl,盡管Java或C ++也很酷,因?yàn)樗俣戎陵P(guān)重要。當(dāng)前的解決方案:Adam Rosenfield,Python,?20年代John Fouhy,Python,~3sKent Fredric,Perl,~1sDarius Bacon,Python,~1srvarcher,VB.NET (實(shí)時(shí)鏈接),~1sPaolo Bergantino,PHP (實(shí)時(shí)鏈接),~5s(本地~2s)
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊

我的回答與其他人一樣,但是我會(huì)發(fā)布它,因?yàn)樗雌饋?lái)比其他Python解決方案更快,從更快地設(shè)置字典。(我對(duì)John Fouhy的解決方案進(jìn)行了檢查。)設(shè)置完成后,解決的時(shí)間是噪音。

grid = "fxie amlo ewbx astu".split()nrows, ncols = len(grid), len(grid[0])# A dictionary word that could be a solution must use only the grid's# letters and have length >= 3. (With a case-insensitive match.)import re
alphabet = ''.join(set(''.join(grid)))bogglable = re.compile('[' + alphabet + ']{3,}$', re.I).match

words = set(word.rstrip('\n') for word in open('words') if bogglable(word))prefixes = set(word[:i] for word in words               for i in range(2, len(word)+1))def solve():
    for y, row in enumerate(grid):
        for x, letter in enumerate(row):
            for result in extending(letter, ((x, y),)):
                yield resultdef extending(prefix, path):
    if prefix in words:
        yield (prefix, path)
    for (nx, ny) in neighbors(path[-1]):
        if (nx, ny) not in path:
            prefix1 = prefix + grid[ny][nx]
            if prefix1 in prefixes:
                for result in extending(prefix1, path + ((nx, ny),)):
                    yield resultdef neighbors((x, y)):
    for nx in range(max(0, x-1), min(x+2, ncols)):
        for ny in range(max(0, y-1), min(y+2, nrows)):
            yield (nx, ny)

樣品用法:

# Print a maximal-length word and its path:print max(solve(), key=lambda (word, path): len(word))

編輯:過濾少于3個(gè)字母的單詞。

編輯2:我很好奇為什么Kent Fredric的Perl解決方案更快; 事實(shí)證明,使用正則表達(dá)式匹配而不是一組字符。在Python中做同樣的事情會(huì)使速度提高一倍。


查看完整回答
反對(duì) 回復(fù) 2019-07-25
  • 3 回答
  • 0 關(guān)注
  • 1356 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)