Makowce i Keksy

0

Witam, rozwiązałem zadanie Makowce i Keksy z VII OIG. napisałem taki kod. Ale dostałem tylko 10 punktów. Mogli byście mi powiedzieć czy wina jest algorytmu czy implementacji?? Zadanie w załączniku. Oto kod:

Kopiuj
 #include <iostream>
using namespace std;
struct obiekt
{
    unsigned int skladniki[100000];
    unsigned int maks[100000];
};
int skladniki[100000];
int N,M=0,K=0;
obiekt mak;
obiekt keks;
void read()
{
    cin>>N;
    for(int i=0;i<N;i++) cin>>skladniki[i];
    for(int i=0;i<N;i++) cin>>mak.skladniki[i];
    for(int i=0;i<N;i++) cin>>keks.skladniki[i];
}
int main()
{
    read();
    for(int i=0;i<N;i++)
    {
        mak.maks[i]=0;
        keks.maks[i]=0;
        if(mak.skladniki[i]!=0)
        {
            mak.maks[i]=skladniki[i]/mak.skladniki[i];
            if(mak.maks[i]<M && mak.maks[i]!=0 || M==0) M=mak.maks[i];
        }
        if(keks.skladniki[i]!=0) keks.maks[i]=skladniki[i]/keks.skladniki[i];
        {
            if(keks.maks[i]<K && keks.maks[i]!=0 || K==0) K=keks.maks[i];
        }
    }
    if(M>K)
    {
        for(int i=0;i<N;i++)
        {
            keks.maks[i]=0;
            if(keks.skladniki[i]!=0)
            {
                keks.maks[i]=(skladniki[i]-(mak.skladniki[i]*M))/keks.skladniki[i];
                if(keks.maks[i]<K || K==0)
                {
                    K=keks.maks[i];
                    if(K==0)
                    {
                        break;
                    }
                }
            }
        }
    }
    else if(K==M)
    {
        int K1,M1;
        for(int i=0;i<N;i++)
        {
            if(mak.skladniki[i]!=0)
            {
                mak.maks[i]=0;
                mak.maks[i]=(skladniki[i]-(keks.skladniki[i]*K))/mak.skladniki[i];
                if(mak.maks[i]<K || M1==0)
                {
                    M1=mak.maks[i];
                    if(M1==0)
                    {
                        break;
                    }
                }
            }
        }
        for(int i=0;i<N;i++)
        {
            keks.maks[i]=0;
            if(keks.skladniki[i]!=0)
            {
                keks.maks[i]=(skladniki[i]-(mak.skladniki[i]*M))/keks.skladniki[i];
                if(keks.maks[i]<K || K1==0)
                {
                    K1=keks.maks[i];
                    if(K1==0)
                    {
                        break;
                    }
                }
            }
        }
        if(M1+K<M+K1)
        {
            K=K1;
        }
        else
        {
            M=M1;
        }
    }
    else
    {
        for(int i=0;i<N;i++)
        {
            if(mak.skladniki[i]!=0)
            {
                mak.maks[i]=0;
                mak.maks[i]=(skladniki[i]-(keks.skladniki[i]*K))/mak.skladniki[i];
                if(mak.maks[i]<K || M==0)
                {
                    M=mak.maks[i];
                    if(M==0)
                    {
                        break;
                    }
                }
            }
        }
    }
    cout<<M+K;
    return 0;
}
                
Shalom
http://blog.doubleslash.de/wp-content/uploads/2007/02/spaghetti-code.jpg Rozwijając moją wypowiedź: przepisz ten kod jeszcze raz. Tym razem w wersji dla człowieka a nie dla komputera.
KR
toz to nawet kompilator by sie 'zaplatal' w tym kodzie ;)
KR
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 2 lata
  • Postów:353
0

Jesli jest to zadanie optymalizacyjne czyli z serii, podaj maksymalna mozliwa ilosc wyrobow jaka mozna wykonac z danych skladnikow to wtedy implementujesz cos takiego:
http://pl.wikipedia.org/wiki/Problem_plecakowy

Wydaje mi sie ze tak jest chociaz w zadaniu nie jest to sprecyzowane, a byc powinno.

