为什么再次问候!让我们重建我们创建in our previous post查找:
string1point = 'aeionrtlsu';
string2point = 'dg';
string3point = 'bcmp';
string4point = 'fhvwy';
string5point = 'k';
string8point = 'jx';
string10point = 'qz';
lookup = zeros(1,26);
lookup(double(string1point) - 96) = 1;
lookup(double(string2point) - 96) = 2;
lookup(double(string3point) - 96) = 3;
lookup(double(string4point) - 96) = 4;
lookup(double(string5point) - 96) = 5;
lookup(double(string8point) - 96) = 8;
lookup(double(string10point) - 96) = 10;
之前,我们做任何事情,我们需要所有小写字母以访问查找表。
lowerWord = lower(word);
一旦我们这样做,让我们找出双字母和双字的位置。你几乎找到了你想要找到哪些字母是双字母(#
)和/或哪些瓷砖碰到双字拼贴(!
)的地方。您需要将1
移动到括号外,以便确定实际字母是什么,而不是符号的位置。换句话说:
doublew = strfind(lowerWord, '!') - 1;
doublel = strfind(lowerWord, '#') - 1;
我们现在需要做的是提取原始字符串,没有任何符号。我们可以这样做:
originalWord = lowerWord;
originalWord([doublew + 1 doublel + 1]) = [];
我必须为每个位置添加1,因为我想访问符号所在的位置。我使用符号所在的两个位置,然后使用[]
来消除这些符号。这应该给我们我们的原始单词。现在,我们要做的就是查看每个字母在查找表中的值,并总结点数。换句话说:
ASCII = double(originalWord) - 96;
basePoints = sum(lookup(ASCII));
现在,我们有了点量为:
basePoints =
8
8点是我们有多少个得分任何调整之前有。现在,让我们来解决每一种情况下一次一个:
双封
如果你还记得之前,doublew
和doublel
将包含字母是受制于评分增长的位置。
首先,让我们弄清楚什么字母都受到他们的点值加倍,并找出其中这些都是在查找表,加起来这个分数是多少:
doublelettersInd = double(lowerWord(doublel)) - 96;
sumLetters = sum(lookup(doublelettersInd));
sumLetters
将包含总所有这些信件的得分都可以加倍增值。现在,这里变得棘手。接下来我要做的是将这个分数存储在sumLetters
和中,并在基础分数(我们的情况为8)之上加上。这将有效地把这些信件翻倍并加倍。请记住,如果你为自己添加一些东西,你的价值就会翻一番。因为在基本分数中,我已经添加了那些仅仅是基本分数的字母,如果我然后找到那些要加倍的字母并获得分数并将它们添加到原始分数的顶部,我将加倍相应字母的分数:
doublePoints = basePoints + sumLetters;
双字
你需要做的是算多少次,我们都遇到过双字瓷砖的最后一件事。然后你会得到这个数字,你不得不用这个作为二的幂的指数,因为这将有效地显示你需要加倍的次数。如果您一次点击双面瓷砖,则会将您的得分加倍(即2^1 = 2
)。如果您双击双字拼贴,则您的分数将翻两番(即2^2 = 4
),依此类推。换句话说:
finalPoints = (2^numel(doublew))*doublePoints;
numel
计数有多少个元素在一个阵列或矩阵。因此,doublew
的长度将告诉我们有多少次遇到双字拼贴。
^
很重要,因为这将正确加倍。 ^
代表取幂,并且这正好处理了我们在正确加倍你的分数时所谈论的内容。这将能够处理我们没有遇到任何双字砖的情况,如2^0 = 1
。
一旦我们做到这一切,当你做word = 'Hel#lo!';
,与上面的代码,我们得到:
finalPoints =
18
用另一例子,我得到:
....很酷? :)
另外,与你的上述测试的情况下,为Ramblin!gwreck
,我得到:
finalPoints =
54
对于Q#uar!tz#ifer#ous!
,我得到:
finalPoints =
220
为了让这一切都不错,这样您可以将其复制并粘贴到您的编辑器中,以便您可以运行它,这里是代码块中的代码:
%// Define word here
word = 'Ramblin!gwreck';
%word = 'Q#uar!tz#ifer#ous!';
%// Convert word to lower case
lowerWord = lower(word);
%// Create look up table
string1point = 'aeionrtlsu';
string2point = 'dg';
string3point = 'bcmp';
string4point = 'fhvwy';
string5point = 'k';
string8point = 'jx';
string10point = 'qz';
lookup = zeros(1,26);
lookup(double(string1point) - 96) = 1;
lookup(double(string2point) - 96) = 2;
lookup(double(string3point) - 96) = 3;
lookup(double(string4point) - 96) = 4;
lookup(double(string5point) - 96) = 5;
lookup(double(string8point) - 96) = 8;
lookup(double(string10point) - 96) = 10;
%// Find letters that are either double word or double letter
doublew = strfind(lowerWord, '!') - 1;
doublel = strfind(lowerWord, '#') - 1;
%// Get original word without symbols
originalWord = lowerWord;
originalWord([doublew + 1 doublel + 1]) = [];
%// Get the base points of the word
ASCII = double(originalWord) - 96;
basePoints = sum(lookup(ASCII));
%// Find those letters that need to be doubled in point value
%// and double their score
doublelettersInd = double(lowerWord(doublel)) - 96;
sumLetters = sum(lookup(doublelettersInd));
doublePoints = basePoints + sumLetters;
%// Finally, if we need to double the word score, do it
finalPoints = (2^numel(doublew))*doublePoints;
'strfind(word,doubleword-1)'应该被'strfind(word,doubleword)-1'替代。 (你想首先得到你的标记的索引,然后去掉'1'来得到这个字母的索引,对于'trouble'同样的东西。 – Hoki 2014-09-19 22:21:48
它仍然标记我为“下标索引必须是真实的正整数或逻辑。 拼字错误(第29行) Origscore =(总和(值(ASCII)));“ 我不太确定该怎么办 – 2014-09-19 23:20:03