Neprihlásený používateľ |

Špecifikácia zadania

Cieľom zadania je naprogramovať slovnú hru Wordle, ktorej zmyslom je uhádnuť utajené slovo v rámci stanoveného počtu pokusov. Hra musí byť napísaná v jazyku C vo forme konzolovej aplikácie. Program musí využívať len štandardné súčasti jazyka C (žiadne externé knižnice) a byť kompilovateľný prekladačom GCC. Zadanie nebude automatizovane testované, ale bude vyhodnotené v rámci tzv. blind peer review (vzájomné anonymné hodnotenie študentmi). Každé odovzdané zadanie bude anonymne vyhodnotené 3 náhodne zvolenými študentmi. Vypracované zadanie by malo byť funkčné, esteticky vyzerajúce a kvalitne implementované. Všetky tieto faktory musia byť objektívne zvážené v rámci hodnotenia. Výsledná aplikácia je výsledkom vašej osobnej kreativity a nepodlieha žiadnym testovacím scenárom.

Wordle v skratke

Wordle je logická slovná hra, v ktorej hráč musí uhádnuť skryté slovo na stanovený počet pokusov. Zvyčajne sa háda 5-písmenové slovo na max. 6 pokusov. V rámci každého pokusu hráč zvolí pre každú pozíciu v skrytom slove písmeno. Výsledkom jedného pokusu je zistenie, ktoré písmená boli v slove uhádnuté. Hráč môže uhádnuť písmeno slova na zlej pozícii (bežne sa označuje žltou farbou) alebo písmeno slova na správnej pozícii (zelená farba). Každý typ uhádnutia by mal byť vhodne vizualizovaný, napr. pomocou farieb alebo vhodných znakov. V ideálnom prípade by mala byť hra vizualizovaná mriežkou s písmenami s rozmerom 5x6 (5 je dĺžka slova, 6 je max. počet pokusov). Predtým ako zadanie naprogramujete, je dobré si Wordle zopárkrát zahrať.


Obrázok 1: Wordle: stav hry na začiatku (vľavo) a uhádnuté slovo s históriou pokusov (vpravo).

