我希望 Perl (5.8.8) 找出哪个单词与数组中的其他单词有最多的共同字母 - 但只有在同一个地方的字母。(最好不使用库。)
以这个单词列表为例:
- 贝克
- 销售员
- 打包机
- 看护人
- RUFFR
她的 BALER 是与其他单词有最多共同字母的单词。它与 BAKER 中的 BAxER、SALER 中的 xALER、CARER 中的 xAxER 和 RUFFR 中的 xxxxR 匹配。
我希望 Perl 在具有相同长度和大小写的任意单词列表中为我找到这个单词。似乎我在这里碰壁了,非常感谢您的帮助!
我到目前为止所尝试的
目前并没有太多的脚本:
use strict;
use warnings;
my @wordlist = qw(BAKER SALER MALER BARER RUFFR);
foreach my $word (@wordlist) {
my @letters = split(//, $word);
# now trip trough each iteration and work magic...
}
注释在哪里,我尝试了几种代码,其中包含大量的 for 循环和 ++ 变量。到目前为止,我的任何尝试都没有完成我需要它做的事情。
因此,为了更好地解释:我需要的是针对列表逐字测试每个字母位置,以在该字母的位置找到与列表中其他字母最多的单词。
一种可能的方法是首先检查哪些单词在字母位置 0 处最常见,然后测试字母位置 1,依此类推,直到找到与列表中的其他单词。然后我想像一个矩阵一样打印列表,每个字母位置的分数加上每个单词的总分,与 DavidO 的建议不同。
实际上,您最终得到的是每个单词的矩阵,每个字母位置的分数,以及矩阵中每个单词的总分。
该计划的目的
呵呵,我不妨这么说:该程序用于在游戏 Fallout 3 中破解终端。 :D 我的想法是,它是学习 Perl 的好方法,同时还能享受游戏乐趣。
这是我用于研究的辐射 3 终端黑客教程之一:辐射 3:黑客常见问题解答 v1.2,我已经制作了一个程序来缩短单词列表,如下所示:
#!/usr/bin/perl
# See if one word has equal letters as the other, and how many of them are equal
use strict;
use warnings;
my $checkword = "APPRECIATION"; # the word to be checked
my $match = 4; # equal to the match you got from testing your checkword
my @checkletters = split(//, $checkword); #/
my @wordlist = qw(
PARTNERSHIPS
REPRIMANDING
CIVILIZATION
APPRECIATION
CONVERSATION
CIRCUMSTANCE
PURIFICATION
SECLUSIONIST
CONSTRUCTION
DISAPPEARING
TRANSMISSION
APPREHENSIVE
ENCOUNTERING
);
print "$checkword has $match letters in common with:\n";
foreach my $word (@wordlist) {
next if $word eq $checkword;
my @letters = split(//, $word);
my $length = @letters; # determine length of array (how many letters to check)
my $eq_letters = 0; # reset to 0 for every new word to be tested
for (my $i = 0; $i < $length; $i++) {
if ($letters[$i] eq $checkletters[$i]) {
$eq_letters++;
}
}
if ($eq_letters == $match) {
print "$word\n";
}
}
# Now to make a script on to find the best word to check in the first place...
该脚本将产生CONSTRUCTION
并TRANSMISSION
作为其结果,就像在游戏常见问题解答中一样。但是,原始问题的诀窍(以及我自己无法找到的东西)是如何找到最好的单词来尝试,即APPRECIATION
.
好的,我现在根据您的帮助提供了我自己的解决方案,并认为该线程已关闭。非常感谢所有的贡献者。你帮了很大的忙,在这个过程中我也学到了很多东西。:D