Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice algo roue de la fortune

- help :'(

Sujet résolu
23 septembre 2019 à 11:23:44

Salut,

Ca fait un petit moment que je n'ai pas demandé de l'aide mais là, dire que je sèche c'est un euphémisme.

Je suis sur un exercice de france ioi qui m'arrache les cheveux et je sais que je fais n'importe quoi mais je n'arrive pas à formater mon cerveau pr comprendre....

Le sujet (trouvable ici : http://www.france-ioi.org/algo/task.php?idChapter=650&iOrder=26) me demande la chose suivante :

Lors de l'examen final à la fin de leurs études, la tradition veut que les élèves tirent un sujet au hasard. Tirer un numéro dans un chapeau n'étant pas très amusant, ils utilisent une roue comme celle-ci, qu'ils peuvent faire tourner dans un sens ou dans l'autre.

Les enseignants, par expérience, arrivent toujours à estimer de combien de "zones" la roue va tourner et peuvent aller chercher le sujet et revenir, pendant que la roue tourne encore. Il faut, pour cela, calculer rapidement sur quelle zone le curseur va s'arrêter, en fonction du nombre de zones dont la roue va tourner. A vous de jouer !

Ce que doit faire votre programme :

Votre programme doit commencer par lire un entier nbZones. Sachant que la roue va tourner de nbZones zones, vous devez calculer (puis afficher) sur quelle zone le curseur va arriver.

Ainsi, si la route tourne de +2 zones alors le curseur arrive sur la zone 2, et si la roue tourne de -2 zones, alors le curseur arrive sur la zone 22.

Exemples

Exemple 1

entrée :

25

sortie :

1

Du coup dans mon délire de dev wannabe je me dis ok : au vu des exercices précédents ce que je dois faire c'est faire dire que :

(je mets mon processus mental parce que je me dis que c'est pas juste le code qui est daubé, mais mon cerveau aussi^^)

-ça va de 0 à 23, donc si c'est 24 ou un %24 alors ça donne zero.

-Ensuite si ça fait >0 et <=23, alors le résultat est celui donné en entrée et si c'est > 24 alors c'est l'entrée // 24

-pour les négatifs ça se corce un peu niveau code mais le processus reste le même : si c'est -24 ou un multipe de -24 alors le resultat est 0

-si ça fait >0 et < -23 alors le resultat est -(celui de l'entrée)

-si ça fait > 0 et > -23 alors le resultat est -(celui de l'entrée) // 24

(si vous lisez encore à ce stade je vous bénis).

Du coup j'en suis là à ce stade du mal de crâne :

from math import *
nbZones = int(input())
resultat = 0
if nbZones > 0 and nbZones <= 23:
   resultat = nbZones
elif nbZones > 0 and nbZones > 24:
   resultat = nbZones // 24
elif nbZones % 24 == 0:
   resultat = 0
elif nbZones < 0 and nbZones >= 23:
   resultat = (-nbZones)
elif nbZones < 0  and nbZones < 24:
   resultat = (-nbZones) // 24
print(resultat)

pour note dans les négatifs je mets (-nbZones) mais j'ai un doute si on peut faire ça en python en fait (ou en quelque langage que ce soit en vrai)

Vala, si vous avez la bonté de m'aiguiller sans me torcher la réponse histoire que je comprenne vraiment ce que je fais je suis preneur^^

  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2019 à 11:41:06

On ne te demande pas le nombre de tours mais la case finale. Donc c'est un simple modulo et c'est tout.
  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2019 à 12:06:10

je ne suis pas sur de comprendre. En gros je ne devrais utiliser que des % ?

EDIT :

J'ai un peu modifié le code, j'en ressors avec 8/13 ce qui est mieux qu'avant, mais bon, y'a tjs un soucis :/

from math import *
nbZones = int(input())
resultat = 0
if nbZones > 0 and nbZones <= 23:
   resultat = nbZones
elif nbZones > 0 and nbZones > 24:
   resultat = nbZones % 24
elif nbZones % 24 == 0:
   resultat = 0
elif nbZones < 0 and nbZones <= -23:
   resultat = (nbZones * -1)
elif nbZones < 0  and nbZones > -24:
   resultat = (nbZones * -1) % 24
print(resultat)


-
Edité par Vaggarathh 23 septembre 2019 à 12:15:40

  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2019 à 12:21:15

Oui, ça tient en une ligne (très courte) et il n'y a aucun cas à distinguer.

  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2019 à 12:26:44

EDIT: Cramé :-°

-
Edité par BunshinKage 23 septembre 2019 à 12:27:21

  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2019 à 12:34:35

bon alors je ne suis pas capable de comprendre. En une seule ligne sans distinguer aucun cas, je ne vois pas comment on peut faire.

j'abandonne là

  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2019 à 13:08:09

Vaggarathh a écrit:

bon alors je ne suis pas capable de comprendre. En une seule ligne sans distinguer aucun cas, je ne vois pas comment on peut faire.

j'abandonne là


Surtout pas ! après tous les efforts que tu as fait, ce serait dommage !

  • Partager sur Facebook
  • Partager sur Twitter
23 septembre 2019 à 13:56:54

Comparons le comportement de // avec % pour les nombres de 20 à 30 exclus.

In [3]: for nbZones in range(20, 30): 
   ...:      print(f"{nbZones} // 24 = {nbZones // 24}") 
   ...:      print(f"{nbZones}  % 24 = {nbZones % 24}") 
   ...:                                                                                                                       
20 // 24 = 0
20  % 24 = 20
21 // 24 = 0
21  % 24 = 21
22 // 24 = 0
22  % 24 = 22
23 // 24 = 0
23  % 24 = 23
24 // 24 = 1
24  % 24 = 0
25 // 24 = 1
25  % 24 = 1
26 // 24 = 1
26  % 24 = 2
27 // 24 = 1
27  % 24 = 3
28 // 24 = 1
28  % 24 = 4
29 // 24 = 1
29  % 24 = 5



  • Partager sur Facebook
  • Partager sur Twitter
25 septembre 2019 à 10:19:50

J'ai fais une grosse pause sur ce problème histoire de passer à autre chose et arrêter de me prendre la tête dessus et en revenant c'était tellement évident que j'ai du mal à comprendre comment j'ai pu me compliquer autant la vie....

Oui, ça tient en une ligne (très courte) et il n'y a aucun cas à distinguer.

effectivement, c'était le meilleur conseil que tu pouvais me donner ! ^^


Et merci d'avoir pris la peine de m'aider ^^


@Dan : Aujourd'hui ça va, mais quand j'étais sur cet exercice j'aurai strictement rien bité à ton explication xD mais merci d'avoir pris le temps en tout cas :)


PascalOrtiz a écrit:

Vaggarathh a écrit:

bon alors je ne suis pas capable de comprendre. En une seule ligne sans distinguer aucun cas, je ne vois pas comment on peut faire.

j'abandonne là


Surtout pas ! après tous les efforts que tu as fait, ce serait dommage !



-
Edité par Vaggarathh 25 septembre 2019 à 10:21:52

  • Partager sur Facebook
  • Partager sur Twitter
13 avril 2020 à 15:45:26

qui peut nous donner la correction.mon programme ne marche pas et je ne trouve pas ou est le probleme
  • Partager sur Facebook
  • Partager sur Twitter
13 avril 2020 à 16:14:38

@BeltaiefEya Bonjour, merci de créer votre propre sujet en indiquent sur quoi vous bloquez et en fournissant le code que vous avez écrit en utilisant le bouton code </>  du forum.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter