среда, 9 декабря 2020 г.

Код - это сила!

Чтобы проникнуться динамическим программированием, один из друзей порекомендовал сайт CodeForces. Там можно зарегистрироваться с сыном и выполнять различные задачи из архива. Ну и проверять решение тоже можно. Поддерживается куча языков, даже Kotlin! Хорошая возможность прокачать навыки ещё и в нём.

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


Судя по всему мне придётся привыкать, что всякие проверки - от лукавого. Для олимпиадного програмирования не нужно проверять входные данные, что позволяет писать код короче:
fun main() {
    val index = readLine()!!.split(' ').map { it.toInt() }[1] - 1
    val list = readLine()!!.split(' ').map { it.toInt() }
    val min = list[index].coerceAtLeast(1)
    println(list.filter { it >= min }.count())
}
Это пример решения задачи Следующий раунд. Как можно заметить, я игнорирую нулевой результат readLine(), а из первого массива беру только второе число, так как первое понадобилось бы только для проверки длины второго массива. Не уверен, нужно ли задавать нижнее значение min как 1, но решение приняли:

5 комментариев:

  1. Круто!

    Послезавтра будет двухчасовой контест (в 17:35 начало, регистрация до 17:30).
    Миша может получить опыт ;)

    ОтветитьУдалить
    Ответы
    1. Устраивать контесты в рабочие дни - то ещё решение. Ему ещё уроки на субботу делать. И репитиция оркестра в 6 вечера...

      Удалить
    2. Ну, там контесты не привязаны к дням недели. Вот, например, во dторник будет контест div3 (самый простой уровень), а в субботу, 19, тоже будет контест (div2 - тоже несложный, возможно, я поучаствую).
      https://codeforces.com/calendar

      Удалить
  2. Kotlin - это нечто! Решение этой задачи в одну строку:
    fun main() = println(readLine()!!
    .split(' ')
    .map { it.toInt() }
    .reduce { x, y -> x * y / 2 })

    Как профессионального программиста меня убивает такой код, но тут прокатывает...

    ОтветитьУдалить