Énoncés imprécis : Chiche (1/2 finale 2008)

Bonjour,

Mon avis sur la rédaction de cet énoncé :

*) Objectif de l'exercice à peu près clair. Heureusement pas de contextualisation artificielle.

*) Formulations peu claires :
-- pourquoi "sic" ici : "Dans le cas où plusieurs "CHICHE" existeraient (sic)" ?
-- terme vague : "on ne tiendra compte" (au lieu de dire "on renverra").

Peut-être que le "sic" veut ici dire "tel quel" mais ce n'est pas l'usage habituel de l'expression "sic" que d'ailleurs bien peu de candidats doivent connaître. Si on voulait dire que les lettres du mot sont "telles quelles", ie en majuscule, autant le formuler de manière explicite. Le(s) rédacteur(s) devrai(en)t lire ou relire le zen de Python.

*) Une fois de plus, la façon dont les données sont communiquées à l'utilisateur est très imprécise ce qui peut avoir un impact non négligeable sur la manière de coder.
Il n'est pas dit si les lignes ont le même nombre de caractères (les exemples laissent penser que oui mais un énoncé dans sa généralité ne doit pas être compris par extrapolation d'exemples, en particulier s'ils sont peu nombreux).
Il n'est pas dit ce qui suit l'entier n.
Il n'est pas dit que les chaines ne contiennent pas d'espaces (c'est capital car alors on ne peut plus utiliser le spécificateur %s dans scanf()). Pareil, il n'est pas dit comment sont terminées les chaînes ou le fichier (caractère nul, saut de ligne, EOF).

*) Le code-source C de base est inutilement compliqué (malloc complètement artificiels puisque la taille des données est connue à l'avance) voire orientant dans une mauvaise direction (on ne place pas la l'en-tête alors que son recours est plus que naturel, il est presque obligé).

Au passage, il n'y a aucune homogénéité de codage entre les différents modèles de code C, ça dépend de l'exercice, tantôt c'est int main(void), tantôt c'est int main(), tantôt c'est du scanf, tantôt du fgets, etc.

