让你永远赢得Popcap bookworm

WBOY
发布: 2016-07-25 08:51:07
原创
1270 人浏览过
Bookworm是个很不错的游戏,如果你不知道它,那么可以在app store里搜索一下。我用php写了一个永远会拼出最高分词汇的程序,嘿嘿,我好坏

fullwordlist.txt 就是词典,文件太长,就不贴出来了,感兴趣的朋友可以网上随便搜一个。

  1. 字符:


  2. 占分:




  3. // author: huangfeng爱吴佳旻
  4. if(empty($_POST)) die;
  5. // 接收并处理原始输入数据,w代表字符,v代表对应的分数
  6. $data = array();
  7. for($i=1;$i array_push($data, array('w' => strtoupper(trim($_POST['w'.$i])), 'v' => trim($_POST['v'.$i])));
  8. }
  9. // 去重以便计算求和的分数
  10. $data_unduplicated = array();
  11. foreach($data as $key => $value){
  12. $data_unduplicated[] = implode(',', $value);
  13. }
  14. $data_unduplicated = array_unique($data_unduplicated);
  15. // 求每个字符的出现频次
  16. $data_frequency = array();
  17. foreach ($data as $arr) {
  18. $data_frequency[] = $arr['w'];
  19. }
  20. $data_frequency_result = array_count_values($data_frequency);
  21. // 将词汇表文件读入数组
  22. $words = file('./fullwordlist.txt', FILE_IGNORE_NEW_LINES);
  23. // 将词汇表全部转成大写英文
  24. $words = array_map(function ($word){
  25. return strtoupper($word);
  26. }, $words);
  27. // 对每个单词进行频次判断
  28. $result = array();
  29. foreach ($words as $k => $word) {
  30. // 遇到含有'的单词,就略过
  31. if(strpos($word, "'") > 0) continue;
  32. // 对$word做字母拆解,判断每个字母的出现频次
  33. $word_arr = str_split($word);
  34. $word_arr_frequency = array_count_values($word_arr);
  35. $pass = true;
  36. foreach ($word_arr_frequency as $character => $frequency) {
  37. if(!array_key_exists($character, $data_frequency_result) || ($data_frequency_result[$character] $pass = false;
  38. }
  39. }
  40. // 对筛选出的$word进行求分数操作
  41. if($pass) {
  42. $word_value = 0;
  43. foreach ($word_arr as $wkey => $wchar) {
  44. foreach($data_unduplicated as $data_item) {
  45. $data_item = explode(',', $data_item);
  46. // var_dump($data_item); array 0 => string 'A' (length=1) 1 => string '3' (length=1)
  47. if($wchar != $data_item[0]) continue;
  48. $word_value += $data_item[1];
  49. }
  50. }
  51. $result[] = array('w' => $word, 'v' => $word_value);
  52. }
  53. }
  54. // 最后只选出分数最高的
  55. $k = 0;
  56. $highest = 0;
  57. foreach ($result as $key => $item) {
  58. if(intval($item['v']) >= $highest){
  59. $highest = $item['v'];
  60. $k = $key;
  61. }
  62. }
  63. echo '最高分的词是:' . $result[$k]['w'] . '('.$result[$k]['v'].')';;
复制代码


来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板