Блог пользователя MikeMirzayanov

Автор MikeMirzayanov, 13 лет назад, По-русски

Всем привет!

Теперь вы можете писать свои решения на OСaml и Scala. Для первого из них используется компилятор версии 3.11.0, скаченный по ссылке http://caml.inria.fr/pub/distrib/ocaml-3.11/ocaml-3.11.0-win-msvc.exe. Для Scala используется последний релиз http://www.scala-lang.org/downloads/distrib/files/scala-2.9.1.final.zip.

Вот примеры решения задачи 1A - Театральная площадь на обоих языках:

OCaml

let main () =
  let gr () = Scanf.scanf " %f" (fun i -> i) in 
  let n = gr () in
  let m = gr () in
  let a = gr () in
  let f x y = ceil (x /. y) in
  Printf.printf "%.0f\n" ((f n a) *. (f m a))
  ;;
let _ = main();;


Scala

object Main extends App {
 val Array(n, m, a) = readLine.split(" ").map(_.toLong)
 def roundUp(x: Long) = x / a + (if (x % a > 0) 1 else 0)
 println(roundUp(n) * roundUp(m))
}

Как на OCaml, так и на Scala я пишу впервые — более элегантные решения прошу в комментарии :)

MikeMirzayanov

  • Проголосовать: нравится
  • +32
  • Проголосовать: не нравится

13 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится
Есть ли надежда, что когда-нибудь появится Microsoft Visual C# ?
  • 13 лет назад, # ^ |
      Проголосовать: нравится +1 Проголосовать: не нравится
    И ещё было такое пожелание - Java до 7 версии обновить... Уже 1-й апдейт вышел... ;-)
    • 13 лет назад, # ^ |
        Проголосовать: нравится +18 Проголосовать: не нравится
      я думаю, что лучше не обновить, а сделать как новый язык
      • 13 лет назад, # ^ |
          Проголосовать: нравится +1 Проголосовать: не нравится
        Да, однозначно надо оба держать, я плохо выразил мысль - спасибо!
  • 13 лет назад, # ^ |
      Проголосовать: нравится -13 Проголосовать: не нравится
    А будут ли когда-нибудь воплощены масштабирующие коэффициенты для лимита времени (и может, памяти) применительно к каким-то языкам.

    Хотя бы для дорешивания, а не для контестов, чтобы можно было практиковаться в тех или иных языках на более широком круге задач было можно.

    Не очень принципиально, какими в точности они будут - скажем, x10 по времени для питона и пхп, и x5 по памяти для скала...
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      По этому вопросу можно почитать эту дискуссию.

      Ну и для ленивых - MikeMirzayanov явно говорит, что если "решил писать на таком языке, будь добр учти, что он медленный".
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Спасибо вам большое! Я обожаю все функциональненькое. :) Не знаю, элегантно ли это, но на Scala можно написать еще так

  • 13 лет назад, # ^ |
      Проголосовать: нравится +4 Проголосовать: не нравится
    300 мс?
    Я-то думал Ruby|Python медленные... =)
    • 13 лет назад, # ^ |
        Проголосовать: нравится +1 Проголосовать: не нравится
      Scala довольно быстрый язык, он статически типизируемый и запускается на JVM. В этих 300 миллисекундах в основном время запуска JVM, загрузка пачки классов.
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        На мой взгляд он быстрый если на нём писать так же как на Java. А если писать как на функциональном языке, время и память будут съедаться мегатоннами... %)

        Scala позволяет в мгновение ока незаметно создавать горы ненужных объектов и производить уйму ненужных действий... ;-)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      А компилируется эта программа на моей машине 5.945 секунд. >_<
      • 13 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Надеюсь не под линуксом так долго?)
        • 13 лет назад, # ^ |
          Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

          Как раз таки под ним. :)

          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            нифигасе.
            настройки-то копать не пробовали? всякие там дев моды убрать или еще чего? или вас вполне такое время устраивает? =D
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Судя по тому что говорят в интернете, это достаточно распространенная проблема. И связана она с тем что Scala очень гибкий язык и за эту гибкость приходится платить временем компиляции.

              Но мне это пока не мешает. Я чисто посмотреть скачал. И ничего сложного пока писать на Scala не собираюсь. :)
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Там о-о-очень неторопливый компилятор, это правда... Непринципиально под чем - он сам по себе на java... ;-)
  • 13 лет назад, # ^ |
      Проголосовать: нравится +14 Проголосовать: не нравится
    >> Я обожаю все функциональненькое. :)
    Предмет обожания для товарища rexim:

