Позже вы познакомитесь с правилами соревнований Codeforces, которые будут отличаться от правил ACM-ICPC, TopCoder, GCJ и, я надеюсь, немного разнообразят контесты. Большая часть официально-проводимых соревнований будет проходить именно по этим правилам, хотя будут и более традиционные контесты. Например, Codeforces Beta Round #1 будет проходить по старым-добрым правилам ACM-ICPC (имеются ввиду правила подсчета результатов - так как у нас соревнование личное, покороче, да и разрешенных языков поболее). Пока тестирование будет проводиться под ОС Windows, но в будущем это может и измениться, благо система поддерживает тестирование на разных платформах даже в рамках одного контеста.
В настоящий момент система сконфигурирована на поддержку следующих языков (для каждого указана строка компиляции и/или запуска):
- GNU C++ 4
g++.exe -fno-asm -lm -s -x c++ -Wl,--stack=268435456 -O2 -o %name%.exe %1g++.exe -static -fno-optimize-sibling-calls -fno-strict-aliasing -DONLINE_JUDGE -lm -s -x c++ -Wl,--stack=268435456 -O2 -o %name%.exe %1
- GNU C 4
gcc.exe -fno-asm -lm -s -x c++ -Wl,--stack=268435456 -O2 -o %name%.exe %1
gcc.exe -static -fno-optimize-sibling-calls -fno-strict-aliasing -DONLINE_JUDGE -fno-asm -lm -s -Wl,--stack=268435456 -O2 -o %name%.exe %1
- MS VS C++ 2005
cl /W4 /F268435456 /EHsc /O2 %1cl /W4 /F268435456 /EHsc /O2 /DONLINE_JUDGE %1
- Free Pascal 2
fpc.exe -So -XS %1 -o%~n1.exe
fpc.exe -dONLINE_JUDGE -So -XS %1 -o%name%.exe
- Delphi 7
dcc32 -cc %1
dcc32 -Q -DONLINE_JUDGE -cc %1
- C# Mono 2.7
gmcs -define:ONLINE_JUDGE -o+ -out:%name%.mono-exe %1
- Java 6
javac -cp ".;*" %1 и java.exe -Xmx256M -jar %s
javac -cp ".;*" %1
и
java.exe -Xmx256M -DONLINE_JUDGE=true -Duser.language=en -Duser.region=US -Duser.variant=US -jar %s
- Ruby 1.9
ruby.exe %s
- Python 2.7
python.exe %s
python.exe -O %s
- PHP 5.3
php.exe -n -d display_errors=Off -d error_reporting=0 %s
php.exe -n -d ONLINE_JUDGE=true -d display_errors=Off -d error_reporting=0 %s - Haskell GHC 6.12
ghc --make -O %s - F# 2.0
fsc.exe --define:ONLINE_JUDGE --optimize+ %s - OCaml
ocamlopt nums.cmxa str.cmxa -pp camlp4o -unsafe -o %name%.exe-ocaml %1 - Scala
As Java
Не гарантируется, что задачи будут иметь решения на каждом из представленных языков (особенно это касается скриптовых). Вероятно, позже я введу поправочные коэффициенты по времени работы для некоторых из языков. Версии со знаком плюс обозначают, что тестирующая система может использовать и более старшие версии. Если есть конструктивные предложения по изменению строк компиляции или запуска – пишите в комментарии.
Так же хочется отметить, что кроме стандартных вердиктов вам может еще прийти «Отказ тестирования», что обычно означает, что ваше решение неудалось запустить или оно совсем как-то неожиданно упало. Например, если в Delphi объявить сверхбольшой массив, то компилятор благополучно скомпилирует код, но в результате получится некорректный win32 exe-файл. Попытки с вердиктами «Ошибка компиляции», «Отказ тестирования», «Сбой тестирования» (и подобное) игнорируются при подведении результатов.Кроме того обратите внимание, что задачи будут доступны как на русском так и английском языках.
Вроде все, до встречи на Codeforces Beta Round #1.
UPD: Добавлен чистый C (компилятор gcc).
UPD 2: Добавлены Haskell GHC 6.12 и F# 2.0
UPD 3 (от 18 декабря 2011): Добавлена поддержка OCaml и Scala. Обновлены версии многих компиляторов. В настоящий момент используются следующие версии:
- GNU C/C++: 4.6.1
- Microsoft Visual Studio C++ 2005
- C#: Mono 2.10.2
- Free Pascal: 2.4.4
- Delphi 7
- Java: 1.6.0_29 (JRE обновляется автоматически)
- Ruby: 1.9.3
- Python: 2.7.2
- Haskell: 6.12.2
- OCaml: 3.12.1
- Scala: 2.9.1
- PHP: 5.3.8








