Уикито
от Съзтезателно програмиране
В ръководството има много обяснения за това как се правят разни неща. За съжаление обаче, то е доста огромно. Поради тази причина тук ще опишем някои неща.
Значително по-кратка и на български език е статията за редактиране на българската Уикипедия. Ако имате време, ви препоръчвам да я прегледате, тъй като наистина съдържа най-важните неща.
Съдържание |
Допринасяне
Всички които чувстват, че могат да подобрят това уики като напишат нещо в него да го направят. Все пак, има някои условия които трябва да се спазват:
- Не слагайте материали които са защитени от авторско право без съгласието на притежателят му!
- Материалите трябва да са свързани със състезания по програмиране или дейността на клуба.
Ако имате въпроси, коментари или предложения използвайте препратката беседа на съответната страница.
Конвенции
Конвенции за да не бъде ўикито пълен хаос:
- Слагайте категории на статиите. Те обикновенно се слагат най отдолу като линкове [[Категория:XXX]].
- Слагайте линк към статиите/страниците в страницата Съдържание - нейната идея е да бъде мега-гига-индекс който е подреден ръчно.
- За събития които най-лесно се отличават по дата, използвайте iso формат, за заглавието на статията - например Сбирка-2006-10-24
- Не правете супер огромни статии. Потърсете начин за смислено разделяне.
- Ако правите огромни статии хората по-трудно ще намират това което търсят.
- Ако започвате огромни статии има голяма вероятност те да останат недовършени.
- Отделете малко време за да се запознаете с основните конструкции в езика на ўикито - секции, списъци, форматиране...
- Ако качвате картинки, сложете описателно име - имената на картинките са глобални за цялото ўики.
Форматиране
Езикът на това уики поддържа най-различни чупки за форматиране, линкване и други. Всъщност той не е много прост и не си струва да се учи целият за писането на 1-2 статии. Поради тази причина, основна техника която препоръчвам да се използва е следната:
- Измисляте горе долу как искате да се форматира нещо.
- Намирате статия в това или друго уики ползващо MediaWiki съдържаща подобно форматиране.
- Щракате на редактиране или edit на съответната за да видите кода и.
- Намирате какъв е кода на съответното форматиране (и ако искате си копвате фрагменти).
- Кликате някъде другаде за да отмените редактирането.
За бързо въведение във форматирането, прегледайте тази статия в българската Уикипедия.
За да се упражнявате и изпробвате някакви неща, можете да използвате CsStuff:Пясъчник.
Програмен код
Когато пишете код на програми, псевдо код, или изобщо текст който трябва да излезе така както си е, не е добра идея да го слагате просто така. Има различни решения в тези случаи, но сякаш най-простo е използването на <pre> и </pre>.
Така например:
<pre>
#include <iostream>
using namespace std;
int main(){
cout << "Hello World!\n";
return 0;
}
</pre>
излиза като:
#include <iostream>
using namespace std;
int main(){
cout << "Hello World!\n";
return 0;
}
Това върши работа, въпреки че можеби има и по-добри начини... Има специален таг <nowiki> (и съответно </nowiki>) който действа по-различно и в известен смисъл по-силно. Той може също да се окаже полезен.
Математически формули
Това уики поддържа въвеждането на TeX формули, т.е. формулите от системите TeX, LaTeX и другите подобни. Повечето научни статии и книги се пишат на тези системи. За съжаление българското образование е много Microsoft-изирано, поради което (като цяло) студентите и учениците състезатели не могат да работят с тези системи (а и те не са съвсем прости и изискват време за изучаване). Все пак правенето на математически формули е сравнително лесно. Формулите се слагат между <math> и </math>.
Много от формулите могат да се пишат и на HTML с таговете sup, sub и други. Можеби използването на TeX е по-добро, но и HTML може да свърши работа на хората които са опитни с него.
Например:
- <math>\log n! = \log \prod_{i=1}^n i = \sum_{i=1}^n \log i</math> излиза като
<math>\log n! = \log \prod_{i=1}^n i = \sum_{i=1}^n \log i</math>
- <math>\Theta(n \log n)</math> излиза като <math>\Theta(n \log n)</math>
- <math>\lceil ln(n!) \rceil</math> излиза като <math>\lceil ln(n!) \rceil</math>
Добри примери за това как се пишат някои формули и символи има в тази статия на българската Уикипедия. Прегледайте я!
В нашето уики много силно се интересуваме от сложности на алгоритми. Те могат да се пишат добре както с HTML, така и с TeX. Ето пример за писане на някои сложности:
| HTML код | HTML изглед | TeX код | TeX изглед |
|---|---|---|---|
| O(1) | O(1) | <math>O(1)</math> | <math>O(1)</math> |
| Θ(1) | Θ(1) | <math>\Theta(1)</math> | <math>\Theta(1)</math> |
| Θ(log ''n'') | Θ(log n) | <math>\Theta(\log n)</math> | <math>\Theta(\log n)</math> |
| O(log<sup>2</sup> ''n'') | O(log2 n) | <math>O(\log^2 n)</math> | <math>O(\log^2 n)</math> |
| <math>\Theta(\sqrt{n})</math> | <math>\Theta(\sqrt{n})</math> | ||
| <math>\Theta(\sqrt[3]{n})</math> | <math>\Theta(\sqrt[3]{n})</math> | ||
| O(''n''<sup>3/2</sup>) | O(n3/2) | <math>O(n^{3/2})</math> | <math>O(n^{3/2})</math> |
| <math>O(n^\frac{3}{2})</math> | <math>O(n^\frac{3}{2})</math> | ||
| Θ(''n'' + ''m'') | Θ(n + m) | <math>\Theta(n + m)</math> | <math>\Theta(n + m)</math> |
| O(''n''!) | O(n!) | <math>\Theta(n!)</math> | <math>\Theta(n!)</math> |
Забележете, че ''n'' не са двойни кавички около n, а две единични. Можете да ги използвате винаги когато искате да посочите някоя променлива из текста.
Графи
Това уики поддържа езика graphviz с помощта на следния extension. Той дава възможност по много прост начин да се правят диаграми на графи, дървета, структури от данни и други. Той не е всемогъщ, но е значително по-удобен отколкото използването на външни програми за генериране на диаграми.
Поради факта, че горният extension поддържа само един от graphviz филтри, той беше леко хакнат за да поддържа и други. Ако искате конкретната диаграма да не бъде обработвана с филтъра по подразбиране (dot) може да окажете друг филтър в началото на дефиницията като едноредов коментар между две удивителни. Това трябва да стане преди самата дефиниция. Поддържаните филтри са:
- dot (по подразбиране) - подходящ за йерархии и дървета.
- neato
- twopi
- circo - чертае върховете на графа в кръг. За да го укажете //!circo! преди дефиницията на графа.
- fdp
За да дефинирате диаграма на него, напишете дефиницията на графа между <graphviz> и </graphviz>.
Например:
<graphviz>
//!circo!
digraph G {
Perl [URL="Perl code"];
Java [URL="Java"];
Perl -> Java
}
</graphviz>
излиза като: <graphviz> //!circo! digraph G {
Perl [URL="Perl code"];
Java [URL="Java"];
Perl -> Java
} </graphviz>
А сега ще опитам да направя примерен свързан списък:
<graphviz>
digraph g {
graph [rankdir = "LR"];
node [
fontsize = "12"
];
edge [];
"head" [
label = "head"
shape = "ellipse"
];
"node0" [
label = "<f0> value: 0| <f1> next:"
shape = "record"
];
"node1" [
label = "<f0> value: 1| <f1> next:"
shape = "record"
];
"node2" [
label = "<f0> value: 2| <f1> next: null"
shape = "record"
];
"head" -> "node0"
"node0":f1 -> "node1"
"node1":f1 -> "node2"
}
</graphviz>
Излиза като:
<graphviz> digraph g { graph [rankdir = "LR"]; node [ fontsize = "12" ]; edge []; "head" [ label = "head" shape = "ellipse" ]; "node0" [ label = "<f0> value: 0| <f1> next:" shape = "record" ]; "node1" [ label = "<f0> value: 1| <f1> next:" shape = "record" ]; "node2" [ label = "<f0> value: 2| <f1> next: null" shape = "record" ];
"head" -> "node0" "node0":f1 -> "node1" "node1":f1 -> "node2" } </graphviz>
Вероятно и по-добре може, но засега познанията ми стигат до толкова. Ако някой се чувства зарибен по този език, може да го разучи и напише още някой пример.
Още примери има на Примери graphviz.
