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.