Uwagi wstępne
Do technikaliów warto zaglądać co jakiś czas, w szczególności przed wysłaniem zadania, maila z pytaniem lub jakiś czas po wysłaniu maila z pytaniem - będzie uzupełniany i aktualizowany.
Platforma sprawdzająca
Dostarczane programy mają korzystać ze standardowego wejścia,wyjścia.
Programy nie mogą (o ile odstępstwo nie jest wyraźnie dozwolone w treści zadania):
-
korzystać w żaden sposób z systemu plików [1]
-
tworzyć dodatkowych procesów (wątków)
-
używać zegara
-
otwierać gniazd
-
tworzyć segmentów pamięci dzielonej
-
i innych tym podobnych, dziwnych i nietypowych z punktu widzenia rozwiązywania ASD zachowań ;).
[1] - dla ciekawskich, szczegółowych etc.: oczywiście w systemach Unixowych, wszystko jest plikiem, więc obiekty procesu pojawią się w specjalnym systemie plików /proc , więc oczywiście chodzi o świadome, bezpośrednie używanie systemu plików a nie realizację systemową pewnych funkcji, czy struktury procesu. Prostymi słowami: żadnych plików nie tworzymy, nie otwieramy itp. i katalogów tak samo.
Rozszerzenia i nazwy plików
Zwyczajowe rozszerzenia, nazwy plików jakieś proste (najlepiej bez polskich znaków bo edu może wam zrobić psikusa), w razie wysyłania kolejnego dodać na końcu "_v2" na końcu, ale przed kropką i rozszerzeniem. (Lepiej wysłać wcześniej jeden, a potem drugi, niż żałować, że spóźniło się o 1 minutę na edu… a w ogóle lepiej wysyłać wcześniej bo edu może zwolnić w piku czyli ostatnie minuty przed końcem terminu - więc to że edu nie działało 5 minut nie jest argumentem, macie dość czasu by kilka godzin wcześniej wysłać, a jak się nie uda, po pewnym czasie znów spróbować - jako argument mogę przyjąć potwierdzone przez bss wielogodzinne niedostępności edu, ale wtedy rozwiązanie musi w terminie trafić na maila | Ale takie awarie się nie zdarzają, więc i tak to rozważenie przypadku WorstCase).
Dla troskliwych, pliki w Java obojętnie, jak się nazywają - o ile mają rozszerzenie .java - ponieważ jest wymóg by klasy nazywały się Main, a wymóg języka by pliki się nazywały jak klasa, dlatego są wpierw tymczasowo kopiowane do "Main.java", a potem kompilowane do bajtkodu.
Programy w lua są też wpierw kompilowane przy użyciu luac by przy testach zaoszczędzić czas potrzebny na analizę statyczną i kompilację do lua bajtkodu.
Zachowujemy u siebie kopię wysłanego pliku i nie modyfikujemy (może być wam potem potrzebny jeżeli bym poprosił o sumę kontrolną).
Pliki wejściowe
-
Unixowe entery,
-
mogą być zarówno zakończone pustą linią jak i nie.
Użyte kompilatory, interpretery
Pliki mają się kompilować i uruchamiać przy użyciu następującego oprogramowania na platformie 64 bitowej.
Platforma
Linux, 64bitowy, a locale ustawione następująco:
LC_ALL="pl_PL.UTF-8"
Co oznacza jako system kodowania plików UTF-8, a jeżeli wasz interpreter ma jakieś kwestie lokalizacyjne to zgodnie z tym ustawieniem.
Proszę dbać o to by program mieścił się w limicie pamięciowym (ideone - to nie jest sędzia jeżeli chodzi o zużycie pamięci) w danym limicie. Limity są tak ustawione by rozwiązanie wzorcowe z zapasem się mieściło razem z interpreterem, jednak tworzenie w nieskończoność obiektów może szybko zużyć nawet duży zapas pamięci - proszę rozważnie pracować.
Limity pamięci są takie same dla wszystkich testów - zarówno małych jak i dużych - liczy się tylko czy się w nich Państwo mieszczą, więc można spokojnie deklarować stałej wielkości dane przy uruchamianiu (co zarazem, przy nierozważnym użyciu może zaskutkować przekroczeniem limitu również przy małych testach… więc jak ze wszystkim - używajcie ze świadomością co robicie).
C++
~$ g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.5.1/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: ../configure --prefix=/usr --enable-languages=c,c++,fortran,objc,obj-c++,ada --enable-shared --enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu --enable-gnu-unique-object --enable-lto --enable-plugin --disable-multilib --disable-libstdcxx-pch --with-system-zlib --with-ppl --with-cloog --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info Thread model: posix gcc version 4.5.1 (GCC)
Java
~$ java -version java version "1.6.0_20" OpenJDK Runtime Environment (IcedTea6 1.9.1) (ArchLinux-6.b20_1.9.1-1-x86_64) OpenJDK 64-Bit Server VM (build 17.0-b16, mixed mode)
Lua
~$ luac -v Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio ~$ lua -v Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
Python
~$ python --version Python 3.1.2
Ruby
~$ ruby --version ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
eksperymentalnie : Php , C# (.Net → na platformie Mono), Perl
O ile poprzednie języki udało mi się dość dobrze dostosować do pracy w SandBox-ie (ograniczenia na pamięć itp.) oraz przetestować, o tyle oznaczone jako "eksperymentalne" mogą być dość nieprzewidywalne - nie znam dobrze budowy tych interpreterów. Ich obsługa jest już wbudowana w sprawdzarkę, więc mogą ich państwo używać na własną odpowiedzialność
~$ php -v PHP 5.3.3 with Suhosin-Patch (cli) (built: Oct 22 2010 07:36:25) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
~$ gmcs --version Mono C# compiler version 2.8.0.0
~$ mono --version Mono JIT compiler version 2.8 (tarball Mon Oct 18 19:35:05 CEST 2010) Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com TLS: __thread SIGSEGV: altstack Notifications: epoll Architecture: amd64 Disabled: none Misc: debugger softdebug LLVM: supported, not enabled. GC: Included Boehm (with typed GC and Parallel Mark)
~$ perl --version This is perl 5, version 12, subversion 1 (v5.12.1) built for x86_64-linux-thread-multi Copyright 1987-2010, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page.