Na zobrazovanie farebného textu v termináli môžete použiť ANSI escape sekvencie, viď ukážka zdrojového kódu pod textom. Výsledok spustenia ukážkového kódu je znázornený obrázkom 2. Každá escape sekvencia má tvar \033[XXXm, kde XXX predstavuje postupnosť atribútov textu oddelených bodkočiarkou. ANSI farebné atribúty sú uvedené na obrázku 3.

#include <stdio.h>

void reset() {
    printf("\033[0m");
}

void red() {
    printf("\033[31m");
}

void green() {
    printf("\033[32m");
}

void blue() {
    printf("\033[34m");
}

int main() {
    red();
    printf("red\n");
    green();
    printf("green\n");
    blue();
    printf("blue\n");
    reset();
    printf("normal\n");
    return 0;
}

Obrázok 2: Farebný text v termináli.


Obrázok 3: ANSI farebné atribúty (FG - farba textu, BG - farba pozadia).

Dôležité pokyny:

  • Zadanie musí byť naprogramované ako konzolová aplikácia.
  • Program musí využívať len štandardné hlavičkové súbory jazyka C a nesmie linkovať žiadne externé knižnice tretích strán. Musí byť kompatibilný so štandardom C11.
  • Program sa musí dať skompilovať prekladačom GCC.
  • Zdrojový kód musí byť riadne okomentovaný (aby sa recenzenti vyznali vo vašom kóde). Do komentárov neuvádzajte svoje meno - recenzent nesmie poznať autora zdrojového kódu.
  • Váš kód otestujte vo WSL alebo priamo v Linuxe. Taktiež si program otestujte pomocou Valgrindu a Address Sanitizera.
  • Odporúčanie pre recenzentov: hodnotené zdrojové kódy spúšťajte z bezpečnostných dôvodov radšej online v nejakom webovom vývojovom prostredí, napr. Replit alebo Online GDB.

Odovzdávanie

Odovzdáva sa len 1 zdrojový súbor, ktorý obsahuje celú implementáciu. Po odovzdaní máte v systéme prístup k poslednému odovzdanému súboru (odkaz hneď pod odovzdávacím formulárom). Počet odovzdávacích pokusov je neobmedzený. Na odovzdávanie sa nevzťahuje penalizácia.

Dôležité termíny

  • Deadline pre odovzdanie: 10. máj 2022, 23:59:59
  • Obdobie, počas ktorého sa budú hodnotiť zadania: 11. máj 2022, 00:00:00 - 12. máj 2022, 23:59:59
  • Posledné konzultácie: 13. máj 2022, od 10:00 hod. (kolega Ondrej Gallo)

Hodnotenie

Za toto zadanie je možné získať max. 10 bodov.

Peer review

Zadanie nebude hodnotené automatizovane serverom v rámci testovacích scenárov, ale formou tzv. peer review. Peer review je proces, ktorý existuje v akademickej sfére na hodnotenie vykonanej práce inými ľudmi, ktorí sú znalcami v danej oblasti. V kontexte tohto zadania to znamená, že vaše odovzdané zadanie bude anonymne vyhodnotené 3 náhodne zvolenými študentmi a vy taktiež vyhodnotíte 3 náhodne pridelené zadania. Hodnotenia sa zúčastnia len tí študenti, ktorí odovzdali zadanie 6. Hodnotenie pozostáva z prideleného počtu bodov a slovného komentára.

Systém bodovania

Bodovanie sa skladá z 2 časti:

  • Body od 3 anonymných recenzentov (študentov). Každý pridelený recenzent vaše zadanie ohodnotí bodmi v intervale $\langle0,3\rangle$ podľa kvality vášho riešenia. Dokopy môžete získať od recenzentov 9 bodov.
  • Body za aktivitu. Každý študent musí vyhodnotiť 3 náhodne pridelené anonymné zadania. Ak vyhodnotí všetky 3 zadania, dostane 1 bod za aktivitu. Zadania sa vyhodnocujú cez špeciálny formulár určený na hodnotenie, ktorý je súčasťou tejto stránky (prístupný cez odkazy v ľavom paneli stránky).
Kritériá hodnotenia

Každý recenzent by mal vo svojom hodnotení zohľadniť nasledovné kritériá:

  • Funkčnosť (či hra prebieha podľa pravidiel)
  • Kvalita kódu
    • Logické členenie, používanie funkcií.
    • Využívanie polí, štruktúr, smerníkov.
    • Efektívny algoritmus (časovo aj pamäťovo).
    • Kontrola Valgrindom + Address Sanitizerom.
    • Prehľadnosť kódu a komentáre.
  • Umelecký dojem

Video

Záznam zo seminára č. 12 (3. máj 2022)

Zdroje

Nasledujúce zdroje vám môžu pomôcť pri riešení zadania. Odporúčame si tieto zdroje pozrieť/preštudovať.

Jazyk C
Príručky
  1. Neoficiálna príručka jazyka C. Veľmi dobré na vyhľadávanie knižničných funkcíí, obsahuje popis parametrov funkcíí, návratových hodnôt a príklady.
  2. Oficiálna príručka jazyka C (kompatibilná so štandardom). Veľmi dobré na vyhľadávanie knižničných funkcíí, obsahuje popis parametrov funkcíí, návratových hodnôt a príklady. Je to najspoľahlivejší zdroj informácií, avšak prezentovaný veľmi technicky a pre začiatočníkov miestami náročne na pochopenie.
Použité grafické materiály
  1. freepik.com
  2. flaticon.com
  3. Font Awesome
Copyright © 2022, Pavol Marák, ÚIM FEI STU.
Vyrobené pomocou Django a Spectre.css.
Videá prehrávame pomocou Plyr prehrávača.
Responzívny dizajn testujeme pomocou Responsive Viewer.