Компания JetBrains открывает регистрацию на Kotlin Challenge — соревнование по программированию для тех, кто хочет попробовать новый язык программирования для платформы Java.
Помните, на конференциях вы слышали доклады по Kotlin? Помните, кто-то из друзей вдохновенно рассказывал о том, что вот-вот появится новая Java от JetBrains? Помните, младшая сестра жаловалась, что никак не освоит Kotlin, потому что нет русской документации? Теперь все изменилось: мы начинаем свою собственную олимпиаду по Kotlin, и даже сделали немного документации по-русски для тех родных заядлых олимпиадников, которые еще не изучили даже технический английский.
Мы приглашаем к участию в Kotlin Challenge всех, кто любит сложные олимпиадные задачи и всех, кто пробует самое свежее в информационных технологиях, чтобы сыграть роль первопроходцев, покоряющих неизведанный край нового языка, сразиться с серьезными соперниками и выиграть почет, славу и призы.
Важно:
- На олимпиаде допускается только один язык (и это — Kotlin);
- правила весьма похожи на правила ACM ICPC;
- сроки проведения: сейчас уже идет регистрация, с 16 октября по 15 ноября — тренировочное решение задач, 16 ноября — тренировочное знакомство с движком проверки задач и вживание в роль бойца за призы. 7 декабря начинается серьезная игра на выбывание — четвертьфинал, полуфинал будет в феврале 2014, а 29 апреля 2014 года — очный финал в Санкт-Петербурге. Подробное расписание — kotlin.jetbrains.org/challenge/schedule
- Четвертьфинал проходит в два этапа (7 декабря с 14 до 16 и 11 декабря с 20 до 22 часов по Москве), причем в первом этапе фиксируются 100 лучших, которые точно пройдут в полуфинал. Они не могут участвовать во втором этапе, где участвуют все остальные. Такое разбиение на два этапа придумано для того, чтобы участники могли сыграть в удобное для себя время: в декабре кому-то надо срочно сдавать зачет, кому-то — бежать за подарками.
- Призы тоже будут: всем участникам полуфинала достаются красивые специально сделанные по этому случаю футболки. Всем участникам финала вручаются очень красивые футболки Kotlin Challenge. За первое, второе и третье места в финале вручаются денежные призы: 200 000, 100 000 и 60 000 рублей.
- Для участия в Kotlin Challenge обязательна регистрация. Участвуют все желающие, кому уже исполнилось 14 лет.
- Официальный язык соревнований — русский. Соответственно, все задачи будут доступны только на одном языке.
Сайт Kotlin Challenge — kotlin.jetbrains.org/challenge/.
Группа ВКонтакте — vk.com/kotlinchallenge В группе также предлагается обсуждать соревнование, язык Kotlin, задачки (после окончания туров) и прочее; общаться с организаторами, жюри и другими участниками.
Добро пожаловать и удачи в соревновании!
Ребята, ВЫ СУПЕР!
Обязательно поучавствую :)
Эх, придется посмотреть код и довести до ума java2kotlin конвертер :)
Чем Kotlin может удивить (заинтересовать)?
Футболками :)
Может оказаться крутым языком: статическая типизация, работает на JVM, совместим с библиотеками на Java, куча модных языковых наворотов (есть очень нужные — nullsafety, например), короткий синтаксис, быстро компилируются программы. Во многом похож на Scala, вот сравнение от разработчиков Kotlin.
Как я понял, здесь не просто статическая типизация, а есть некая поддержка вывода типов, что хорошо. Синтаксис на любителя, похоже на смесь C++ с Pascal, ИМХО.
Неплохо бы увидеть сравнение ещё и с Haskell. И вообще, обоснование зачем учить Kotlin, а не тот же Haskell, скажем. (Кроме работы поверх JVM.)
Потому же, почему стоит учить java, и даже больше. По сути это просто java с хорошими исправлениями и дополнениями, которые по разным причинам не исправляет oracle.
А условия что, только на русском будут (пост до сих пор не переведен)? Если да, то это огромное повышение шансов на футболку.
Официальный язык соревнований — русский.
Что-то письмо с подтверждением регистрации не приходит на почту (gmail)
Правда, какая официальная позиция к тем участникам, кто будет писать на своем любимом языке и конвертировать код в Kotlin? Например, это явно запрещается или считается неспортивным и просто не поощряется? А может это считается полностью допустимым?
ИМХО, мне кажется, что это какой-то чит, который убивает идею такого соревнования.
Хм, а как сконвертить, например, код на C++? Там же куча проблем, начиная от фич C++ вроде темплейтов и unsafe-работы с указателями, и заканчивая необходимостью конвертить весь STL и сабмитить 100Мб исходников.
Впрочем, с Java таких проблем не будет, особенно если не надо конвертить стандатрые библиотеки.
Очевидно, что запретить пользоваться конвертором мы технически не можем. Но на всякий случай считаем это неспортивным.
В любом случае, конвертор сейчас работает, мягко говоря, неидеально. Он скорее не помогает, а, наоборот, мешает. Мы пробовали применить его на решении олимпиадной задачки среднего размера, получили дюжину ошибок компиляции, которые без понимания языка пофиксить сложно, да и просто муторно. Проще сразу писать решение на котлине. Да и приятнее, попробуйте ;)
Не исключено, что участникам финала конвертор мы все-таки отключим.
А где задачи? Вроде как сегодня старт
Задачи выложены. К сожалению, из-за технических неполадок результаты проверки сейчас не показываются, но все решения принимаются и никуда не теряются. Приносим свои извинения!
Всем привет. ребята подскажите пожалуйста, темплейт кода для ввода данных на языке kotlin. пробую в Scanner передавать System.in а "in" как ключевое слово воспринимает. понимаю, глупый вопрос, но не дает покоя(
Ключевое слово in надо экранировать:
in
В частности, System.in
System.`in`
Мелочи(и не очень), которые я нашел:
Кажется неудобным, что range'и для итерации включают последний элемент. Вот надо скажем проитерироваться первые k индексов или все кроме первого, вылазят минус единицы. Да и вообще хочется иметь for с кастомными условиями.
По поводу контеста:
1) было бы круто, если бы список посылок был чуть адекватнее.
(1. Отображались еще не проверенные посылки
(2. Как-нибудь отличались фразы для АС задач, от тех, по которым просто решение принято на проверку. По сданной задаче у меня написано:Решение принято жюри.
По несданной:Решение принято жюри.
Ошибка компиляции.
(2. По каждой следующей задаче показываются посылки всех предыдущих.
(3. Естественное желаение — после отправки задачи обновлять страницу с результатом, сейчас браузер (по крайней мере Chrome) предлагает снова передать данные, а значит будет повторная посылка. Насколько я помню, можно сделать редирект на эту страницу, вместо прямой отдачи, чтобы такого не было.
2) У меня за ошибку компиляции в табличке сейчас отмечен минус, было бы круто, чтобы на штраф в основных соревнованиях CE не влияли. Тоже касается посылок после АС.
3) Хочется, чтобы можно было скачать решение, чтобы узнать тот ли файл ты отправил.
4) хочется, чтобы при выборе файла после его выбора он не отправлялся сразу, а показывалось его имя и можно было нажать кнопку отправить. Во-первых это не ломает стандартные представления о том, как работают стандартные интерфейсы, а во вторых есть возможность исправить свое действие при мисклике. Сейчас я сумел-таки отправить не тот файл, промахнувшись (точнее, мне так кажется, я не могу проверить без 3)
5) Хоть какая-то анимация загрузки при переключении таба, номера страницы. Просто жмешь — и ничего не происходит, а потом не обновляется.
6) У меня очень долго грузится список людей.
7) Хочется уметь обновлять уже отфильтрованный список людей.(там где найден ты, например) (f5 сбрасывает фильтр)
8) Не столь важно, но обычно запись "+x" обозначает, что перед плюсом было x не удачных попыток, а у вас вроде бы общее кол-во попыток.
9) Во время одного контеста не слишком важно, у кого сколько задач было раньше. Будет ли стандартный монитор, на котором указано без наведений мышки, кто что решил на этом контесте без наведения мыши(а также штраф). Хотя может быть я просто не нашел?
10) На контесте не так принципиально, ибо задач меньше, но всё-таки приятно, на тренировке просто очень хочется: возможность скрыть уже сданные задачи, чтобы не крутить 100км, чтобы добраться до последних задач
11) Еще хочется, чтобы при авторизации была галочка "Запомнить меня".
1) Баги известны, будут исправлены. Основная проблема — по задаче действительно отображаются посылки всех предыдущих, отсюда вся каша.
2) Ошибка компиляции не считается в штрафном времени, как и написано в правилах. Сейчас в таблице минусы тоже неверно работают :-(
3) К сожалению, наверно, в ближайшее время сделано не будет.
4-7) Постараемся исправить.
8) См.пункт 2 — неправильно работают минусы.
9) Да, будет отдельный привычный монитор для каждого соревнования.
10) К сожалению, наверно, в ближайшее время сделано не будет. Может будет сделан другой способ удобной навигации.
3) Я так понимаю, это из-за потенциальных проблем с безопасностью? Или есть еще какие-то сложности?
Можно просто взять и создать двумерный массив n*m, заполненный 0 (или ещё как-то) проще чем
?
Не то чтобы сильно проще, но все же.
В данном случае типовые аргументы выводятся автоматически, поэтому их можно опустить:
val ar = Array(n) { IntArray(m) }
Добавлю, этот вариант лучше всех вышеуказанных, потому что в этом случае с точки зрения Java будет объект типа
int[][]
, а неInteger[][]
, что позволит избежать лишнего боксинга/анбоксинга.Знатоки Kotlin, у меня есть проблема. Я тут начал делать тестовый фреймворк для себя и у меня проблема. При запуске вот этого файла в месте создания InputReader падает такой эксепшн:
Thoughts?
Это известный многогранный баг: KT-1 — компилятор вместо отображения ошибки может сгенерировать несколько методов с одинаковыми Java-сигнатурами. Простейший случай:
В Вашем классе InputReader есть свойство
filter
, для которого геттер- сеттер-методы генерируются автоматически. МетодыgetFilter()
иsetFilter()
писать вручную больше не надо :)А varargs совсем не рабочий? У меня почему-то вместо массива объектов в рантайме выходит массив из одного элемента, в котором уже нужный массив объектов лежит. Из-за этого итерироваться невозможно
А, понятно, я же передаю один варарг в другой варарг, а он считает его одним объектом. Это можно как-то исправить?
Я правильно понимаю, что у Вас метод принимает варарг-параметр типа Any, а вы пытаетесь передать туда массив? В этом случае нужно использовать синтаксис spread-оператора:
У меня тоже вопрос по котлину. Пытаюсь написать простой генерик метод создания массивов:
Компилируется нормально, но при запуске получаю:
Как такой метод правильно пишется?
В следующей версии компилятора котлина этот код уже не скомпилируется.
Проблема в ограничениях виртуальной машины Java. Подробно об этой и схожих проблемах с дженериками в Java можно почитать в хорошей статье Брайана Гётца «Java theory and practice: Generics gotchas» (по-английски или по-русски)
Цитата:
«Как реализовать ArrayList? Предположим, что класс ArrayList управляет массивом элементов с типом V, поэтому можно ожидать от конструктора для ArrayList создания массива элементов с типом V:
Но этот код не работает — вы не можете создать экземпляр массива с типом, представленным параметром типа. Компилятор не знает о том, какой тип в действительности представляет V, поэтому он не может создать экземпляр массива элементов с типом V.»
Весьма необычно :)
Кстати, исправили
.
Я выступаю от лица жюри и проверяющей системы.
А почему компилируется такой код?
Это баг, спасибо
А как в Kotlin быть с проблемой Null-safety в следующем случае?
Выводится null
У кого-нибудь задачи уже загрузились?
У меня грузится только главная страница, а задачи не открываются
Онлайн монитора с финала вообще нет чтоли?