Jak snadno zpracovat

vstup a výstup?

Pokud programuješ v JavaScriptu, užitečné informace nalezneš na samostatné stránce.

V soutěži si stáhneš vstupy, které budou většinou docela velké. Jak nejlépe a nejrychleji dostat tato data do tvého programu? Přesměrování standardního vstupu je užitečná pomůcka, tou určitě rozšiř svůj arzenál!

Potřebuješ:
  1. uložit vstup do souboru
  2. příkazový řádek
  3. najít spustitelný soubor tvého programu
Jak najít spustitelný soubor?

Pokud překládáš pomocí řádkových programů (jako gcc, g++, apod.), určitě víš, kde output file je (u g++ si můžeš pomocí -o filename specifikovat, jak se bude jmenovat).

Co dělat, pokud používáš nějaké IDE? Třeba Codeblocks, Eclipse, Visual Studio, Dev C++, ...?

Máš dvě možnosti. Za prvé zkusit najít v možnostech projektu tvého programu něco jako „program arguments“ (u různých IDE se může lišit). Pokud toto najdeš, pokračuj na další krok.

Za druhé přeložit svůj program a někde ve složce projektu najít spustitelný soubor svého programu. U Codeblocks / Visual Studia bývá v projekt/bin/Debug/, kde „projekt“ je jméno vašeho projektu.

Přesměrování vstupu:
Příkaz, kterým přesměrujeme vstup, vypadá jednoduše. Pokud jste v příkazové řádce v adresáři, ve kterém je program i vstup, napište toto:
program.exe < in.txt          (Windows)
./program < in.txt            (Linux)
python program.py < in.txt    (Python)
java Program < in.txt         (Java)
Tento příkaz předá soubor in.txt programu program na standardní vstup. Všechna data tedy jdou přečíst například funkcemi:
scanf()            (C)
cin >>             (C++)
input()            (Python)
System.in          (Java)
Console.ReadLine() (C#)
Přesměrování výstupu:
Výstup přesměrujeme úplně stejně, akorát menšítko přehodíme za většítko.
program.exe > out.txt
./program > out.txt
python program.py > out.txt
java Program > out.txt

Přesměruje všechny standardní výstupy do souboru "out.txt", který můžeš odevzdat do soutěže!

Obě přesměrování lze kombinovat:
./program < in.txt > out.txt

Toť vše! Tenhle malý trik je k nezaplacení při ladění programů se složitějšími vstupy, které musíš opisovat pořád dokola! Stačí uložit a přesměrovat.

Python

Čtení vstupu v Pythonu je snadné, stačí použít funkci input(), která načte jeden řádek ze standardního vstupu. Tato funkce ovšem vstup čte jako text, takže pokud ze vstupu chceme přečíst číslo, musíme ještě navíc použít funkci int(), která převádí text na číslo: n = int(input())

V úlohách se nám také často stává, že máme na jednom řádku více čísel. Pokud například chceme načíst dvě čísla, můžeme použít následjující kód (ten do proměnné N načte první číslo na řádku a do proměnné M druhé číslo na řádku):

N, M = [int(i) for i in input().split()]

Pokud je čísel více, většinou je chceme načíst do seznamu. To uděláme velmi podobně:

seznam = [int(i) for i in input().split()]

Výše uvedené možnosti fungují pouze v Pythonu 3. Pokud používáte Python 2, můžete si pomoct například for cyklem (proměnná seznam_text bude obsahovat čísla jako textové řetězce a proměnná seznam je bude obsahovat skutečně jako čísla):

seznam_text = input().split()
seznam = []
for cislo in seznam_text:
	seznam.append(int(cislo))    

Máš na to!

I ty můžeš vyhrát! Nebo to aspoň zkusit :)