Entrainement ouvert, good !!!!

Bonjour,

Je suis content, vous avez enfin réouvert la partie "Entrainement", bravo ! Je vais pouvoir enfin tester l'exo 4.

Très bien d'avoir placé pour chaque langage un template de code-source. Un bémol : dans le code C, vous ne testez pas le retour de calloc() (d'ailleurs malloc() suffisait), c'est mal de ne pas donner le bon exemple aux programmeurs ingénus ;)

Sinon, pas vu de possibilité de coder en Python, je suppose que tout n'est pas encore au point.

Petit détail : pourquoi le titre de l'exo 4 est "Containers" alors que dans l'énoncé c'est "conteneurs" et que le titre dans le questionnaire n'est ni l'un ni l'autre mais "Cargo" ?

Voilà pour l'instant, d'autres retours quand j'aurai testé mon code.

En effet, tout n'est pas encore finalisé. Il manque aussi le code source pour C#.

Pour le C : de même, la valeur de retour de scanf n'est pas testée. C'est pareil pour printf, on pourrait vérifier la valeur de errno. Mais est-ce vraiment utile ? Je pense qu'il vaut mieux laisser le code simple, on assure aux candidats que tout se passera bien.

Je précise aussi que le code fourni n'est qu'une indication. Il est tout à fait possible de le modifier comme on veut (par exemple, pour OCaml on peut préférer une liste à un tableau). Le code est généré automatiquement, il n'est pas forcément idéal (pour le premier exercice, on peut préférer avoir un tableau et même une structure). C'est à chacun de voir.

Merci pour le retour, les commentaires seront transmis aux responsables.

Bonjour, tout d'abord merci pour le site d'entraînement :)

j'ai remarqué une petite erreur dans le code c++ à compléter pour l'exercice n°1 :

std::cin >> h3 >> h2;

devrait être

std::cin >> h3 >> m3;

Pour le C : de même, la valeur de retour de scanf n'est pas testé
Exact, d'une façon générale, en programmation C, on teste assez rarement les entrées sur l'entrée standard, je ne sais pas pourquoi alors qu'on teste l'ouverture des fichiers, la mémoire, etc. Pour printf, c'est moins rédhibitoire.

Par ailleurs, et toujours en suivant des principes de bonnes programmation, celui qui alloue doit libèrer, ce qui n'a pas été fait ici, même si je suis bien d'accord que c'est un peu formel ici.

  • Je précise aussi que le code fourni n'est qu'une indication. Il est tout à fait possible de le modifier comme on veut (par exemple, pour OCaml on peut préférer une liste à un tableau). Le code est généré automatiquement, il n'est pas forcément idéal (pour le premier exercice, on peut préférer avoir un tableau et même une structure). C'est à chacun de voir.
  • Je pense que cette précision devrait figurer en toutes lettres avant les énoncés. Il faut aussi préciser que, d'un autre côté, on ne pas non plus faire n'importe quoi si on veut capturer convenablement comme il faut les entrées (l'input).

J'ai voulu en savoir davantage concernant la façon de poster son code. Hélas, le lien situé

http://www.prologin.org/?q=training

vers "le manuel d'utilisation" ne conduit vers aucun manuel.

Une des questions que je me posais est : combien la pile peut-elle empiler d'appels (c'est important pour la profondeur des récursions par exemple) ? Je me demandais aussi quelle était la vitesse du processeur qui teste, ça peut donner une idée si on teste chez soi en fonction de la puissance de sa propre machine. Il pourrait être utile aussi de signaler comment on fait pour savoir, chez soi toujours, combien de mémoire consomme l'exécution d'un programme, ou au moins le dire comment ça peut se déterminer sous Windows ou sous Linux.

Une des questions que je me posais est : combien la pile peut-elle empiler d'appels (c'est important pour la profondeur des récursions par exemple) ?

