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

时间:2014-09-19 01:02:13

标签: string matlab indexing 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));

3 个答案:

答案 0 :(得分:8)

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

为了获得你想要的工作,我现在要在Scrabble中省去双点,双字母,空白瓷砖和整个有趣的东西。通过咨询Wikipedia,这是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

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

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

string1point = 'aeionrtlsu';
string2point = 'dg';
string3point = 'bcmp';
string4point = 'fhvwy';
string5point = 'k';
string8point = 'jx';
string10point = 'qz';

现在,我们可以使用每个字符串,转换为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;

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

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

stringToConvert = 'MATLAB';
stringToConvert = lower(stringToConvert);
ASCII = double(stringToConvert) - 96;
value = sum(lookup(ASCII));

瞧瞧......我们得到:

value =

 10

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

第2部分

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

Calculate Scrabble word scores for double letters and double words MATLAB

答案 1 :(得分:1)

从字符串转换为ASCII:

>> myString = 'hello, world';
>> ASCII = double(myString)

ASCII =

   104   101   108   108   111    44    32   119   111   114   108   100

总结值:

>> total = sum(ASCII)

total =

        1160

char()的MATLAB帮助说(强调添加):

  

S = char(X)将非负整数代码的数组X转换为字符数组。有效代码范围为0到65535,其中代码0到127对应于7位ASCII字符。 MATLAB®可以处理的字符(7位ASCII字符除外)取决于您当前的语言环境设置。 要将字符转换为数字数组,请使用双重功能。

ASCII图表here

答案 2 :(得分:-4)

clc
clear all
close all

code=input('Enter your String \n','s');      %input function is used to enter string
ASCII=double(code);
disp(ASCII)             % ans will be vector means may be single row multiple column because of you are entering a string