*) Sortie inutilement compliquée (source d'erreurs artificielles) : pourquoi les parenthèses ? pourquoi la virgule ? En outre, il semble naturel et d'usage de terminer la sortie par un saut de ligne, or il n'en apparait pas dans la sortie dans le code C.

Pour moi, c'est un nouvel exemple de rédaction trop relâchée.

Je n'ai pas le temps de regarder la formulation de l'exercice, ou sa solution proposée, alors je répond juste à ces quelques points...

Au passage, il n'y a aucune homogénéité de codage entre les différents modèles de code C, ça dépend de l'exercice, tantôt c'est int main(void), tantôt c'est int main(), tantôt c'est du scanf, tantôt du fgets, etc.

Effectivement, chaque modèle de code est proposé par l'auteur du sujet, lequel a une expérience différente de son voisin. N'y a-t-il pas plusieurs normes pour les langages ?
Quoi qu'il en soit, nous sommes en train d'uniformiser les entrées/sorties pour les exercices présents et futurs.

En outre, il semble naturel et d'usage de terminer la sortie par un saut de ligne, or il n'en apparait pas dans la sortie dans le code C.

Certes...

Sortie inutilement compliquée (source d'erreurs artificielles) : pourquoi les parenthèses ? pourquoi la virgule ?

Et pourquoi pas ? N'est-ce pas

naturel et d'usage

de présenter des coordonnées sous la forme d'un n-uplet ?

--
O'Xian
Prologin

Et pourquoi pas ? N'est-ce pas naturel et d'usage de présenter des coordonnées sous la forme d'un n-uplet ?

C'est l'usage dans un contexte de mathématiques, ici il ne s'agit pas de cela, il s'agit juste de récupérer deux nombres à l'écran. D'ailleurs, c'est bien comme ça qu'on récupère les coordonnées du personnage dans le problème des labyrinthes : ni virgule ni parenthèses.

Hum. Avoir à gérer la présence de parenthèses, points virgules rend la capture des données beaucoup plus difficile/compliquée. Tandis qu'en sorte, rajouter un truc par-ci par-là, ça embête pas grand monde de le coder.

Bonjour,
Je suis au même exercice et je me pose une question:
Est-ce que chiche peut commencer sur une ligne et finir sur une autre?

Et puis sinon, j'ai remarqué que plusieurs exo de la demi finale 2008 avaient des codes C++ identiques à ceux du C, ça complique carrément tout!

Merci d'avance!

Salut !
Chiche doit être sur une même ligne. Sinon, je te conseille de coder toi-même la gestion de l'entrée/sortie, enfin tout coder. Ca fait pas perdre trop de temps et ça simplifie pour coder le reste.

Est-ce que chiche peut commencer sur une ligne et finir sur une autre?

Bonne question à laquelle l'énoncé ne répond pas formellement même si on a l'impression que la chaîne CHICHE est à rechercher dans une même ligne (c'est ce que j'ai supposé et les tests sont passés mais bon, les tests ...).

c'est vrai c'est tellement compliqué d'écrire printf("(%d,%d)" à la place de printf("%d %d" ... **

C'est une complication inutile, c'est source d'erreur (si j'écris par exemple ( %d, %d) ou (%d,%d) mon code ne sera pas validé pour une bête histoire d'espace ce qui est une raison totalement artificielle alors que sans aucun caractère (au sens de char ni virgule, ni parenthèses ni le nombre d'espaces) un banal scanf("%d,%d", x, y) est capable de capturer deux entiers côte-à-côte avec autant de blank spaces que l'on veut entre eux. Et de toute façon, dans AUCUN exo que j'aie pu voir sur Prologin, on ne donne les coordonnées comme ça, on les donne soit côte-à-côte séparés par un espace, soit sur deux lignes consécutives et c'est le bon sens même. Donc, on garde des notations homogènes (et simples).

Et d'ailleurs, cette cette histoire de coordonnées ne tient pas debout, on n'a pas de position à proprement parler (abscissse, ordonnée) comme on en a dans un labyrinthe ou dans le problème sur la grenouille (deux cas où il y a des déplacements dans une grille et oùla notion de coordonnées a un sens) car ici les lignes sont données séquentiellement, indépendamment les unes des autres. D'ailleurs, celui qui a proposé le code-source C ne s'est même pas rendu qu'on n'avait absolument pas besoin de rentrer les caractères dans un tableau 2D d'où sa confusion à écrire des coordonnées.

Bien sûr, cette paire de parenthèses, cette virgule et l'espace ne sont rien en soi. Mais ce ne sont que des éléments de plus qui s'ajoutent aux multiples manques de rigueur de rédaction des énoncés donnés sur Prologin.

Très cher Candide,

Peut-être que celui qui a proposé le code-source en C est bien au courant qu'il existe d'autres représentations en mémoire pour ce genre de besoins, mais qu'il est aussi conscient qu'il ne s'agit pas ici d'être efficace sinon de proposer de résoudre des problèmes d'algorithmique.
Peut-être qu'ici, l'objectif était la manipulation de matrices, et que par conséquent l'utilisation d'une matrice de caractères semble indiquée... De fait, l'utilisation de coordonnées 2D pour représenter une position dans une matrice nést peut-être pas mal... en tout cas, c'est celle retenue par les mathématiciens de tout poils.

Ne perdez pas de vue, cher Candide, qu'encore une fois l'objectif n'est pas de produire du code efficace pour un problème donné, mais de forcer l'usage de certaines techniques...

Je vous remercie de ne pas avoir utilisé le terme "incompétent", mais je vous serai gré de vous abstenir de le penser...

Très cher Oxian

  • il ne s'agit pas ici d'être efficace sinon de proposer de résoudre des problèmes d'algorithmique.
  • Ce n'est pas aussi simple, la question de l'efficacité a quand même son importance puisqu'il y a des contraintes mémoire et de temps d'exécution.

  • Peut-être qu'ici, l'objectif était la manipulation de matrices,

  • Et bien c'était totalement artificiel.
    Au demeurant l'énoncé ne dit même pas que les chaines ont même longueur, a priori, on n'a aucune matrice (ce qui suppose un nombre égal de colonnes).

Et l'objectif était de trouver CHICHE, pas d'utiliser des matrices. C'est une mauvaise pratique que d'inciter des programmeurs à utiliser des solutions inadaptées (et inutilement compliquées) à la résolution d'un problème. Si on veut contraindre à utiliser vraiment des matrices, on propose un exercice ad hoc.

  • De fait, l'utilisation de coordonnées 2D pour représenter une position dans une matrice nést peut-être pas mal... en tout cas, c'est celle retenue par les mathématiciens de tout poils.
  • J'ai déjà répondu à deux reprises et en détail à ces arguments (coordonnées et mathématicien, je connais ça, les maths sont ma pratique quotidienne)

  • Ne perdez pas de vue, cher Candide, qu'encore une fois l'objectif n'est pas de produire du code efficace pour un problème donné, mais de forcer l'usage de certaines techniques...

  • Je pense que l'object avéré et atteint par les exercices de Prologin n'est pas celui-là. Jamais un programme n'a enjoint de coder de manière récursive, ou en utisant de la programmation dynamique, ou etc. On cherche avant tout à résoudre des problèmes et les méthodes sont assez libres et souvent variées, parfois contraintes. Fondamentalement, c'est le résultat qui compte puisque c'est ce qui permet de valider les tests, ces derniers ignorant la méthode.

Sinon, je pense que c'est une mauvaise idée de diriger la réflexion des candidats par le choix d'un code source-modèle pré-orienté vers telle ou tel type solution. Surtout si cela entraîne des complications inutiles comme c'est le cas, selon moi, du code dans "Où est Chiche ?". Je crois énormément aux vertus de la simplicité.

Répondre au sujet

Vous devez vous enregistrer ou vous connecter pour poster des messages.