edytowany 1x, ostatnio: Krycho
Sopelek
Właśnie to nie jest problem plecakowy, na omówieniu nawet to zaznaczyli. Że to NIE jest. Ja zrobiłem podobnie (tak mi się wydaje, ten kod jest ciężki do ogarnięcia) jak kolega, trochę ładniej. Niestety nie wiem ile punktów dostałem, bo ich platforma jest c**** i nie dawała mi dostępu do wyników LOL. btw. Wydawało mi się, że próbowanie wszystkich (2) możliwości jest najoptymalniejsze, jednak na omówieniu coś mówił o lepszej metodzie. Jakbym zrozumiał to bym podesłał teraz, może ktoś inny wykmini ;d.
KR
Jesli nie jest to optymalizacja, to w takim razie wystarczy cos takiego. http://ideone.com/AVZ9ZO Dodac ifa dla ilosci skladnikow rownej 0 i tyle. Chociaz wydaje mi sie ze to by bylo zdecydowanie zbyt proste rozwiazanie.
Sopelek
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Kraków
  • Postów:467
0

Wrzucę kod mniej więcej taki jaki napisałem na zawodach. Algorytm pozostał taki sam.
Wydaje mi się, że zdobyłem za niego <40 punktów. (Wnioskuję po tym, że jedno zadanie mam tak jak inni, podostawali 100, a ogółem miałem <140, bo nie załapałem się do laureatów, z których najniższy miał właśnie 140.)
http://ideone.com/r05FH1
btw. może być niezrozumiałe do końca

Kopiuj
    unsigned int maxMakowcow1 = 0xFFFFFFFF, maxMakowcow2 = 0xFFFFFFFF;
    unsigned int maxKeksow1 = 0xFFFFFFFF, maxKeksow2 = 0xFFFFFFFF;

ta liczba w nazwie zmiennej oznacza kolejność w jakiej robimy ciastka czy jak to sie tam zwie. Np maxKeksow2 jest liczą keksów jakie można zrobić po uprzednim zrobieniu makowców.
są jeszcze dostepne1 i dostepne2, ale to tylko po to żeby rozróżnić dwie kopie.

@Krycho
Twój daje złe wyniki. W dodatku jest niezoptymalizowany.
Sprawdź chociażby dla
3
5 4 8
1 2 2
2 1 3
(zamienione miejscami składniki dla keksów i makowców)

edytowany 6x, ostatnio: Sopelek
KR
Dlatego pisalem ze jest to problem optymalizacyjny. Bo jesli trzeba wylonic maksymalna ilosc wyrobow jaka mozna zrobic z danych skladnikow, gdzie kolejnosc nie jest brana pod uwage, to jest to typowy problem plecakowy. Mamy kilka cegielek i chcemy jak najwiecej ich zmiescic, tutaj dostac jak najwiecej wypiekow. Implementacja algorytmu ze strony ktora dalem wyzej zagwarantuje w tym wypadku max pkt i dosyc dobry czas.
Sopelek
Właśnie, że to nie jest problem plecakowy. ;D
KR
Tylko dlatego ze mamy tutaj 2 cegielki nie oznacza ze nim nie jest. Oczywiscie nie jest to typowe zadanie pod to, ale chodzi o znalezienie pewnego maksimum funkcji.
Sopelek
Na omówieniu zadań wyraźnie zaznaczyli, że nie ma to nic wspólnego z problemem plecakowym i rozwiązanie wzorcowe było zupełnie z tym niezwiązane.
KR
Co nie zmienia faktu ze algorytm sie sprawdzi ;) Poza tym ukladajacy zadania nie sa nieomylni, a rozwiazanie wzorcowe nie musi byc najlepszym mozliwym.
robcio
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Lokalizacja:Opole
  • Postów:533
0

Tu chodzi o maksymalną ilość keyksów i makowców jaką można upiec bo dla drugiego przykładu są dwie opcje:
albo jest 3 keksy i jeden makowiec
lub 4 makowce i jeden keks
chyba dobrze licze. W treści zadania nie ma ,że musi być maksymalna ogółem liczba ciast. Ale z tego co napisałem to wywnioskowuje ,że właśnie chodzi o tą maksymalną ilość ciast


