dart - 解决方案不计算答案中的字母数

标签 dart

我制作了一个解决问题的程序17

Number letter counts
Problem 17
If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.

If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?


NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of "and" when writing out numbers is in compliance with British usage.

我的尝试以 Dart 的方式减去了main方法,如下所示

isSpecialBelow100(number) {
  switch(number) {
      case 1:
      case 2:
      case 3:
      case 4:
      case 5:
      case 6:
      case 7:
      case 8:
      case 9:
      case 10:
      case 11:
      case 12:
      case 13:
      case 14:
      case 15:
      case 16:
      case 17:
      case 18:
      case 19:
      case 20:
      case 30:
      case 40:
      case 50:
      case 60:
      case 70:
      case 80:
      case 90:
        return true;
      default:
        return false;
  }
}


removeExcess(number, weight) => number - number % weight;

getExcess(number, weight) => number % weight;

specialNumberToWord(number) {
  switch(number) {
    case 1:
      return 'one';
    case 2:
      return 'two';
    case 3:
      return 'three';
    case 4:
      return 'four';
    case 5:
      return 'five';
    case 6:
      return 'six';
    case 7:
      return 'seven';
    case 8:
      return 'eight';
    case 9:
      return 'nine';
    case 10:
      return 'ten';
    case 11:
      return 'eleven';
    case 12:
      return 'twelve';
    case 13:
      return 'thirteen';
    case 14:
      return 'forteen';
    case 15:
      return 'fifteen';
    case 16:
      return 'sixteen';
    case 17:
      return 'seventeen';
    case 18:
      return 'eighteen';
    case 19:
      return 'nineteen';
    case 20:
      return 'twenty';
    case 30:
      return 'thirty';
    case 40:
      return 'forty';
    case 50:
      return 'fifty';
    case 60:
      return 'sixty';
    case 70:
      return 'seventy';
    case 80:
      return 'eighty';
    case 90:
      return 'ninety';
    default:
      return '';
  }
}


printProblem17Result() {
  var words = new StringBuffer();
  for(var number = 1; number <= 1000; number++) {
    if(number < 100) {
      if(isSpecialBelow100(number)) {
        words.write(specialNumberToWord(number));
      } else {
        words.write(specialNumberToWord(removeExcess(number, 10)));
        words.write(' ');
        words.write(specialNumberToWord(getExcess(number, 10)));
      }
    } else if(number >= 100 && number < 1000) {
      var remaining = int.parse(removeExcess(number, 100).toString().replaceAll('0', ''));
      words.write(specialNumberToWord(remaining));
      words.write(' hundred ');
      var excess = getExcess(number, 100);
      if(excess != 0) {
        words.write(' and ');
        if(isSpecialBelow100(excess)) {
          words.write(specialNumberToWord(excess));
        } else {
          words.write(specialNumberToWord(removeExcess(excess, 10)));
          words.write(' ');
          words.write(specialNumberToWord(getExcess(excess, 10)));
        }
      }
    } else {
      words.write(' one thousand');
    }
    words.write(' ');
  }

  print(words.toString().split(' ').fold(0, (prev, current) => prev + current.length));
}

就我所知,也许不是最整齐的字符应该产生正确数量的字符。

似乎还不到10个解决方案。有人可以告诉我我做错了什么吗?

更新:

我没有添加拼写更正,但确实删除了换行符,并用空格替换了它,并更正了split方法以在空格处进行拆分。我最初发布的版本是通过非常恶劣的打印线方法进行调试的尝试。

确实,14的正确拼写是14,而不是14,这有时容易被忽略。

最佳答案

您有一个拼写错误,因为14应该是十四而不是“十四”。

您似乎也在用

  print( (words.toString().replaceAll(' ','').replaceAll('\n','')).length);

更正此错误,您将获得答案21124。

关于dart - 解决方案不计算答案中的字母数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23340063/

相关文章:

firebase - Flutter StreamSubscription 没有停止或暂停

dart - Flutter 以编程方式触发 FutureBuilder

dart - 使用镜像访问库内部字段

flutter - 在哪里放置一个函数来触发 flutter/dart 应用程序的退出/停止/关闭事件?

dart - showBottomSheet 支架问题与上下文

dart - 如何将多个 Stream 合并为更高级别的 Stream?

dart - 'pub get'给出了Angular2软件包的错误

flutter - 启动时如何调用 Dart 类?

callback - dart js-interop FunctionProxy与js.context的回调关系

flutter - Dio 拦截器无法处理同一回调中的第一个请求,仅处理后续调用