CSES - Lukujono

Lukujonon ensimmäinen alkio on 11. Tämän jälkeen jokainen alkio on kuvaus edellisestä alkiosta. Kuvaus saadaan kertomalla vasemmalta oikealle, montako kertaa mikäkin numero esiintyy luvussa peräkkäin.

Luvussa 11 on yksi ykkönen, joten sen kuvaus on 1111. Luvussa 1111 on kaksi ykköstä, joten sen kuvaus on 2121. Luvussa 2121 on ensin yksi kakkonen ja sitten yksi ykkönen, joten sen kuvaus on 12111211. Luvussa 12111211 on ensin yksi ykkönen (kuvataan 1111), sitten yksi kakkonen (kuvataan 1212) ja lopulta kaksi ykköstä (kuvataan 2121), joten sen kuvaus on 111221111221.

Lukujonon ensimmäiset 6 alkiota ovat siis 11, 1111, 2121, 12111211, 111221111221, 312211312211.

Tehtäväsi on selvittää, mikä on lukujonon kohdassa nn oleva alkio. Voit olettaa, että nn on enintään 3030.

Python

Toteuta tiedostoon sequence.py funktio generate, joka palauttaa halutun alkion merkkijonona.

def generate(n):
    # TODO

if __name__ == "__main__":
    print(generate(1)) # 1
    print(generate(2)) # 11
    print(generate(3)) # 21
    print(generate(4)) # 1211
    print(generate(5)) # 111221

Java

Toteuta tiedostoon Sequence.java metodi generate, joka palauttaa halutun alkion merkkijonona.

public class Sequence {
    public String generate(int n) {
        // TODO
    }

    public static void main(String[] args) {
        Sequence s = new Sequence();
        System.out.println(s.generate(1)); // 1
        System.out.println(s.generate(2)); // 11
        System.out.println(s.generate(3)); // 21
        System.out.println(s.generate(4)); // 1211
        System.out.println(s.generate(5)); // 111221
    }
}