Nie odpowiadam na PW z prośbą o pomoc programistyczną.
Sopelek
"ile w sumie ciast tych rodzajów JEST W STANIE upiec." Nie ma wcale...
KR
Jest w stanie upiec x lub y lub ... . Co nadal bedzie poprawna odpowiedzia wnioskujac z tresci zadania. Nie jest napisane "ile w maksymalnie jest w stanie upiec" tylko w sumie, a suma to nie maksimum ;)
robcio
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 10 lat
  • Lokalizacja:Opole
  • Postów:533
0

Sorru za pisanie posta pod postem, ale ja wykombinowałem taki algorytm wydaje mi się ,że będzei działać dla wszystkich przypadków

Dla pierwszego przykładu:
5 4 8 <-- stan początkowy

rozważmy przypadek kiedy byśmi chcieli na początku upiec makowca.
suma składników po tym zabiegu będzie wynosiła:

3 3 5 <-- po upieczeniu makowca

a gdybyśmy na początku upiekli keksa to po tym będziemy mieli tyle składników:

4 2 6 <-- po upieczeniu keksa

Teraz pytanie który na początku przypadek wybrać. Otóż musimy dążyć do tego ,aby
rozkład był jak najbardziej równomierny
W pierwszym przypadku różnica pomiędzy 3 a 3 wynosi 0 a pomiędzy 3 a 5 różnica wynosi 2
W drugim przypadku różnica pomiędzy 4 a 2 wynosi 2 a pomiędzy 2 a 6 wynosi 4.
Od razu wiadomo ,że drugi przypadek jest zły ,ponieważ liczby są rozłożone mniej równomiernie.
Jedziemy dalej:

Jeśli upieczemy makowca zostanie nam:

1 2 2 --> abs(1-2) + abs(2 - 1) = 1

a jeśli keksa:

2 1 3 --> abs(2 -1) + abs(1-3) = 3

zatem od razu już wiemy jaką drogą podążymy.
Więc zostaje nam:

1 2 2

tutaj zostaje nam już tylko jedna opcja. Upieczenie keksa.

Dla drugiego przykładu:

7 5 8 <-- wartość początkowa

jeśli upieczemym makowca na początku:

6 4 7 teraz wartości bezwzględne z sąsiednich komórek wynoszą: 5

jeśli upieczemy keksa:

5 4 6 suma wartości bezwględnych z sąsiednich komórek wynosi: 3 zatem podążamy tą drogą

teraz jeśli upieczemy makowca:

4 3 5 suma wartości bezwględnych z sąsiednich komórek wynosi: 3

a jeśli keksa:

3 3 4 suma wartości bezwględnych z sąsiednich komórek wynosi: 1 zatem podążamy tą drogą

teraz jeśli upieczemy makowca:

2 2 3 suma wartości bezwględnych z sąsiednich komórek wynosi: 1

a jeśli keksa

1 2 2 suma wartości bezwględnych też wynosi 1 , ale po tym nie moglibysmy już nic upiec
zatem podążamy pierwszą drogą tam gdzie po zsumowaniu będziemy mieli większą liczbę składników(czyli bedziemy mogli więcej upiec)

po upieczeniu makowca:

1 1 2 suma wartości bezwględnych też wynosi 1

po upieczeniu keksa:

0 1 1 tutaj suma wartości bezwzględnych wynosi też 1, ale w pierwszym przypadku pozostało
nam więcej składników więc podążamy tamtą drogą

no i tutaj pozostaje nam tylko upieczenie makowca ,ponieważ na keksa już nie mamy składników
pozostaje nam:
0 0 1


Nie odpowiadam na PW z prośbą o pomoc programistyczną.
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:8 minut
0

Gość nie chce gotowego rozwiązania, ale wyjaśnienia czemu jego metoda nie działa! Chwała mu za to.
Nikt mu tego nie powie, bo napisał kod w taki sposób, że głowa boli, a nie był łaskaw wyjaśnić jaki miał pomysł (a domyślanie się tego na podstawie takiego błędnego spaghetti to istna katorga).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Ma może ktoś linka? Jak słusznie zauważył @Shalom jest przy pierwszym poście.
Chyba wymyśliłem ciekawy algorytm, ale nie wiem czy będzie tu pasować.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
Shalom
Linka do czego? Zadanie jest podlinkowe w pierwszym poście. Linka do sprawdzarki? Przykro mi ale chyba już skończyłeś gimnazjum :D
_13th_Dragon
Ups ślepy jestem.
0

