OII > Pentagono e stella

Olimpiadi Italiane di Informatica – 15-11-2018 – Numero 19

La grafica della tartaruga prevede che si possano impartire degli ordini di movimento a una tartaruga, che li eseguirà lasciando sul terreno una traccia dei suoi movimenti, come se avesse una penna attaccata sulla pancia.
Gli ordini possono essere impartiti tramite un semplice linguaggio, stando attenti che:

  • le istruzioni destra e sinistra sono relative all’orientamento attuale della tartaruga, e il numero che segue è un angolo di rotazione (rispettivamente orario e antiorario) espresso in gradi;
  • le istruzioni pennasu e pennagiu sollevano e abbassano rispettivamente la penna sotto la pancia della tartaruga: quando la penna è sollevata ovviamente non lascia tracce sul terreno;
  • l’istruzione ripeti fa ripetere il blocco che segue, delimitato da parentesi graffe, per un numero di volte indicato a fianco dell’istruzione.

Inizialmente la tartaruga si trova nel vertice A, guarda in alto a destra ed è nella condizione pennagiu.
La misura dei lati è AB = a, BH = c, GH = b.
Il programmatore della tartaruga è stato però interrotto nel suo lavoro prima di poter scrivere le ultime due istruzioni ISTR18 e ISTR19 necessarie perché la tartaruga completi il disegno (il famoso grafo di Petersen).
Scrivere le due istruzioni mancanti.

pennagiu
ripeti 5 {
    avanti a 
    destra 72 
} 
destra 54 
avanti c 
ripeti 4 { 
    sinistra 18 
    avanti b 
    sinistra 18 
    avanti c 
    pennasu 
    sinistra 180 
    avanti c 
    pennagiu 
} 
ISTR18 
ISTR19

Seguendo il codice originale, senza le ultime due istruzioni, si ottiene la figura seguente

from turtle import *
 
a=150
b=180
c=33
setup(600, 600)
left(36)

pendown()
for i in range(5):
    forward(a)
    right(72)
right(54)
forward(c)
for i in range(4):
    left(18)
    forward(b)
    left(18)   
    forward(c)
    penup()
    left(180)
    forward(c)   
    pendown()

Osserva

  • La prime 6 istruzioni sono necessarie
  • I valori di a, b, c si ricavano a tentativi.

Per disegnare il tratto mancante sono necessarie le 2 istruzioni sinistra 18, avanti b

from turtle import *
 
a=150
b=180
c=33
setup(600, 600)
left(36)

pendown()
for i in range(5):
    forward(a)
    right(72)
right(54)
forward(c)
for i in range(4):
    left(18)
    forward(b)
    left(18)   
    forward(c)
    penup()
    left(180)
    forward(c)   
    pendown()
left(18)
forward(b)

La figura può essere più somigliante e l’algoritmo più semplice (?)

import turtle

WIDTH  = 500
HEIGHT = 500

a=150
b=180
c=33

turtle.setup(WIDTH, HEIGHT)
turtle.title("OII 2018")
turtle.bgcolor('pink')
turtle.shape('turtle')
turtle.pencolor('red')

turtle.pensize(4)
for i in range(5):
    turtle.forward(a)
    turtle.left(72)

turtle.pensize(2)
turtle.left(54)
for i in range(5):
    turtle.forward(c)
    turtle.left(18)   
    turtle.forward(b)
    turtle.left(18)
    turtle.forward(c)   
    turtle.left(180)

Lascia un commento