Ca dépend des langages, ça dépend aussi des arguments que l'on donne à la fonction. C'est donc difficile de donner une réponse générale (si ça intéresse vraiment, c'est facile de tester).

Pour les langages optimisant la récursion terminale (à peu près tous, il me semble, sauf Python et Java), il est intéressant d'en profiter en cas de doute, quand c'est faisable facilement.

Je ne sais pas quelle est la puissance de la machine. Un responsable devrait passer sur le forum.

J'ai voulu en savoir davantage concernant la façon de poster son code.

Il suffit de donner le code entier. Ce code est ensuite enregistré dans un fichier, compilé sur le serveur et exécuté. C'est le comportement du programme qui est testé. Tant que le comportement est correct, on peut mettre ce qu'on veut dans le code.

Ca dépend des langages, ça dépend aussi des arguments que l'on donne à la fonction.
Bien sûr puisque ces arguments occupent une certaine taille mémoire. Ça doit peut-être même dépendre du compilateur utilisé mais aussi de l'OS. La taille de la pile a aussi une importance sur la taille des tableaux statiques.

(si ça intéresse vraiment, c'est facile de tester).

Comment ça c'est facile de tester ? je vais pas m'amuser à tester le compilateur utilisé sur le serveur ? Je peux tester chez moi certes mais est-ce que ça marchera ailleurs ?

  • Pour les langages optimisant la récursion terminale*
    Ok mais c'est assez restrictif.

  • Il suffit de donner le code entier. Ce code est ensuite enregistré dans un fichier, compilé sur le serveur et exécuté. C'est le comportement du programme qui est testé. Tant que le comportement est correct, on peut mettre ce qu'on veut dans le code.
    *

OK, en fait je le sais parce que j'avais déjà posté des solutions mais je me rappelle que la première fois que j'ai fait ça, j'ai pas trouvé les explications super claires (en particulier la capture des entrées), bon en l'occurrence, c'était sur france-ioi. En fait, je me mets en position de Candide et j'essaye de comprendre ce que le débutant ne va pas comprendre.

Le sens de mon propos est qu'il est tout à fait regrettable que le lien vers le "manuel d'utilisation" soit incorrect, je trouve ça symptomatique. Je ne jette pas la pierre à Prologin pour ça, je suppose d'ailleurs qu'ils vont rectifier prochainement, c'est en fait une carence générale des systèmes d'information actuels.

Comment ça c'est facile de tester ?

Je viens de faire un programme C qui fait 45000 récursions, ça passe. Si j'en fais 50000, ça casse. La fonction n'avait qu'un seul argument, de type int.

Pour les autres langages, le test peut être fait aussi (si quelqu'un le fait, autant mettre le résultat sur le forum, ça évitera que tout le monde teste).

Merci pour les autres remarques. Les responsables ont fait le nécessaire pour que la partie entrainement soit disponible rapidement, ils n'ont pas encore pu tout fignoler.

Bonjour candide,

Concernant le manuel de la section d'entraînement, il a été remis en place. Si tu penses qu'il manque une information importante ou une précision, n'hésite pas à nous en faire part. ;-)

Concernant la machine utilisée pour tester les programmes, elle est architecturée autour d'un Intel Code2Duo cadencé à 2,40 GHz. Il possède donc deux cœurs, mais ça n'a pas d'importance puisque les programmes ne sont pas multithreadés.

J'ai ajouté dans le manuel la description de la machine, ainsi que les versions de tous les compilateurs utilisés.

Sinon, pas vu de possibilité de coder en Python, je suppose que tout n'est pas encore au point.

Ça devrait arriver dans la journée. :-)

Petit détail : pourquoi le titre de l'exo 4 est "Containers" alors que dans l'énoncé c'est "conteneurs" et que le titre dans le questionnaire n'est ni l'un ni l'autre mais "Cargo" ?

Oups, nous nous sommes un peu emmêlé les pinceaux. C'est corrigé, merci !

Bonjour deather

Merci d'avoir d'avoir remis en place le Manuel.

Le plus important : il faudrait un exemple CONCRET de problème et de sa soumission au serveur, genre trouver le maximum d'une liste et expliquer comment le serveur fournit les données au programme que le candidat soumet. Bon, aujourd'hui, ça me parait complètement évident mais quand j'ai soumis pour la première je ne comprenais rien. Donc probablement que des débutants vont se retrouver dans la situation où j'étais.

Je ne comprends pas ce que veut dire cette phrase :
Si le résultat donnée est faux, une comparaison entre la sortie fournie et la sortie attendue est donnée
ça veut dire quoi une "comparaison est donnée" ? concrètement, le candidat lit quoi comme message de la part du serveur ?

Je trouve qu'il manque des infos :
-- taille de la pile par exemple ?
-- options d'optimisation utilisées ?
-- la candidat est-il informé de la nature de l'erreur ou reçoit-il juste un message d'erreur sans plus de précision ?
-- est-ce que la réponse doit correspondre exactement, cad que si par exemple on met un saut de ligne en fin d'output et que votre réponse ne l'attend pas, est-ce que le test est négatif ? (ce qui peut être assez troublant)
-- comment marche exactement votre scoring ? etc

Le manuel comporte des coquilles/fautes d'orthographe, j'ai relevé par exemple :
"Si le résultat donnée est"
"par ordre de difficultém, "
"pour au moins un des test"

Cordialement

Le plus important : il faudrait un exemple CONCRET de problème et de sa soumission [...]

Nous allons y réfléchir, ce n'est pas une mauvaise idée.

Je ne comprends pas ce que veut dire cette phrase :
Si le résultat donnée est faux, une comparaison entre la sortie fournie et la sortie attendue est donnée
ça veut dire quoi une "comparaison est donnée" ? concrètement, le candidat lit quoi comme message de la part du serveur ?

En effet, la phrase n'était pas très claire. Je l'ai reformulée dans le manuel :
"Après exécution des tests, un récapitulatif vous est affiché, indiquant les tests réussis et les tests ratés. Pour le premier test raté uniquement, la sortie produite par votre programme est affichée, ainsi que la sortie attendue par le système de correction. L'exercice ne sera validé que lorsque tous les tests seront passés avec succès."

Je trouve qu'il manque des infos :
-- taille de la pile par exemple ?

Il n'y a pas de limite particulière, en dehors d'une limite dure imposée par le matériel sous-jacent. Elle ne devrait de toute manière jamais être atteinte dans les exercices que nous proposons.

-- options d'optimisation utilisées ?

Je l'ai précisé pour le C, le C++, le C#, et le F#, les autres n'en ont pas.

-- la candidat est-il informé de la nature de l'erreur ou reçoit-il juste un message d'erreur sans plus de précision ?

Tout est détaillé, tu as du déjà le voir non ?

-- est-ce que la réponse doit correspondre exactement, cad que si par exemple on met un saut de ligne en fin d'output et que votre réponse ne l'attend pas, est-ce que le test est négatif ? (ce qui peut être assez troublant)

Ça doit correspondre exactement caractère par caractère, c'est pour cela que nous donnons le formatage des données attendu en sortie. Le retour à la ligne en fin de dernière ligne n'est par contre pas important, nous demandons à diff de l'ignorer. J'ai précisé tout ça dans le manuel. :-)

-- comment marche exactement votre scoring ? etc

J'ai rajouté un paragraphe là-dessus.

Le manuel comporte des coquilles/fautes d'orthographe, j'ai relevé par exemple :

Merci, c'est corrigé ! :)

Merci des corrections.

Autre question qui peut avoir une importance pour ceux qui ont des problèmes de mémoire (sachant aussi que la mémoire peut suppléer un déficit d'intelligence ;) (*) ) :

sur votre machine les char font combien de bits ?

EDIT
Et pendant qu'on y est, on ne sait jamais, l'architecture est bien little endian ?

(*) et inversement d'ailleurs, un déficit de mémoire peut être suppléé par une intelligence développée !

sur votre machine les char font combien de bits ?

8 bits, soit un octet, tu connais des architectures / systèmes / compilateurs où ce n'est pas le cas ?

Et pendant qu'on y est, on ne sait jamais, l'architecture est bien little endian ?

Malheureusement oui, le serveur est architecturé autour d'un x86. ;-)

Je vais préciser tout ça !

8 bits, soit un octet, tu connais des architectures / systèmes / compilateurs où ce n'est pas le cas ?

Oui, dans certains DSP (processeurs embarqués) ou dans des machines anciennes, il arrive que CHAR_BIT ne vaille pas 8 mais 16, 32 ou 9 par exemple.

Sinon, j'avais oublié de mentionner que j'ai vu et apprécié que vous ayiez placé dans l'ordre chronologique les dates des questionnaires Prologin passés.

Sinon, votre exo 4 me donne pas mal de fil à retordre, j'y ai déjà perdu pas mal de temps mais difficile de ne pas se prendre au jeu.

Bon allez, rien que pour toi ton algo doit tourner sur une puce électronique d'un téléphone cellulaire de 1988, bidouillé en conséquence. Précise les modifs à y faire, bien entendu. Ah et pour corser les temps maximums sont divisés par 8 par rapport à ceux sur Core 2 Duo. ;-p

Bon, je viens de soumettre mon code pour l'exo 4 et j'ai eu la satisfaction de lire :

"Vous avez passé 9 tests sur 9 avec succès."

Je ne m'y attendais pas à vrai dire et même, comme j'avais un petit doute, j'ai quand même posté un code faux et heureusement, il n'a pas été validé mais quand même, j'ai eu le message : "Vous avez passé 2 tests sur 9 avec succès" d'ailleurs vous devriez expliquer dans le manuel que même avec un algo non performant, on peut passer quelques tests, je pense que ça inciterait davantage les candidats à soumettre.(*)

Quelques regrets néanmoins :

-- l'interface de soumission n'est pas très ergonomique : curieux de voir qu'on peut soumettre un fichier sans choisir le langage ; on est invité à choisir un fichier et on apprend en cours de route que la compilation par fichier est impossible. Pas de message javascript si on soumet un code source sans coller le code-source, on a droit à un message d'erreur du compilateur cible.

-- Aucune info sur les temps de test ni la mémoire utilisée, c'est frustrant.

J'ai trouvé l'exo 4 difficile, voire très difficile. Je subodore être passé à côté de la solution astucieuse. Néanmoins, une solution bestiale ne passe pas. Pour info, sur ma machine qui est assez vieille, un test semble passer en moins de 1s (à vue de nez car j'ai pas mesuré). Du point de vue mémoire, il a fallu serrer au niveau des bits, à vue d'oeil, dans le 7 Mo. Au passage, je trouve très dommage qu'on ne puisse disposer de fichier de tests (suffirait de donner un fichier texte avec des données d'input, et accompagné de la réponse parce qu'il est pas toujours facile de bâtir des sujets de tests et d'avoir les moyens de vérifier la justesse du résultat).

En tous cas félicitations et merci à l'équipe de Prologin de nous avoir fourni un aussi joli thème que cet exo 4. Chaque année, vous trouvez quelque chose de joli à chercher, continuez ainsi.

Sur ce, je tourne la page et je vais vaquer à d'autres occupations. Je souhaite bonne chance, inspiration et courage à tous les candidats.

Candide

EDIT Je pensais qu'il aurait eu un classement, surtout pour avoir une idée d'à côté de quoi on est passé !!

(*) Avec la méthode naïve on passe les 4 premiers test puis on lit :

test05
Sortie de débogage :
Limite de temps depassee

Répondre au sujet

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