Witam, przebudowałem cały algorytm, moglibyście teraz mi napisać czemu dostałem tylko 40 punktów, na wszystkie testy 1 rozwiązało błędnie i parę razy był limit czasu. Oto kod:

Kopiuj
#include <iostream>

using namespace std;

const int imax=100000;
int S[imax];
int M[imax];
int K[imax];

int main()
{
	int N;
	cin>>N;
	for(int i=0;i<N;i++) cin>>S[i];
	for(int i=0;i<N;i++) cin>>M[i];
	for(int i=0;i<N;i++) cin>>K[i];

	int min= 100000;
	for(int i=0;i<N;i++)
	{
		if(M[i]==0) continue;
		if(S[i]/M[i]<min)min=S[i]/M[i];
	}
	int max=0;



	while(min>0)
	{
		int min_k=100000;
		for(int i=0;i<N;i++)
		{
			if(K[i]==0) continue;
			if(K[i]!=0 && (S[i]-(M[i]*min))/K[i]<min_k) min_k=(S[i]-(M[i]*min))/K[i];
		}
		if(min_k+min>max)
		{
			max=min_k+min;
		}
		min--;
	}
	cout<<max;
	return 0;
} 
_13th_Dragon
Przepełnienia + zły algorytm.
0

czemu zły algorytm skoro uzyskałem 50 punktów gdy wprowadziłem modyfikację:

Kopiuj
 #include <iostream>

using namespace std;

const int imax=100000;
int S[imax];
int M[imax];
int K[imax];

int main()
{
	int N;
	cin>>N;
	for(int i=0;i<N;i++) cin>>S[i];
	for(int i=0;i<N;i++) cin>>M[i];
	for(int i=0;i<N;i++) cin>>K[i];

	int min= 1000000000;
	for(int i=0;i<N;i++)
	{
		if(M[i]==0) continue;
		if(S[i]/M[i]<min)min=S[i]/M[i];
	}
	int max=0;


	while(min>0)
	{
		int min_k=1000000000;
		for(int i=0;i<N;i++)
		{
			if(K[i]==0) continue;
			if(K[i]!=0 && (S[i]-(M[i]*min))/K[i]<min_k) min_k=(S[i]-(M[i]*min))/K[i];
		}
		if(min_k+min>max)
		{
			max=min_k+min;
		}
		min--;
	}
	cout<<max;
	return 0;
}
0

Czy moglibyście mi zoptymalizować ten algorytm, jeśli się da:

Kopiuj
#include <iostream>

using namespace std;

const int imax=100000;
int S[imax];
int M[imax];
int K[imax];

int main()
{
	ios_base::sync_with_stdio(0);
	int N;
	cin>>N;
	for(int i=0;i<N;i++) cin>>S[i];
	for(int i=0;i<N;i++) cin>>M[i];
	for(int i=0;i<N;i++) cin>>K[i];

	int min=1000000000;
	for(int i=0;i<N;i++)
	{
		if(M[i]!=0)
		{
			if(S[i]/M[i]<min)min=S[i]/M[i];
		}
	}
	int max=0;


	while(min>0)
	{
		int min_k=1000000000;
		for(int i=0;i<N;i++)
		{
			if(K[i]!=0)
			{
				if((S[i]-(M[i]*min))/K[i]<min_k) min_k=(S[i]-(M[i]*min))/K[i];
			}
		}
		if(min_k+min>max) max=min_k+min;
		min--;
	}
	cout<<max;
	return 0;
} 
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:8 minut
0

co tu optymalizować skoro daje zły wynik.


moja rada napisz sobie funkcję: ```cpp int ileKekosowGdy(int makowcow) ``` a następnie masz szukać maksimum funkcji: ```cpp int sumaCiastGdy(int makowcow) { return ileKekosowGdy(makocow) + makowcow; } ``` opis szukania maksimum znajdziesz w internecie.

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
0

Nie daje złego wyniku, poprawiłem, dawał zły wynik gdyż dałem za mały zakres zmiennej, int, a nie long long int