13 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Лично мое мнение, это было незачем. Но раз поставили, пусть будет на всякий случай.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я бы не сказал что "незачем", но возможно многие пользователи сочтут что были более приоритетные нововведения, в т.ч. по языкам/компиляторам... ;-)

    После контеста посмотрим, конечно, пытался ли кто-нибудь что-нибудь на этих двух отправить... %)
13 лет назад, # |
  Проголосовать: нравится +6 Проголосовать: не нравится
Thanks for your great work
13 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится
Добавьте, пожалуйста, библиотеки nums и str, и обработку препроцессором camlp4o в командную строку для OCaml, чтобы она выглядела примерно так:
ocamlopt nums.cmxa str.cmxa -pp camlp4o solution.ml -o solution
13 лет назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится
В будущем можно добавить и статически типизируемый Boo, для .NET . Конечно это не приоритетно :)
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Не совсем понятно почему, но у меня зашло решение на OCaml с float: 934032.
Решение с обычным целым типом не прошло, то ли проверяющие машины 32-битные, то ли установленный OCaml 32-битный: 934031.
И почему-то решение долго работало (50ms), выглядит как-будто компилировалось в байт код с помощью ocamlc,
а не в машинный код с помощью ocamlopt.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Забавно, решение 952545 работает в 9 раз дольше, если его компилировать с помощью ocamlc, вместо ocamlopt. Я тестировал на локальном компьтере на большом произвольном тесте из совершенно случайных чисел.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    ocamlopt работает на windows, если ставить так http://protz.github.com/ocaml-installer/ (level 2)?
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Спасибо за ответ. Увы, я тестировал дома под Gentoo. A деталей установки Ocaml под Windows, я к сожалению, не знаю.
    • 13 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +5 Проголосовать: не нравится
      У меня работает. Правда, инсталлятору фи. (1) Он при некоторых условиях затирает системную переменную PATH без возможности отката. Возможно, потому, что другой инсталлятор ocaml был не таким наглым и приписал себя в конец этой переменной, а не в начало? (Upd: у меня было просто слишком много путей.) (2) А при повторном запуске, если стоит галочка про установку emacs, инсталлятор заново выкачивает 50 мегабайт его дистрибутива из интернета.

      Ему нужны mingw в путях и переменная среды, указывающая на его библиотеки, в моём случае получилось так:
      FLEXLINKFLAGS="-LC:\tools\msys\lib -LC:\tools\msys\lib\gcc\mingw32\4.6.1\"

      И, действительно, упомянутая программа, скомпилированная ocamlopt, работает 0.25 секунды, а скомпилированная ocamlc больше двух секунд.

      Кстати, в системе у этого решения стоит время 220 мс. Значит ли это, что ocamlopt на Codeforces уже установлен и работает?
      • 13 лет назад, # ^ |
          Проголосовать: нравится +13 Проголосовать: не нравится
        Да, я позавчера-вчера все сделал. Очень удачно сохранил path перед началом инсталляции :)
        • 13 лет назад, # ^ |
            Проголосовать: нравится +2 Проголосовать: не нравится
          А nums, str и camlp4o всё ещё не подключены.  Ещё, возможно, хорошо бы -unsafe добавить, оно отключает проверки вроде выхода за границы массива, и немного добавляет производительности.
          • 13 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            На сфере пишут, что можно запускать препроцессор локально у себя на компьютере, а потом посылать в систему файл после препроцессинга. Возникает вопрос: будет ли такие действия нарушать правила CodeForces?
            • 13 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится
              Можно, но это неудобно, и не вижу причин почему бы этого не делать автоматом при компиляции.
        • 13 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          Система игнорирует код возврата для решения на Ocaml. 964094 получает WA, вместо RE. Аналогичное решение на С++ получает RE.
          Кроме того в submit форме написана версия 3.11, а мне вчера тестовое решение, вывело версию 3.12.1.
»
11 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

А есть надежда, что версия Scala обновится до 2.10.*?

Сегодня на контесте очень не хватало мутабельного TreeSet :)

»
9 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Thank you!