Что-то здесь не так:
gcc.exe -fno-asm -lm -s -x c++
<sarcasm> Ты бы еще сказал, что там не было basic_string< pair<double, int> >
</sarcasm>
Вообще-то да. Помню задачу про треугольники с саратовского ЧФ, где были строки в 300 символов и нужна была сортировка. После этого я принял окончательное решение олимпиады на паскале не писать
variadic macros & VLA де-факто зависят не от языка (Си или Си++), а от компилятора (у GNU есть, у MS нету).
а вот Си++ к сожалению нельзя написать y = (k ? sin : cos) (x); -- компилятор не сможет решить какие функции вызвать
y = ( k ? ( double (*)( double )) sin : ( double (*)( double )) cos )( x ); // А вто так - можно
так можно в С++
И каким же С++ транслятором можно так писать?
Comeau говорит о этом коде следующее:
Comeau C/C++ 4.3.10.1 (Oct 6 2008 11:28:09) for ONLINE_EVALUATION_BETA2
Copyright 1988-2008 Comeau Computing. All rights reserved.
MODE:strict errors C++ C++0x_extensions
"ComeauTest.c", line 10: error: cannot determine which instance of overloaded
function "sin" is intended
cout << (k? &sin : &cos) (x);
^
"ComeauTest.c", line 10: error: cannot determine which instance of overloaded
function "cos" is intended
cout << (k? &sin : &cos) (x);
^
2 errors detected in the compilation of "ComeauTest.c".
Эти строки эквивалентны (имя функции является указателем на неё):
y = (k ? sin : cos)(x);
y = (k ? &sin : &cos)(x);
Да, такие конструкции возможны в C++. Но при перегрузке функций, компилятор без дополнительной информации не может определить, какую из них использовать:
float sin(float x);
double sin(double x);
long double sin(long double x);
Если же перегрузка функций не используется, то эта конструкция не вызовет ошибки.
Если мспользуется шаблонная функция, то возможна более короткая запись:
c = (k ? min<int> : max<int>)(a, b);
вместо варианта с приведением типа.
PS: когда я писал, что нельзя, я имел в виду VS 2005.
y = ( k ? std::sin : std::cos ) ( x );
уже не компилируется.
Чтобы не писать так громоздко, можно сделать так:
typedef double (*df)(double);
y = (k ? (df)sin : (df)cos)(x);
Еще один вариант:
y = (k ? sinl : cosl) (x);
Гм. А что, такая ситуация *так часто* встречается, что есть необходимость в сокращенной конструкции?
Она не сокращенная. Просто С++ компилятору не хватает ума, чтобы скомпилировать без подсказки.
Вот еще вспомнил. В GNU C можно делать вложенные функции (почти как в Паскале, только удобнее), для С++ это не поддерживается.
Между прочим, можно считать, что каждая функция -- метод класса, поля которого -- аргументы функции.
А порой иногда не хватает компилятора С++ :D
Это реально?
И компилирует ли он что-то типа
var a = new int[];
var q = from v in a select v;
?
Не везде (у FP точно нет). Зачем они нужны вообще?
#include "my/arithm.hpp"
Во-первых, тестирование производится на разных машинах, поэтому возникнут сложности с масштабированием и поддержанием доступности этих ваших модулей на всех компьютерах.
Во-вторых, такую возможность если и добавлять, то для всех языков. По-моему, слишком большой геморрой. Надо будет для каждого языка специфицировать, где что лежит, как что подключить и т.п. Зачем делать систему слишком запутанной в угоду сомнительным удобствам?
В третьих, ну неужели у вас так много ценного вашего кода, который вы хотели бы использовать на соревнованиях и по каким-то убеждениям не можете скопировать в код основной программы?
java.exe -Xmx256M -Xss<размер стека> -jar %s
Например:
java.exe -Xmx256M -Xss64M -jar %s
Здесь, правда, возникает проблема - при такой командной строке программа, вообще говоря, может использовать больше чем 256 МБ памяти (но только в стеке). Но выставлят стек надо в любом случае, по дефолту он очень мал.
Известный трюк сильно platform-dependent
Так как я пишу все олимпиады в основном именно на нём :) (SNWS, Neerc ...)
А вот тут за это спасибо! :) А то бы как бы я писал codeforces #Beta 1,без любимого паскальчика :)
Правда иногда приходится юзать и STL :(((
Встроенной нет.
Но лично в Free Pascal’е в папке demo/text есть его реализация.
Под какой ОС проводятся запуск решений?
Версия GCC -- mingw или нет (mingw содержит ряд багов, которых нет в линуксовой версии glibc)?
Имхо, про полчаса вы загнули. Для рандомизированного бинарного дерева что нужно? Структура с узлом, две процедуры поворота, и процедура вставки. Итого строк 40-50. А полноценное АВЛ-дерево получается добавлением процедуры балансировки, строк десять.
Вот если нужно еще и удаление... тогда да, придется попотеть
And why C++ and C are compiled in the exact same way?
{IfDefONLINEJUDGE}
WriteLn('Debugoutput');
{EndIf}
{IfDef ONLINE_JUDGE}
WriteLn('Debug output');
{EndIf}
to increase stack space size, you just have to pass "RTS" switches to executable file, leaving compiling command line unchanged.
compile: ghc --make -O program.hs
running: program.exe +RTS -K256m -A8m -RTS
here -Ksize sets the maximum stack space size, the default value is 8mb, it's not reserved memory space, and won't affect overall performance.
and -Asize sets the cache size of GC, it's a reserved space to speed up GC, the default value is 128k, and quite small for data structure problems here (via profiling I found my program spends more than 80% of running time on GC when solving a standard data structure problem here).
on *nix, it's simple, and you can leave the judge system setting untouched.
export GHCRTS="-K256m -A8m"
I guess it's also quite easy on Windows.
I don't know to whom should I request the same.
http://codeforces.com/blog/entry/405
It runs on the JVM so you could download the clojure.jar and clojure-contrib.jar jars (Clojure 1.1 is the current version) and run programs with
java.exe -classpath "clojure-contrib.jar;clojure.jar" clojure.main %1
I will help test it if you like.
It would be a lot more fun for me and other Clojure programmers. There were twice as many of us who qualified for GCJ this year as there were F# programmers.
Though we should note that after adding python and other interpreted languages we may expect complains that interpreters are not fast enough, while time limits are the same for them and for C-programmers.
Is it possible to change the C# compiler to using dmcs.exe so that we can write C# 4.0 code?
According to this page: http://mono-project.com/CSharp_Compiler, the gmcs compiler only targets the 2.0 runtime.
Лично я против Perl, т.к. человеку, который не знает Perl будет сложно взламывать перловые решения.Тогда может дружно уберем F#, Ruby, Haskell, Python... ? не все же знают их...
ерунда короче.
Если же использовать автоматические обфускаторы, то можно и на других языках получить не меньший ужас.
http://ld.hackerdom.ru/b/?p=49 - нормально компилирующийся код на C++.
p.s. у меня почему-то едет форматирование на этом комментарии, либо пропадает текст.
Другое дело, что написать нечитаемый код можно на любом языке, но на Perl сделать это проще.
Однако [не хочу устроить холивар, мнение лично мое]:
1. Perl более производительный, чем другие скриптовые языки;
2. регэкспы и хэши в Perl гораздо удобнее для использования.
p.s. Действительно сложнее взламывать - это haskell или J... Код на языке J (не мой), складывающий все натуральные меньшие 1000, делящиеся на 3 или 5.
[code]+/~.(3*i.334),5*i.200
теперь 4.6.1 http://i30.fastpic.ru/big/2012/0306/d3/9acf758e25a6b3cc3483d9df948636d3.png
-Wall --pedantic
And my gcc (gcc version 4.4.5 (Debian 4.4.5-8)) not give any errors. But when I posted my program here (on GNU C) it says "Runtime error on test 1".
Program works correctly and take right answers. You can see code here: http://pastebin.com/jhec4ixB
Thanks for your attention.
And C# mono is much slower that csc.It is even slower than java(by a 2x factor)
UPD. Статистика вдруг начала резко меняться. Для тех кто пропустил: у первого сообщения было +4, у второго +8.
Если F# убрали в связи с глюками компилятора при работе на Mono, то можно вместо него добавить OCaml [1], который мало чем от F# отличается и является довольно популярным языком для решения задач в системе Sphere Online Judge [2] (как видно в [3]).
Ссылки
[1] http://caml.inria.fr/ocaml/index.en.html
[2] http://www.spoj.pl/
[3] http://www.spoj.pl/ranks/languages/
Недавно объяснял другому человеку разницу между OCaml и F#. Вот что из этого имеет большое значение для олимпиадного программирования?
Есть в OCaml, но нет в F#:
1) Мощная система модулей (с функторами) в стиле Standard ML [1].
2) Своеобразная система объектов со структурной типизацией [2].
3) Мощнейший синтаксический препроцессор Camlp4 [3].
4) Полиморфные варианты [4].
5) Допустимы дублирующие определения.
6) Именованные и необязательные аргументы [4].
Есть в F#, но нет в OCaml:
1) Nullable types (В OCaml можно вместо них использовать Option type).
2) Перегрузка операторов [5].
3) Простой механизм цитирования [6] (не сравнимый по возможностям со встроенным в Camlp4).
4) Active Patterns [7] (можно добавить в OCaml при помощи Camlp4).
5) Computation Expressions [8] (можно добавить в OCaml при помощи Camlp4).
6) Совместимая с .NET система объектов.
7) Несколько ограниченная поддержка именованных и необязательных аргументов (только для методов) [9].
8) Еденицы измерения [10].
9) Поддежка Юникода "из коробки".
10) Строки являются иммутабельными.
11) Первоклассная поддержка в Visual Studio, благодаря которой значительно снижается порог вхождения для начинающих программистов - им не приходится дополнительно осваивать Emacs.
12) Синтаксис немного другой. Можно такой к OCaml легко прикрутить при помощи упомянутого препроцессора. Пример whitespace-significant синтаксиса для OCaml: [11].
Ссылки:
[1] http://caml.inria.fr/pub/docs/manual-ocaml/manual004.html
[2] http://caml.inria.fr/pub/docs/manual-ocaml/manual005.html
[3] http://en.wikipedia.org/wiki/Camlp4
[4] http://caml.inria.fr/pub/docs/manual-ocaml/manual006.html
[5] http://msdn.microsoft.com/en-us/library/dd233204.aspx
[6] http://msdn.microsoft.com/en-us/library/dd233212.aspx
[7] http://msdn.microsoft.com/en-us/library/dd233248.aspx
[8] http://msdn.microsoft.com/en-us/library/dd233182.aspx
[9] http://msdn.microsoft.com/en-us/library/dd233213.aspx
[10] http://msdn.microsoft.com/en-us/library/dd233243.aspx
[11] http://people.csail.mit.edu/mikelin/ocaml+twt/
> вместо всем привычной майкрософтовской...
Не стоит говорить за всех... ;)
Да, вы очень сильно заблуждаетесь. Wine - это пародия на эмулятор, который даже под 64 бита не компилируется и навряд ли будет.
Mono же - это реализация от небезызвестной фирмы Novell компилятора языка C# (что есть стандарт ISO) и среды исполнения для него. Понимаете разницу между просто другой реализацией компилятора стандартного языка и попыткой реализации нестандартного API закрытой ОС?
"И много ли таких, кто на юниксах пишет под дот-нет?" - на одном GtkSharp-е уже столько прог написано. С такой тенденцией как сейчас, скоро половина почти самой популярной среды GNOME будет на mono (между прочим разработками и mono, и GNOME курирует один и тот же чувак).
Добрый день
Подскажите, пожалуйста, планируется ли добавить с список языков Scala? Насколько понимаю, требуется только добавление компилятора scalac, далее - та же самая JVM с теми же самыми параметрами что и для Java6
many other programming sites provides both versions...
Решение скомпилировалось после того, как убрать
и заменить
на
.
Чтобы создать консольное приложение в MS Visual Studio нужно:
1) Файл => Создать => Проект...
2) Visual C++ => Win32 => Консольное приложение Win32
3) Параметры приложения => [v] Пустой проект
4) Добавить в «Файлы исходного кода» новый .cpp файл и писать туда.
Почему бы не добавить MS C#?
c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\csc.exe /target:exe /out:solution.exe ИмяФайла.cs
WTF??
ocamloptis used (which I suppose it should be.) Anyway, thanks for adding OCaml.Давайте дождемся понимания того, что это нужно не только вам одному. Я не вижу плюсов к комментарию и ответов в поддержку.
Ок. В принципе согласен, это вполне может быть нужно только мне одному. спасибо за ответ)
А python3 нужен много кому…
Призываю весь сознательный народ, кодящий на питоне, поставить плюс комментарию выше.
This problem has a solution on Python consumed 60 ms and 3100 KB. I think it is possibly to solve it on Ruby. Anyway we do not guarantee that any problem has a solution on languages like Perl/PHP/Python/Ruby.
Пока нет
А почему?
Perl’а нет в списке
Существует ли пример, на котором -foptimize-sibling-calls для gnu c/c++ заметно ухудшает результаты?
Мне не известен, но то, что его отсутствие приводит к фейлам известно.
Why is
-fno-optimize-sibling-callswhich disables tail call optimization passed to GCC? I’ve always assumed during the contests that GCC does TCO, so I’m a bit confused.Because we found that sometimes this optimization makes code to be invalid.
You use version 4.6.1 — this bug already fixed in this version.
ожидается ли в ближайшем будущем добавление параметра “-std=c99” для языка GNU C 4?
Доброго времени суток) Для всех языков программирования могут использоваться ТОЛЬКО стандартная либа и ничего более(ну кроме того, что написал сам)?
Ну более-менее да. А вообще — запуск в помощь:)
там можно проверить, что компилится, а что — нет.
Жаль, что нет Visual C# 2010.
It would be nice if you could add the Go programming language. They are close to finalizing the first stable version (Go 1). The latest weekly release is RC1.
http://weekly.golang.org/
http://code.google.com/p/go/downloads/list
The syntax and standard library API are mostly fixed; there are a few remaining implementation bugs but it is already generally very stable and usable.
Вопрос к тем, кто пишет на Python. Почему
if __debug__:работает когда я запускаю программу у себя на машине черезpython -O, но не работает на сервере? То есть на сервере не смотря на заявленный ключ-Oветка дебага выполняется. Я что-то делаю неправильно или так и должно быть? И существуют ли какие-нибудь еще трюки для того, чтобы добавить в текст программы код, который бы выполнялся локально, но не выполнялся при обработке тестирующей системой?