PHP中是否有一种编译正则表达式的方法,以便可以将其与多个字符串进行比较而无需重复编译过程?其他主要语言可以做到这一点 - Java,C#,Python,Javascript等.
我的一个朋友正在谈论她喜欢玩的文字游戏,你试图通过一次切换一个字母来将一个单词转换成另一个单词(它们具有相同数量的字母),其中每个迭代产生一个真正的单词.
例:
MOON - > WOLF
GOON
穿帮
GOLF
WOLF
我认为编写一个程序来生成解决方案是一个有趣的小项目,并且进一步考虑2个单词,确定解决方案是否存在以及最佳解决方案中的迭代次数.
问题是我无法找到可以通过编程方式轻松访问的免费单词列表.我也在考虑用这个作为学习Python的借口,所以如果有人知道免费的单词列表以及如何从Python解析和访问它的指针就会很棒.用于确定如何找到最佳路径的算法我将自己工作.
嘿,这是星期五下午,让我们有一个有趣的拼图/算法问题来解决.
我最喜欢的任天堂DS游戏之一是Picross DS.游戏很简单,它涉及解决称为Nonograms的谜题.您可以在这里尝试一个简单的在线Picross克隆:TylerK的Picross.
非图是网格,为网格的每一行和每列定义数字序列.这些数字定义了该行/列的"填充"方块的块,但未定义块两侧的未填充区域.例如,如果您有一行如下所示:
http://steam-punk.net/images/picross1.jpg
该行的可能解决方案包括:
http://steam-punk.net/images/picross2.jpg http://steam-punk.net/images/picross3.jpg
等等
"4 5"只是告诉你,在行的某个地方,填充了4个连续的块,然后填充了5个连续的块.这些块将是填充的唯一块,并且它们之前/之后的空间量是没有定义的.
当所有行和列符合其定义时,拼图就完成了,没有任何矛盾.
概念上非常简单的游戏,但手动解决其中一些可能需要一段时间.Picross DS的谜题逐渐增加到25x20网格,这通常需要我花半个小时来解决.
但是,我总是想到编写一个程序来解决它是一个非常简单的游戏.我从未接触过它,但也许这里的一些人会喜欢这个挑战.如果发布了相当数量的解决方案,我会将它们作为一个大型拼图相互比较,类似于Paolo Bergantino在这里用他的Boggle问题做的.如果你想参考,那么在Nonogram Wikipedia页面上有很多关于攻击谜题的方法的信息.
这是TylerK的Picross中拼图#1的一个易于解析的定义,所以你可以为程序提供一些东西.第1行是拼图维度(可能是不必要的),第2行是行定义,第3行是列定义.这只是我想到的第一件事,所以如果有人能想到更好的输入格式,请随意评论或编辑这篇文章以包含它.
15 15
15,4 5,2 4,1 3,2,2,2 4 3,2 6 2,2 1 6 2,2 1 1 4 2,1 1,1 3 2 1,2 2 1 2 1,3 3 2 1,9
4 4,3 1 2 3,2 1 2 2,2 1 1,1 4 2,1 3,1 8,1 3 1 1,1 4 2 1,1 4,2 4 …Run Code Online (Sandbox Code Playgroud) 这是我在电话采访中被问到的另一个问题:
给定字典和填字游戏(2d字符矩阵),找到可以在填字游戏中找到的所有字典单词.
我能想到的只是对字典进行哈希,找到填字游戏中的每个可能的单词并搜索哈希.我无法优化它.
必须承认微软的面试问题很难:(
请给我一些思考的方法.
我正在写一个Android word应用程序.我的代码包括将查找的字符串和一个7字母串的子串具有最小长度3的所有组合,然后所有可用的组合比较,每一个字在字典中找到的所有有效字的方法.我正在使用递归方法.这是代码.
// Gets all the permutations of a string.
void permuteString(String beginningString, String endingString) {
if (endingString.length() <= 1){
if((Arrays.binarySearch(mDictionary, beginningString.toLowerCase() + endingString.toLowerCase())) >= 0){
mWordSet.add(beginningString + endingString);
}
}
else
for (int i = 0; i < endingString.length(); i++) {
String newString = endingString.substring(0, i) + endingString.substring(i + 1);
permuteString(beginningString + endingString.charAt(i), newString);
}
}
// Get the combinations of the sub-strings. Minimum 3 letter combinations
void subStrings(String s){
String newString = "";
if(s.length() > 3){
for(int …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种找到最小顶点子集的算法,这样通过从图中移除这个子集(和连接这些顶点的边),所有其他顶点都变得不连接(即图形将没有任何边).
我对图论有基本了解,所以请原谅任何不正确之处.
有这个游戏,iOS并Andriod称为拼图9号(我与创作者没有任何联系).您从一个3x3网格开始,其中数字1到9随机放置在电路板上.然后组合相邻的数字(跟踪路径)以加起来9.路径中的最后一个节点变为9,所有其他数字增加1.您将相同的9的倍数组合在一起,其中结束节点变为数字的两倍并且起始节点返回到一个节点.例如,如果你开始
1 2 3
5 4 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
你可以从2-3-4开始,然后结束
1 3 4
5 9 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
然后结合两个9
1 3 4
5 1 6
7 8 18
Run Code Online (Sandbox Code Playgroud)
游戏的目标是达到1152.基本上它就像2048但没有随机元素.例如,当你用完总数为9的数字时,游戏结束
8 7 6
5 5 5
9 1 72
Run Code Online (Sandbox Code Playgroud)
我写了一个简单的深度优先搜索python它适用于一些谜题,但我的内存耗尽其他谜题:
import sys
import Queue
conf = "213 547 689"
grid1 = []
for y in conf.split():
for x in y:
grid1.append(int(x))
a = []
explored = set()
sol = …Run Code Online (Sandbox Code Playgroud) 我参加了Coursera上的算法第二部分课程,其中一项作业是解决Boggle游戏的方法:http : //coursera.cs.princeton.edu/algs4/assignments/boggle.html
荣誉代码要求我不要公开发布解决方案,因此这里是基本算法的伪代码。
visit:
word <- board[i][j]
start <- dictionary.match(word, start)
if start is not null
visited[i][j] <- true
word <- prefix + word
if word is longer than min required length
words <- words + word
for (x, y) ? adj(i, j)
if not visited(x, y)
visit (x, y)
visited[i][j] <- false
Run Code Online (Sandbox Code Playgroud)
该字典是使用Trie实现的。
上面的代码有效,我通过了分配,但是随后我遇到了这篇博客文章,该文章声称使用动态编程可以实现更快的解决方案:
事实证明,我们可以使用一种巧妙的动态编程技术来快速检查一个单词(在这种情况下是从词典中)是否可以从黑板上构造出来!
这是动态编程思想的核心:
要在板的第[i,j]个位置找到长度为k的单词(结束位置),该单词的第k-1个字母必须位于[i, j]。
基本情况是k = 1。
在板的第[i,j]个单元格的第[i,j]个单元格中会找到一个长度为1的字母(结束位置),该单词中唯一的字母与板的第[i,j]个位置的字母匹配。
一旦用基本情况填充了动态编程表,就可以在长度为k,k> 1的任何单词的基础上进行构建。
不幸的是,作者在解释方面做得很差,我无法遵循他的解决方案。我想不过,希望这里有人可以向我解释。
PS:
这个问题不是重复的,因为那个人不使用DP。请检查那些重复快乐的手指。
我已表现出足够的努力,没有要求任何人做我的作业。我已经有了自己的解决方案。我感兴趣的是学习一种更好的解决问题的方法(如果存在)。
谢谢!
在这条消息中,作者写了
def neighbors((x, y)):
Run Code Online (Sandbox Code Playgroud)
当我尝试使用Python 3.3运行它时,它告诉我它是无效的语法.我该如何解决这个问题?
在Darius Bacon的代码中,在第11行和第12行,有以下代码:
prefixes = set(word[:i] for word in words for i in range(2, len(word)+1))
Run Code Online (Sandbox Code Playgroud)
我正在尝试将他的程序翻译成Java,我遇到了这个问题.
这是做什么的?
algorithm ×6
python ×4
java ×3
puzzle ×2
boggle ×1
combinations ×1
dictionary ×1
graph ×1
javascript ×1
list ×1
permutation ×1
php ×1
python-3.x ×1
regex ×1
trie ×1