courage.py

Created by andreanx

Created on October 03, 2018

2.52 KB

Script de participation au défi Courage du concours TI-Planète-Casio de rentrée 2018. La triforce du courage a été scindée en 8 fragments dispersés aux quatre coins du ciel d’Hyrule. Heureusement le dieu des tempêtes Cyclos te prête son nuage volant, le célèbre Kinto1. La légende raconte que rares sont les êtres vivants capables de le chevaucher, qu’il faut avoir le cœur parfaitement pur… Quoi qu’il en soit, avec seulement 3 flèches utilisables au lieu de 4, ça n’a à priori pas l’air évident. Réalise le meilleur score possible en collectant aussi rapidement que possible le maximum de fragments de la triforce, puis envoie la liste ‘kinto’ à info@tiplanet.org. Syntaxe : courage([liste]). La liste est vide si omise. Une fois les instructions de la liste épuisées, Kinto1 passe en contrôle manuel. Taper [1], [2] ou [3] suivi de [enter] pour le contrôler. Taper [0] suivi de [enter] pour quitter l’interface, puis [échap/esc] pour revenir à la console.


from math import *
from cmath import *
from kandinsky import *
w=65537
p=75
kinto=[]
def mrand(x):return (p*x)%w
def kline(x1,y1,x2,y2,c=0):
  d=abs(x2-x1)-abs(y2-y1)
  if d>0:
    for k in range(round(min(x1,x2)),round(max(x1,x2))+1):set_pixel(k,round([y1,y2][min(x1,x2)==x2]+(k-min(x1,x2))*(y2-y1)/(x2-x1)),c)
  elif d<0:
    for k in range(round(min(y1,y2)),round(max(y1,y2))+1):set_pixel(round([x1,x2][min(y1,y2)==y2]+(k-min(y1,y2))*(x2-x1)/(y2-y1)),k,c)
  else:
    set_pixel(round(x1),round(y1),c)
def krect(x,y,z,t,c=0):
  for k in range(round(y),round(t)+1):
    kline(x,k,z,k,c)
def kdisk(x,y,r,c=0,i=0):
  while i<pi/2:
    z=r*e**(1j*i)
    krect(x-z.real,y-z.imag,x+z.real,y+z.imag,c)
    i+=3/r
def courage(kinti=[]):
  global kinto
  zs=320+222j
  m=True
  n=9
  b=.085
  a=31
  s=0
  z0=zs/2
  f=min(zs.real/2-1,zs.imag/2-1)
  db=[0j]
  krect(0,0,zs.real-1,zs.imag-1,color(0,127,0))
  for i in range(z0.real%25-z0.real,z0.real,25):
    kline(z0.real+i,0,z0.real+i,zs.imag-1,0)
    kline(0,z0.imag+i,zs.real-1,z0.imag+i,0)
  for i in range(1,n):
    a=mrand(a)
    db.append((8*a/w-4)/3)
    a=mrand(a)
    db[i]+=1j*(2*a/w-1)
    kdisk((z0+f*db[i]).real,(z0-f*db[i]).imag,f*b,color(255,127,0))
    db[i]=abs(db[i])+1j*phase(db[i])*pi/phase(-1)
  k=4
  z=0j
  t=z
  v=0
  d=True
  while k>0 and n>db[0].imag:
    m=m and len(kinti)>len(kinto)
    if m:
      v=kinti[len(kinto)]
    else:
      v+=.01*((k==3)-(k==1))
    if d or m or k>=1 and k<=3:
      if not(d):
        kinto.append(v)
        t=z
        a=mrand(a)
        z+=v+1j*(.04+a/w)/(9*abs(z.real)+1)
        s-=500*abs(z.real*e**(1j*z.imag)-t.real*e**(1j*t.imag))
        for i in range(n):
          if i==0 and db[0].imag==n-1 and z.real*t.real<=0 or i>0 and pi>=db[i].imag and b>=abs(z.real*e**(1j*z.imag)-db[i].real*e**(1j*db[i].imag)):
            if i>0:
              kdisk((z0+f*db[i].real*e**(1j*db[i].imag)).real,(z0-f*db[i].real*e**(1j*db[i].imag)).imag,f*b/3,color(255,0,0))
              db[i]=db[i].real+1j*(2*pi+db[i].imag)
            db[0]=1j+1j*db[0].imag
            s+=500*(3-min(1,abs(z.real*e**(1j*z.imag)-db[i].real*e**(1j*db[i].imag)))-min(1,abs(z.real-db[i].real)))
      kline((z0+f*t.real*e**(1j*t.imag)).real,(z0-f*t.real*e**(1j*t.imag)).imag,(z0+f*z.real*e**(1j*z.imag)).real,(z0-f*z.real*e**(1j*z.imag)).imag,color(255,255,0))
      draw_string(str(s),0,207)
      d=False
    if not m:k=int(input())
  print("Bon score ? Envoie la liste\n'kinto' a info@tiplanet.org")
  print("Score: "+(8000<s<=9000)*"(8000 ijou da!)"+(s>9000)*"(it's over 9000!)")
  return s

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.