Szkoła Programistów
Lekcja 3

Nauka programowania

Gdy znasz już podstawy składni, czas zweryfikować umiejętności w praktyce. Serwis pl.spoj.com pozwala rozwiązywać zadania algorytmiczne i automatycznie sprawdza poprawność Twojego kodu.

  1. 1.

    Zarejestruj się na SPOJ

    Wejdź na pl.spoj.com i utwórz darmowe konto. SPOJ to serwis z zadaniami algorytmicznymi, który automatycznie sprawdza poprawność Twojego kodu.

  2. 2.

    Znajdź zadanie: Liczby pierwsze

    Po zalogowaniu przejdź do sekcji zadań łatwych i znajdź pierwsze zadanie dotyczące liczb pierwszych.

    Problem→Łatwe→Liczby pierwsze (pierwsze zadanie)
  3. 3.

    Wrzuć rozwiązanie w Submit

    Poniżej znajdziesz działający kod w JavaScript. Skopiuj go i wklej w formularzu Submit. Wybierz język JavaScript (Node.js).

    const readline = require('readline');
    
    function runTests(callback) {
        const rl = readline.createInterface({
            input: process.stdin,
            output: process.stdout
        });
    
        rl.question("", (T) => {
            T = parseInt(T);
            let count = 0;
            let results = [];
    
            const askNext = () => {
                if (count < T) {
                    rl.question("", (line) => {
                        results.push(callback(line));
                        count++;
                        askNext();
                    });
                } else {
                    rl.close();
                    console.log(results.join('\n'));
                }
            };
    
            askNext();
        });
    }
    
    
    function czyPierwsza(n){
        if(n<2)
            return "NIE";
    
        for(let i=2;i*i<=n;i++)
            if(n%i==0)
                return "NIE";
        return "TAK";
    }
    
    runTests(czyPierwsza);

Jak działa ten kod?

Nie wklejaj kodu bez zrozumienia — spróbujmy go rozłożyć na części. SPOJ działa tak: najpierw podaje liczbę T, czyli ile razy sprawdzi Twój program, a potem podaje Ci po jednej liczbie na linię — Twój program musi dla każdej z nich wypisać odpowiedź.

  • ▸Funkcja runTests to „pomocnik”, który czyta dane wejściowe z terminala (readline), odczytuje liczbę T, a potem T razy wczytuje kolejną linię i wywołuje dla niej funkcję, którą mu podamy jako argument (callback). Dzięki temu możesz go użyć do każdego zadania na SPOJ, które działa w ten sposób — po prostu podajesz inną funkcję.
  • ▸Funkcja czyPierwsza to już właściwe rozwiązanie zadania. Liczba pierwsza to liczba większa od 1, która dzieli się tylko przez 1 i przez samą siebie. Funkcja sprawdza, czy n da się podzielić bez reszty przez jakąkolwiek liczbę od 2 do pierwiastka z n — jeśli tak, to nie jest pierwsza ("NIE"), jeśli nie znajdzie takiego dzielnika, to jest pierwsza ("TAK").
  • ▸Na końcu wywołujemy runTests(czyPierwsza) — czyli „pomocnikowi” podajemy naszą funkcję sprawdzającą liczby pierwsze jako callback.

Jeśli podoba Ci się to - spróbuj sił w innym zadaniu.