Kierros 6, tehtävä 4

Jongleerauskuviogeneraattori (250 p)

Tässä tehtävässä harjoitellaan erityisesti seuraavia asoita:

Tee Eclipseen uusi projekti, jonka nimi on tehtava6_4, ja luo tähän projektiin moduuli siteswap. Kirjoita siihen ohjelma, jonka avulla käyttäjä voi generoida jongleerauskuvioita siteswap-notaatiota käyttäen.

Uuden sirkuksen keskuksessa työskentelee jonglööri, joka on saanut tehtäväkseen uudistaa puhkikulunutta sirkusnumeroaan. Yrittäessään keksiä uusia kuvioita hän hoksaa että tietokoneella voi generoida jongleerauskuvioita sitewap-notaatiota käyttäen! Sinun tehtäväsi on kirjoittaa jonglöörille ohjelma, jolla tämä onnistuu.

Siteswap on notaatio, jota käytetään jongleerauskuvioiden kuvaamiseen. Siinä heitot on kirjoitettu lukujonona, jossa kukin luku kuvaa yhtä heittoa ja kertoo kuin monen tahdin päästä sama pallo heitetään uudestaan. On helpompaa ajatella luvun kuvaavan heiton korkeutta kuin sitä kuinka monen tahdin päähän se laskeutuu. Siteswap olettaa seuraavaa:

Luvut ovat yleensä välillä 0-9 (0 on siis myös "heitto" eli tyhjä käsi). Myös tässä tehtävässä oletetaan niin. Esimerkiksi sitewap 534 (luetaan: viisi kolme neljä) tarkoittaa että kyseessä kolmen (5, 3 ja 4) erilaisen heiton heiton yhdistelmä ja sen jaksonpituus on kolme. Suurin heittokorkeus on tässä 5. Koska palloja heitetään vuorokäsin, parilliset numerot siis putoavat samaan käteen ja parittomat eri käteen kuin mistä ne heitettiin. Siteswap 534 näyttää tältä: 534.

Aika eli tahdit siis juoksevat koko ajan ja kuvio toistuu eli heitot heitetään vuorokäsin toistensa perään.

Tahdit:       012345678...
Siteswap:   534534534...

Kirjoita ohjelmaasi seuraavat funktiot:

Kirjoita lisäksi pääohjelma, joka ensin pyytää pallojen lukumäärän, heiton maksimikorkeuden ja jaksonpituuden. Ohjelma kysyy em. asioita uudelleen niin kauan että ne ovat oikealla välillä. Heiton maksimikorkeus on oltava vähintään pallojen lukumäärä. Tämän jälkeen ohjelma tulostaa enintään 10 kappaletta siteswap-kuvioita. Käytä hyväksesi edellä kuvattua funktiota generoi_siteswappeja ja katso esimerkkiajoista tarkemmin, miten ohjelman pitää toimia. Lopuksi ohjelman pitää kysyä käyttäjältä jokin (mikä tahansa, ei siis noudata alussa annettuja rajoituksia) siteswap ja tulostaa linkki animaattoriin kyseiselle siteswapille sen ollessa validi. Muussa tapauksessa ohjelma tulostaa "Ei validi siteswap".

Voit olettaa, että käyttäjän antama syöte on muilta osin järkevä. Testaa jälleen ohjelmaasi ajamalla sitä itse ennen kuin palautat ohjelman Gobliniin. Palauta Gobliniin tiedosto siteswap.py.

Esimerkkejä ohjelman suorituksesta:

[ohjelman suoritus alkaa]
Monenko pallon kuvio (1-9)?
5
Heiton maksimikorkeus (5-9)?
8
Jaksonpituus (1-5)?
2
Siteswapit:
28
37
46
55
64
73
82
Anna jokin siteswap?
46
http://jugglinglab.sourceforge.net/siteswap.php?46
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Monenko pallon kuvio (1-9)?
12
Monenko pallon kuvio (1-9)?
3
Heiton maksimikorkeus (3-9)?
2
Heiton maksimikorkeus (3-9)?
5
Jaksonpituus (1-5)?
3
Siteswapit:
144
153
225
234
252
315
333
342
414
423
Anna jokin siteswap?
3
http://jugglinglab.sourceforge.net/siteswap.php?3
[ohjelman suoritus päättyy]

[ohjelman suoritus alkaa]
Monenko pallon kuvio (1-9)?
5
Heiton maksimikorkeus (5-9)?
5
Jaksonpituus (1-5)?
1
Siteswapit:
5
Anna jokin siteswap?
112
Ei validi siteswap.
[ohjelman suoritus päättyy]

Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta