如何使用MATLAB计算Scrabble中的单词分数

Jes*_*rie 2 string indexing matlab ascii

我有一个家庭作业计划我遇到了问题.我们基本上必须采用一个词(例如MATLAB),并使用Scrabble规则为函数提供正确的分数值.还有其他的事情,如双字和双点值,但我正在努力的是转换为ASCII.我需要将我的字符串转换为ASCII格式,然后总结这些值.我们只知道字符串的基本知识,我们的老师很无用.我已经尝试将字符串转换为数字,但这并不完全正常.有什么建议?

function[score] = scrabble(word, letterPoints)

doubleword = '#';
doubleletter = '!';
doublew = [findstr(word, doubleword)]
trouble = [findstr(word, doubleletter)] 
word = char(word)
gameplay = word;
ASCII = double(gameplay)


score = lower(sum(ASCII));
Run Code Online (Sandbox Code Playgroud)

ray*_*ica 8

建立弗朗西斯的帖子,我建议你做的是创建一个查找数组.你当然可以将每个字符转换成它的ASCII等价物,但是我要做的是有一个数组,其中输入是你想要的字符的ASCII码(稍加修改),输出将是点值人物.一旦你找到了这个,你可以总结点数来得到你的最终得分.

为了获得你想要的工作,我现在要在Scrabble中省去双点,双字母,空白瓷砖和整个有趣的东西.通过咨询维基百科,这是Scrabble中遇到的每个字母的点分布.

  • 1点:A,E,I,O,N,R,T,L,S,U
  • 2分:D,G
  • 3分:B,C,M,P
  • 4分:F,H,V,W,Y
  • 5分:K
  • 8分:J,X
  • 10分:Q,Z

我们要做的是将您的单词转换为小写以确保一致性.现在,如果你看一下这个字母a,这就对应于ASCII代码97.你可以通过使用double我们之前谈到过的函数来验证:

>> double('a')

97
Run Code Online (Sandbox Code Playgroud)

由于字母表中有26个字母,这意味着从7 a开始z应该从97到122.由于MATLAB开始将数组索引为1,我们可以做的是将每个字符减去96,这样我们就能够弄清楚这些字符的数字位置从1到26.

让我们从构建查找表开始.首先,我要定义一大堆字符串.每个字符串表示与Scrabble中的每个点相关联的字母:

string1point = 'aeionrtlsu';
string2point = 'dg';
string3point = 'bcmp';
string4point = 'fhvwy';
string5point = 'k';
string8point = 'jx';
string10point = 'qz';
Run Code Online (Sandbox Code Playgroud)

现在,我们可以使用每个字符串,转换为double,减去96,然后将每个相应的位置分配给每个字母的点.让我们像这样创建我们的查找表:

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;
Run Code Online (Sandbox Code Playgroud)

我首先通过zeros函数创建一个长度为26的数组.然后我找出每个字母的位置,并为每个字母分配它们的点值.

现在,你需要做的最后一件事是取一个字符串,小写以确定,然后将每个字符转换为它的ASCII等价物,减去96,然后总结这些值.如果我们给...说...... MATLAB:

stringToConvert = 'MATLAB';
stringToConvert = lower(stringToConvert);
ASCII = double(stringToConvert) - 96;
value = sum(lookup(ASCII));
Run Code Online (Sandbox Code Playgroud)

瞧,我们得到:

value =

 10
Run Code Online (Sandbox Code Playgroud)

上面代码的最后一行至关重要.基本上,ASCII将包含一堆索引位置,其中每个数字对应于字母出现在字母表中的数字位置.我们使用这些位置来查找每个字母给我们的点/分数,并总结所有这些值.

第2部分

双点值和双字出现的下一部分可以在我的其他StackOverflow帖子中找到:

计算双字母和双字MATLAB的拼字游戏单词分数

  • 它解释得非常好:) (2认同)