Jawa / Говнокод #8033 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
for (int count = 1; allWord == ""; count++) {
	    if (num.length() == 4) { 
		allWord += arrayToTen[Integer.parseInt(num.substring(0,1))-1] + "Thousand"; /
		if (Integer.parseInt(num.substring(1,2)) > 0) {
		    allWord += arrayToTen[Integer.parseInt(num.substring(1,2))-1] + "Hundred";
		}
		if (Integer.parseInt(num.substring(2,3)) == 0) { 
		    allWord += "And"; // добавдяем просто "And"
		}
	    }
       }

часть реализации задачи:
http://projecteuler.net/problem=17

Запостил: s3t0fu s3t0fu, (Updated )

Комментарии (39) RSS

  • Если я правильно понял условия задачи, то решается так:
    String someString = "one hundred and fifteen";
    Pattern p = Pattern.compile("\\w");
    Matcher m = p.matcher(someString);
    int count = 0;
    while(m.find()) {
        count++;
    }
    Ответить
    • Посчитать буквы - это херня (тут без regexp'ов будет проще и быстрее), идея в том, чтобы сгенерить буквенное представление чисел с 1 до 1000
      Ответить
        • Стены кода. Может, вечерком попробую набросать на Haskell, наверняка получиться раз в 10 короче.
          Ответить
      • Если не ошибаюсь, то генерить буквенное представление для решения задачи не нужно. Нужно формализовать кусочек английской грамматики.
        Ответить
        • а как же подсчитать количество букв в представлении?
          Ответить
          • К примеру. "Fifty" появится 10*10 раз и каждый раз принесет 5 букв. "One" появится (10*(10 - 1) + 100 + 1) раз : первое слагаемое - запись единиц с учетом того, что 11 - это "eleven"; второе - сотен; третье - в записи тысяч и каждый раз принесет 3 буквы...
            Ответить
            • Да, думаю, именно такое решение и подразумевалось. Но ради интереса я всё же набросал брутфорсик на Scala:
              class VerboseNumbers extends Application {
                val ones = Array("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine")
                val teens = Array("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen")
                val tens = Array("", "", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety")
              
                def plural(n: Int, word: String) = if (n > 1) word + "s" else word
              
                def hundreds(n: Int, lst: List[String]) = {
                  val rest = if (!lst.isEmpty) "and" :: lst else lst
                  ones(n) :: plural(n, "hundred") ::	rest
                }
              
                def verboseNum(n: Int, lst: List[String]): List[String] = {
                  if (n == 0)        lst
                  else if (n <= 9)   ones(n) :: lst
                  else if (n < 20)   teens(n - 10) :: lst
                  else if (n < 100)  tens(n / 10) :: ones(n % 10) :: lst
                  else if (n < 1000) hundreds(n / 100, verboseNum(n % 100, lst))
                  else throw new IllegalArgumentException
                }
              
                var len = "one thousand".length - 1
                Range(1,1000).foreach( len += verboseNum(_, Nil).flatten.length )
                println ("The answer is: " + len)
              }
              Ответить
              • Интересно, а если переписать на java, то насколько больше кода будет?
                Ответить
                • Если использовать тот же алгоритм, то примерно в два-три раза больше кода (если следовать всем соглашениям о форматировании кода).

                  P.S. чтобы результат был более красивым, нужно заменить
                  if (n < 100)  tens(n / 10) :: ones(n % 10) :: lst
                  на
                  if (n < 100)  tens(n / 10) :: verboseNum(n % 10, lst)
                  Можно ввести более удобное для работы определение
                  def verboseNumber(n: Int) = verboseNum(n, Nil)
                  Ответить
              • Если не ошибаюсь, первый исходник scala на ГК. Оформить чтоли отдельным номером...
                Ответить
                • Моя прога выдаёт 22024 (т.е. примерно 22 символа на число). Выглядит правдоподобно, ручками я не считал.
                  Ответить
                • Зарегился на сервисе, проверил условия, подучил английскую грамматику. Правильный ответ 21124, его даёт программа
                  class VerboseNumbers extends Application {
                    val ones = Array("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine")
                    val teens = Array("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen")
                    val tens = Array("", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety")
                  
                    def hundreds(n: Int, lst: List[String]) = {
                      val rest = if (!lst.isEmpty) "and" :: lst else lst
                      ones(n) :: "hundred" :: rest
                    }
                  
                    def verboseNum(n: Int, lst: List[String]): List[String] = {
                      if (n == 0)        lst
                      else if (n < 10)   ones(n) :: lst
                      else if (n < 20)   teens(n - 10) :: lst
                      else if (n < 100)  tens(n / 10) :: verboseNum(n % 10, lst)
                      else if (n < 1000) hundreds(n / 100, verboseNum(n % 100, lst))
                      else throw new IllegalArgumentException
                    }
                  
                    def verboseNumber(n: Int) = verboseNum(n, Nil)
                    
                    var len = "one thousand".length - 1
                    Range(1,1000).foreach( len += verboseNumber(_).flatten.length )
                    println ("The answer is: " + len)
                  }
                  Ответить
                    • Всё работает, я весь исходник залил. Один ворнинг - Application is deprecated, его нужно заменить на App.
                      Ответить
                      • Простите, код-то я понял, а вот язык, на котором он написан, почему-то не стал определять.
                        Раз программирую в основном на Java и С++, то это первое, что попалось на глаза 😀
                        Ответить
                        • То есть def и двойные двоеточия вас не смутили, а вот отсутствие скобочек у конструктора сломало парсер? =)
                          Ответить
                          • Ну как-то так. Все было просто и понятно, вот почему-то и пропустил. Ну, как пропустил - прочитал. Понял что написано и пошел дальше 😀 Опасная штука получилась.
                            Ответить
                            • Всё-таки scala - годный язык. Всё понятно без единого комментария даже людям, не пишущим на нём.
                              Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8