_13th_Dragon
I tobie zajęło 27 godzin zrozumienie tego co ci powiedziałem :D
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:8 minut
0

patrzyłeś w link? od kiedy to 10 nie mieści się w int?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
0

Nie 10 a 18, doczytaj.

0

Uzyskałem 50 punktów, wszystkie odpowiedzi dobrze a w kilku limit czasu :)

0

Sory, pomyliłem zadania :) Chodziło o to że jedną zmienną zainicjowałem zbyt małą artością i wywalał się na jednym teście :)

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:8 minut
0

Gościu umiesz czytać ze zrozumieniem?
To łopatologicznie, jeśli do swojego programu wpiszesz dane:

Kopiuj
2
10 10
5 0
1 1

to twój kod zwraca 6, a prawidłowa odpowiedź to 10 (10 keksów +0 makowców).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
0
Kopiuj
 #include <iostream>

using namespace std;

const int imax=100000;
int S[imax];
int M[imax];
int K[imax];

int main()
{
	ios_base::sync_with_stdio(0);
	int N;
	cin>>N;
	for(int i=0;i<N;i++) cin>>S[i];
	for(int i=0;i<N;i++) cin>>M[i];
	for(int i=0;i<N;i++) cin>>K[i];

	int min=1000000000;
	for(int i=0;i<N;i++)
	{
		if(M[i]!=0)
		{
			if(S[i]/M[i]<min)min=S[i]/M[i];
		}
	}
	int max=0;


	while(min>=0)
	{
		int min_k=1000000000;
		for(int i=0;i<N;i++)
		{
			if(K[i]!=0)
			{
				if((S[i]-(M[i]*min))/K[i]<min_k) min_k=(S[i]-(M[i]*min))/K[i];
			}
		}
		if(min_k+min>max) max=min_k+min;
		min--;
	}
	cout<<max;
	return 0;
}

Oj, moje przeoczenie, ale to nie zmienia faktu że jest limit czasu a nie zła odpowiedź:
Załączam screena z testami:

Sopelek
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 8 lat
  • Lokalizacja:Kraków
  • Postów:467
0

Tak przy okazji. Nie wiem czemu w niektórych testach mam złe wyniki, skoro algorytm jest na pierwszy rzut oka poprawny
Chodzi mi o ten, który podałem w 3 poście w temacie. Mógłby ktoś do niego zajrzeć?
Wykonuje się bardzo szybko, ale na niektórych testach się wywala, szkoda, że nie można podpatrzeć. Jakby poprawić błąd to może byłoby dużo punktów.
Działa na łopatologicznej zasadzie sprawdzania ile można zrobić keksów, jeśli najpierw zrobiono max makowców i na odwrót. Nie mam pojęcia jak to może dawać złe wyniki.

http://screenshooter.net/6191878/geotidf
http://screenshooter.net/6191878/usgmxos

http://ideone.com/r05FH1

haha, w zadaniu talerz, na rozwiązaniu wzorcowym (algorytm ten co podawali na omówieniu, nie dało rady wcisnąć nic co mogło by znacząco spowolnić działanie) mam limit czasu w kilku sprawdzeniach ;d
Może wina tego, że piszę na strumieniach? ;d

edytowany 5x, ostatnio: Sopelek
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
1
Sopelek napisał(a):

Nie mam pojęcia jak to może dawać złe wyniki.

3
55 40 55
1 2 3
3 2 1

Da się upiec 20 = 10 keksów + 10 makowców.

twój algorytm daje - 19


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Sopelek
Okej, kapuje. Nie przewidziałem sytuacji innej niż zrobienie max keksów + reszta makowców or max makowców + reszta keksów.
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:8 minut
0

Żeby zrozumieć jak rozwiązać to zadanie narysujcie sobie układ współrzędnych: x - liczba keksów; y - liczba makowców.
Każdy składnik daje ograniczenie jak maksymalne sumy keksów i makowców można zrobić. Ograniczenie to na wykresie będzie widoczne jako prosta nierosnąca. Każdy składnik to osobna prosta, które w sumie wyznaczają pewną łamaną określającą zależność ile można zrobić makowców przy zadanej ilości keksów.
Teraz zadaniem jest wynaczynienie prostej stycznej do tej krzywej o nachyleniu -1 .


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)